В чем разница между `sudo -i -u user` и `sudo su - user`?

Обе команды:

sudo -i -u username
sudo su - username

Войдет в систему как username, если я введу свой пароль. Есть ли на самом деле какая-то разница между этими командами?


person Jan Dudulski    schedule 29.07.2015    source источник
comment
Запустите sudo -i -u username и проверьте свои переменные среды, затем запустите sudo su - username и проверьте свои переменные среды. Вы должны увидеть разницу   -  person Mischa    schedule 29.07.2015
comment
возможно, этот ответ может вам помочь, я также пытаюсь найти ответ на тот же вопрос. askubuntu.com/questions/376199/   -  person Radan    schedule 25.11.2015
comment
Есть также очень существенные изменения конфигурации. Если вы используете sudo su, то ваша конфигурация PAM для su имеет значение в дополнение к вашей конфигурации sudoers; если вы используете только sudo, то вы зависите только от sudo (и всей конфигурации, включенной в него по ссылке - его модули PAM, его конфигурация и т. д.), тогда как использование su дополнительно означает, что вы зависите от двух< /i> инструменты с независимым поведением и конфигурацией (и в первом случае нужно настроить, чтобы разрешить последнее).   -  person Charles Duffy    schedule 13.12.2016
comment
Интересно, что я только что видел случай, когда sudo -i -u someuser не устанавливает переменные из /etc/environment, а sudo su - someuser устанавливает. (sudo -i в этой системе Ubuntu 14.04 раньше работало.)   -  person cjs    schedule 18.04.2019


Ответы (1)


Команда su означает «замещающий пользователь» и позволяет вам стать другим пользователем (суперпользователем). sudo su изменяет текущего пользователя на root, но environment settings (PATH) остается прежним. Это позволяет пользователю, у которого есть разрешения, выполнять команду в качестве суперпользователя или другого пользователя, как указано в файле sudoers.

С sudo -i вы получаете чистую корневую оболочку. Опция ‑i (имитировать начальный вход в систему) запускает оболочку, указанную в записи базы данных паролей целевого пользователя, в качестве оболочки входа в систему. Это означает, что файлы ресурсов для входа в систему, такие как .profile или .login, будут считываться оболочкой. Если указана команда, она передается оболочке для выполнения с помощью опции оболочки -c. Если команда не указана, выполняется интерактивная оболочка.

person sTg    schedule 29.07.2015
comment
Afaik su означает «замещающий пользователь», а не «переключение пользователя» (или даже «суперпользователь»). - person NaN; 29.07.2015
comment
спасибо, NaN .. я исправил .. извинения за опечатку. - person sTg; 29.07.2015
comment
меняет текущего пользователя на root, но настройки среды (PATH) останутся прежними - на самом деле это не так для меня - person Jan Dudulski; 29.07.2015
comment
sudo su - имя пользователя, в этом случае bash называется оболочкой входа в систему, поэтому /etc/profile, .profile и .bashrc выполняются, и вы окажетесь в домашнем каталоге пользователя с пользовательской средой. есть разница между sudo su и sudo su — проверьте askubuntu.com/questions/376199/ - person Radan; 25.11.2015