Запустить скрипт как пользователь, у которого есть nologin shell
Все, что мне нужно сделать, - это запустить конкретный скрипт от имени конкретного пользователя, у которого есть оболочка nologin/false, указанная в / etc / passwd.
Я бы запустил скрипт от имени пользователя root, и он должен запускаться от имени другого пользователя. Бег:
~# su -c "/bin/touch /tmp/test" testuser
будет работать, но мне нужна корректная оболочка для тестируемого. Я знаю, что могу отключить пароль с passwd -d testuser и оставить оболочку для / bin / bash таким образом немного защитит, но мне нужно иметь оболочку nologin/false.
По сути, мне нужно то, что делает crontab, когда мы устанавливаем задания для запуска от имени конкретного пользователя, независимо от того, имеет ли он оболочку nologin/false.
PS Я нашел этот поток Выполнение команды от имени пользователя nologin, но я не знаю, как "объединить" команду su -s /bin/sh $user к сценарию мне нужно запустить
Спасибо
8 ответов
Вы можете использовать ключ -s для su для запуска определенной оболочки
su -s /bin/bash -c '/path/to/your/script' testuser
(Prepend 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
может есть лучший способ?!
На самом деле, лучший способ сделать это через runuser
см. справочную страницу для деталей
этот инструмент используется, чтобы справиться с ситуацией, как сказал разработчик в своем болге
Когда служба работает от имени пользователя root и хочет изменить UID с помощью оболочки, она должна использовать runuser.
http://danwalsh.livejournal.com/55588.html
я разместил этот ответ во многих дворцах, прости меня, если ты находишь это раздражающим
Используйте sudo -u, чтобы указать пользователя. Также используйте флаг -i, чтобы также установить переменные окружения целевого пользователя.
sudo -i -u user command
Все что тебе нужно этоsudo:
sudo -u <user> -g <group> -- <command>
Используйте команду su с командами shell -s и -c. Как показано ниже
su exec -l -c '/bin/bash /etc/update_conf.sh' -s /bin/bash