Ответы:
На практике они оба сделают вас суперпользователем. Тем не менее, они делают немного разные вещи, немного по-другому.
Во-первых, su -
переключается на оболочку входа в систему, тогда как sudo -s
нет. На практике это часто означает, что переменные вашей среды не будут переключаться root
на sudo -s
. Обратите внимание, что вы можете запустить просто, su
чтобы не получить оболочку входа в систему или sudo -i
получить оболочку входа в систему [не во всех версиях].
Во-вторых, su
и su -
переключитесь на нового пользователя, попросив вас пройти аутентификацию в качестве нового пользователя. sudo -s
и sudo -i
(и просто регулярно sudo foo
) позволяет запустить команду, для которой вы предварительно авторизованы [см. /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
по умолчанию отключают учетную запись root ( ). Точно так же Debian не дает обычным пользователям никаких привилегий по умолчанию sudo
. (На всех этих системах вы можете изменить эти значения по умолчанию, но только если у вас есть какие-то административные привилегии для начала. Я полагаю, мы говорим о несерверной ситуации и вы администрируете машину, так как мы находимся скорее на SU чем SF, но на всякий случай.)
Наконец, если вы хотите использовать sudo
более детально, вы должны посмотреть, man sudoers
как редактировать файл / etc / sudoers . Тем не менее, вы никогда не должны редактировать его вручную. Используйте программу visudo - она не позволит вам сохранить ваши изменения, если они не будут хотя бы минимально вменяемыми. Это отличная защита от простых ошибок, которые могут лишить вас прав администратора вашей системы.
В системах, где учетная запись суперпользователя отключена, таких как Mac OS X, su
работать не будет; sudo -s
воля.
Кроме того, кажется, что нет в su -s
наличии, по крайней мере, на моей машине.
sudo
(что даже не всегда установлено).
Это введение может помочь вам. su
является условным su root
обозначением, и вы сохраняете свои права как другого пользователя на неопределенный срок. Более опасно, но и более удобно, если вы выполняете много команд root-доступа в течение определенного периода времени.
su в основном создаст новую оболочку входа в систему с другими привилегиями пользователя (логин). sudo просто временно разрешит вам выполнить команду, используя указанного вами пользователя. В некоторых UNIX, таких как FreeBDS, нет опций -s.
sudo
обычные пользователи не получают привилегий по умолчанию. На этих системахsu
это единственный вариант.