Все, что мне нужно сделать, это запустить конкретный сценарий от имени конкретного пользователя, у которого есть 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
может есть способ получше ?!
на самом деле, лучший способ сделать это - через бегун
подробности см. на странице руководства
этот инструмент используется, чтобы справиться с ситуацией, как сказал разработчик в своем болге
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