Если ваша система использует PAM (большинство из них), вы можете использовать модуль PAM_EXEC
в сеансе
. Обратите внимание, что пользователь не будет войти в систему до завершения команды; Если вы хотите запустить что-то на заднем плане, вилить его. Несколько переменных среды предоставляют информацию о сеансе. Например:
session optional pam_exec.so seteuid /usr/local/sbin/my-login-process
где / usr / local / sbin / my-login-процесс
содержит что-то вроде
#!/bin/sh
{
exec 2>&1 >>"/var/log/my-root-service/$PAM_USER.log"
echo "$PAM_USER logged in on $PAM_TTY on $PAM_RHOST at $(date)"
do-something
} &
В файле /etc/sudoers
(shortcut visudo) добавьте эти строки:
Cmnd_Alias CMDNAME = /path/to/binaryOrscriptToBeRunAsRoot
%groupnamehere ALL=NOPASSWD: CMDNAME
Вместо того, чтобы использовать только имя пользователя, создайте группу CMDNAME, и все пользователи в этой группе будут иметь это разрешение:
groupadd groupnamehere
usermod -G groupnamehere usertoaddtogrouphere
Чтобы проверить это, станьте пользователем и выполните команду:
Пример этого:
/etc/sudoers
Cmnd_Alias TESTME = /usr/local/bin/testme.sh
%cmdgroup ALL=NOPASSWD: TESTME
/usr/local/bin/testme. sh
#!/bin/sh
#netstat can only be run by root on my servers.
#File permissions are 'chmod 700'
netstat -tln |grep :80
/etc/profile
# You need to change 'testme' in the boundry to match the groupname created
# This checks to see if the user who just logged is part of that cmdgroup,
# if so, it runs whatever is inside.
username=`id -un`
if groups $username | grep &>/dev/null '\btestme\b'; then
sudo /usr/local/bin/testme.sh
fi
Войдите в систему к пользователю этой группы и посмотрите:
[nonrootuser ~]#
tcp 0 0 :::80 :::* LISTEN