В чем разница между двумя командами суперпользователя, su -s
и sudo -s
?
Они оба дают оболочку с доступом к учетной записи суперпользователя.
На практике они оба сделают вас суперпользователем. Тем не менее, они делают немного разные вещи, немного по-другому.
Во-первых, su -
переключает вас в оболочку входа, в то время как sudo -s
- нет. На практике это часто означает, что ваши переменные среды не будут переключаться на root
для sudo -s
. Обратите внимание, что вы можете запустить просто su
чтобы не получить оболочку входа, или sudo -i
чтобы получить оболочку входа [не во всех версиях].
Во-вторых, su
и su -
переключитесь на нового пользователя, попросив вас пройти аутентификацию как новый пользователь. sudo -s
и sudo -i
(и просто обычный sudo foo
) позволяют вам запустить команду, для которой вы предварительно авторизованы [see /etc/sudoers
], возможно, попросив вас подтвердить свой текущий идентификатор.
Если вы хотите быть по-настоящему милым, вы также можете запустить sudo su -
, который запросит вход в систему как root (su -
), запускаемый пользователем root (часть sudo
).
Если пользователь root заблокирован (например, в Ubuntu), вы не сможете войти в систему как root с помощью su
. В этом случае вам нужно использовать sudo -s
или sudo -i
su -s
Переключится на пользователя (в данном случае root) и запустит указанную вами оболочку или один из нескольких других методов определения оболочки. Это полезно, если вы хотите очень быстро использовать zsh или другую оболочку от имени root ... и по какой-то причине вы не используете sudo.
sudo -s
Просто запускает оболочку с помощью sudo, которая даст вам корневую оболочку. Вы также можете передать ему оболочку.
su -s старше, намного старше, чем команда sudo -s. Я предполагаю, что разработчик пытается максимально упростить переход на использование sudo.
su - это команда для перехода к другому пользователю, либо для запуска оболочки, либо для выполнения определенной команды. Вы должны авторизоваться как другой пользователь. Если вы хотите su для root, вам нужен пароль root.
sudo - это команда для выполнения другой команды (необязательно оболочки) от имени другого пользователя. Вы должны аутентифицироваться как ваш собственный пользователь. Разрешение на использование sudo (и конкретные действия, которые вы можете сделать с ним) задаются администратором в файле sudoers.
Если вы предоставляете кому-то доступ к su (например, предоставляя ему пароль root), он может делать с ним все что угодно - запускать другие команды, открывать оболочку, менять пароль, удаленно входить через ssh и т.д. По сути, вы предоставляете им доступ к другой учетной записи, причем «su» - это только одна вещь, которую они могут сделать с ней.
Судо гораздо более мелкозернистый. Вы можете предоставить привилегии пользователю или группе. Вы можете разрешить пользователю или группе выполнять sudo в течение определенного периода времени (например, с понедельника по пятницу, с 9:00 до 17:00). Вы можете указать конкретный список команд, которые им разрешено запускать (например, только /usr /local /bin /run_backup), или вы можете указать конкретного пользователя, которому разрешено запускать команды (например, www, backup, staff и т.д.). ).
Помимо своей гибкости, sudo является лучшим решением во всех случаях, поскольку не требует доступа к тому, чего у пользователя еще нет. Если вы предоставляете кому-то доступ к sudo, вы можете отозвать его, удалив его строку в файле sudoers или удалив его из группы sudoers. Если вы удалите их учетную запись, их доступ исчезнет.
Если вы дадите им пароль root, даже если предположите, что они не делают с ним ничего неприятного, они будут знать это вечно. Если у вас есть несколько человек, которым нужен root-доступ для административных задач, это означает либо изменение всех корневых паролей всякий раз, когда кто-то уходит, либо допущение, что для них нормально иметь полный доступ к вашим системам после вашего ухода.
Из Википедии:
su (сокращение от «замещающий пользователь» или «переключатель») - это команда Unix, используемая для запуска оболочки другого пользователя без выхода из системы.
Связанная команда с именем sudo выполняет команду от имени другого пользователя, но соблюдает набор ограничений, относительно которых пользователи могут выполнять какие команды, а какие другие пользователи (как правило, в файле конфигурации с именем /etc /sudoers, лучше всего редактируемым командой visudo). В отличие от su, sudo аутентифицирует пользователей по их собственному паролю, а не по паролю у целевого пользователя (чтобы разрешить делегирование определенных команд конкретным пользователям на определенных хостах без совместного использования паролей между ними и при этом минимизировать риск любых автоматических терминалов).
Одна вещь, которая не получила полного ответа, это то, что вы часто можете использовать, зависит от того, какой дистрибутив вы используете и кто его запускает. Один или другой (su
или sudo
), вероятно, не настроен для полного использования по умолчанию. Так, например, как уже упоминали некоторые люди, OS X и Ubuntu по умолчанию отключают корневую учетную запись (su
). Точно так же Debian не предоставляет обычным пользователям никаких привилегий по умолчанию для sudo
. (Во всех этих системах вы можете изменить эти значения по умолчанию, но только если у вас есть какие-то административные привилегии для начала. Я предполагаю, что мы говорим о несерверной ситуации, и вы управляете машиной, так как мы находимся на SU, а не на SF, но на всякий случай.)
Наконец, если вы хотите использовать sudo
более детально, вы должны посмотреть на man sudoers
как отредактировать файл /etc/sudoers . Тем не менее, вы никогда не должны редактировать его вручную. Используйте программу visudo - она не даст вам сохранить ваши изменения, если они не будут хотя бы минимально вменяемыми. Это отличная защита от простых ошибок, которые могут лишить вас прав администратора вашей системы.
В системах с отключенной учетной записью суперпользователя, таких как Mac OS X, su
не будет работать; sudo -s
будет.
Кроме того, кажется, нет доступных su -s
, по крайней мере, на моей машине.
Это введение может помочь вам. su
- это сокращение от su root
, и вы сохраняете свои права как другого пользователя на неопределенный срок. Более опасно, но и более удобно, если вы выполняете много команд root-доступа в течение определенного периода времени.
su в основном создаст новую оболочку входа в систему с другими привилегиями пользователя (логин). sudo просто временно разрешит вам выполнить команду, используя указанного вами пользователя. В некоторых UNIX, таких как FreeBDS, нет опций -s.