запустите процесс (как корень) после пользовательского входа в систему

[1120004] Что вы имеете в виду под "командой, которая обычно зарезервирована для root"? [12222] Обычно каждая команда может быть запущена. Однако некоторые команды требуют привилегий, доступных только root. Если вы не являетесь пользователем root, команда обычно говорит вам и отказывается делать то, что вы просите.[12223]Просто обычно работайте как обычный пользователь и используйте что-то вроде [1120485]sudo[1120486] для явного использования силы root.[12224]Некоторые системы различают там команды в "обычных командах" и "системных командах", и поместите их под [1120487]/бин[1120488] против [1120489]/бин[1120490] или [1120491]/usr/bin[1120492] против [1120493]/usr/sbin[1120494]. Обычно команды в [1120495]sbin[1120496] чаще используются root.[12225]По умолчанию Debian в каталогах [1120497]sbin[1120498] находится только в [1120499]$PATH[1120500] root. В Archlinux это просто сим-ссылки на единственный каталог, содержащий все двоичные файлы. [1120013]
1
19.01.2015, 17:50
2 ответа

Если ваша система использует 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
} &
3
27.01.2020, 23:20

В файле /etc/sudoers (shortcut visudo) добавьте эти строки:

Cmnd_Alias   CMDNAME = /path/to/binaryOrscriptToBeRunAsRoot
%groupnamehere ALL=NOPASSWD: CMDNAME

Вместо того, чтобы использовать только имя пользователя, создайте группу CMDNAME, и все пользователи в этой группе будут иметь это разрешение:

groupadd groupnamehere
usermod -G groupnamehere usertoaddtogrouphere

Чтобы проверить это, станьте пользователем и выполните команду:

  1. Станьте пользователем => su - имя пользователя здесь
  2. Проверка групп user is in => groups
  3. Run command => sudo CMDNAME restart
  4. В случае, если это не глобальная команда run => sudo /path/to/binaryOrScript arg

Пример этого:

/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
1
27.01.2020, 23:20

Теги

Похожие вопросы