sudo su "имя пользователя" против su "имя пользователя"

sudo su "имя пользователя" против su "имя пользователя"

Объясните мне, пожалуйста, в чем разница между: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. Тогда ваш скрипт можно будет прочитать, но файл с паролями — нет.

Связанный контент