Запустить скрипт как пользователь, у которого есть 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
Другие вопросы по тегам