
Объясните мне, пожалуйста, в чем разница между:sudo su "имя пользователя"против.su "имя пользователя"
У кого больше привилегий? Если я войду в root сsudo su "имя пользователя", я root только для одной команды? Так может быть, что начало скрипта работает нормально, а остальное нет? Так что в этом случаеsu "имя пользователя"предлагается, потому что у него более высокие привилегии? Пожалуйста, объясните мне разницу между этими 2 командами, спасибо.
решение1
Вот отличия:
su <someuser>
запускает оболочку для пользователяsomeuser
. Если вы не являетесь пользователем root, вам будет предложено ввести пароль дляsomeuser
.su
(без имени пользователя) запустить оболочку для пользователяroot
(после запроса пароля root).sudo
запрашивает ваш пароль и (при условии, что у вас есть права sudo) выполняет команду с правами root (sudo reboot
запрашивает ваш пароль и перезагружает компьютер).sudo su <somesuer>
выполняетсяsu
с привилегиями root. Поэтому он не запрашиваетsomeuser
пароль. Однако он запроситтвойпароль для проверки прав sudo. После этого запустится оболочкадля пользователя someuser.
С точки зрения привилегий, нет никакой разницы для оболочки, которая открывается с помощью sudo su <someuser>
или с помощью su <someuser>
. Этоне являетсяпроблема безопасности, поскольку процесс оболочки не может повысить привилегии до родительского процесса.
Тыможетпочувствуйте разницу, если посмотрите на дерево процессов. sudo su <someuser>
показывает (предполагается, что bash):
+───bash───su───bash
Пока su <someuser>
показывает:
+───bash───sudo───su───bash
Ваш следующий вопрос, вероятно, как передать пароль в неконтролируемом скрипте, который не требует ввода данных пользователем. Я думаю, есть два варианта:
- Запустите скрипт из cron (или любой его версии) и запустите его как root.
- Запустите скрипт из своей учетной записи и используйте опцию -S sudo, как здесь:
echo <yourpassword> | sudo -S su -l <someuser>
или даже лучше:echo <yourpassword> | sudo -S su -l <someuser> -c '<somecommand>'
. Убедитесь, что скрипт доступен для чтения только вам, так как в нем находится ваш пароль. Более косвенно, вы можете сохранить свой пароль в файле и выполнить cat для sudo. Тогда ваш скрипт можно будет прочитать, но файл с паролями — нет.