Назад | Перейти на главную страницу

Как запустить команду от имени пользователя, у которого / usr / sbin / nologin от имени Shell?

Все, что мне нужно сделать, это запустить конкретный сценарий от имени конкретного пользователя, у которого есть nologin/false оболочка указана в /etc/passwd.

Я бы запустил сценарий от имени пользователя root, а он должен работать от имени другого пользователя. Бег:

~# su -c "/bin/touch /tmp/test" testuser

будет работать, но мне нужна действующая оболочка для тестового пользователя. Я знаю, что могу отключить пароль с помощью passwd -d testuser и оставьте оболочку /bin/bash этот способ немного обезопасит, но мне нужно иметь nologin/false оболочка.

В основном мне нужно то, что crontab делает, когда мы устанавливаем задания для запуска от имени конкретного пользователя, независимо от того, nologin/false оболочка.

p.s Я нашел эту ветку Выполнение команды как пользователь без логина, но я понятия не имею, как concatenate команда su -s /bin/sh $user к сценарию, который мне нужно запустить.

Вы можете использовать ключ -s для su для запуска определенной оболочки

su -s /bin/bash -c '/path/to/your/script' testuser

(Добавить sudo к вышеизложенному, если testuser является пользователем без пароля.)

Вы можете сделать это с помощью sudo -u если он у вас установлен:

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

Предоставив сценарий в качестве аргумента для выполнения в / bin / sh:

su -s "/bin/sh /your/script/location" username

только что понял :

su -s "/ bin / bash" -c "/ bin / touch / tmp / testuser" testuser

может есть способ получше ?!

на самом деле, лучший способ сделать это - через бегун

подробности см. на странице руководства

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

Всякий раз, когда служба запускается от имени root и хочет изменить UID с помощью оболочки, она должна использовать runuser.

http://danwalsh.livejournal.com/55588.html

я разместил этот ответ во многих дворцах, простите меня, если вас это раздражает

Используйте sudo -u, чтобы указать пользователя. Также используйте флаг -i, чтобы установить переменные среды целевого пользователя.

sudo -i -u user command

Используйте команду su с командами shell -s и -c. Как показано ниже

 su  exec -l -c '/bin/bash /etc/update_conf.sh' -s /bin/bash