Вопрос: запускать скрипт как пользователь, у которого есть оболочка nologin


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

Я запустил бы скрипт как root, и он должен работать как другой пользователь. Бег : ~ # su -c "/ bin / touch / tmp / test" testuser будет работать, но мне нужна действительная оболочка для testuser. Я знаю, что могу отключить пароль с помощью passwd -d testuser и оставить оболочку в / bin / bash таким образом, чтобы защитить немного, но мне нужно иметь nologin / false shell.

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

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

благодаря


76
2018-01-18 13:56


Источник




Ответы:


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

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

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


107
2018-01-18 18:49



Что, если su root:root -rwsr-x--- ? - Patryk
Что делать, если у пользователя нет пароля? - CMCDragonkai
@Wesley Узнал, что вам нужно быть root, чтобы запустить эту команду для пользователя без пароля. - CMCDragonkai
@lain. Если у пользователя не должно быть оболочки, процесс, связанный с командой, не должен быть дочерним элементом процесса bash. Таким образом, вы также должны использовать exec для замены оболочки скриптом. И если вы хотите, чтобы сценарий был дочерним элементом init, вы просто используете &, как пример su -s /bin/bash -c 'exec /path/to/your/script &' test - Facundo Victor
Поскольку я потратил последние 20 минут на то, как добиться того же результата, используя runuser, Я хотел бы отметить, что su -s SHELL параметр делает команду runuser почти бесполезной :) Спасибо, Ян! - jirka


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

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

7
2018-01-18 14:03



Как вы передаете параметры sudo -u apache whoami? - CMCDragonkai
@CMCDragonkai Любые параметры после команды будут переданы вместе. Вы можете думать об этом как «sudo [-u apache] [whoami <param1> <param2>]». - Handyman5
Я думаю, используя sudo -u вероятно, не очень хорошая идея для запуска команд в качестве пользователя nologin, поскольку он предоставляет SUDO_USER в среде, которая является реальной, вызывает команду. Может быть, я просто переусердствовал. - Meow


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

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

4
2018-01-18 14:01





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

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

может быть, есть лучший способ?!


2
2017-12-07 19:19





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

sudo -i -u user command

-1
2018-02-16 07:18



это дает This account is currently not available. - knocte


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

см. справочную страницу

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

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

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

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


-1



Пожалуйста, не оставляйте ссылки только для ответов, чтобы предотвратить гниение ссылки. Вместо этого добавьте наиболее релевантную информацию из ссылки к вашему ответу или, альтернативно, разместите ссылку в качестве комментария вместо ответа. Видеть это serverfault.com/help/how-to-answer статью справочного центра для получения дополнительной информации. - Federico Galli
@FedericoGalli уже добавлена ​​самая важная информация, нет необходимости копировать и вставлять ее использование, справочная страница предоставляет достаточно информации - Z-Y00