23

В чем разница между двумя командами суперпользователя, su -s и sudo -s?

Они оба дают оболочку с доступом к учетной записи суперпользователя.

9 ответов9

30

На практике они оба сделают вас суперпользователем. Тем не менее, они делают немного разные вещи, немного по-другому.

Во-первых, 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

12
su -s

Переключится на пользователя (в данном случае root) и запустит указанную вами оболочку или один из нескольких других методов определения оболочки. Это полезно, если вы хотите очень быстро использовать zsh или другую оболочку от имени root ... и по какой-то причине вы не используете sudo.

sudo -s

Просто запускает оболочку с помощью sudo, которая даст вам корневую оболочку. Вы также можете передать ему оболочку.

su -s старше, намного старше, чем команда sudo -s. Я предполагаю, что разработчик пытается максимально упростить переход на использование sudo.

9

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-доступ для административных задач, это означает либо изменение всех корневых паролей всякий раз, когда кто-то уходит, либо допущение, что для них нормально иметь полный доступ к вашим системам после вашего ухода.

5
  • su спросит вас пароль пользователя root .
  • sudo спросит вас ваш пароль (и вам нужно очистить доступ sudo для этого).
2

Из Википедии:

su (сокращение от «замещающий пользователь» или «переключатель») - это команда Unix, используемая для запуска оболочки другого пользователя без выхода из системы.

Связанная команда с именем sudo выполняет команду от имени другого пользователя, но соблюдает набор ограничений, относительно которых пользователи могут выполнять какие команды, а какие другие пользователи (как правило, в файле конфигурации с именем /etc /sudoers, лучше всего редактируемым командой visudo). В отличие от su, sudo аутентифицирует пользователей по их собственному паролю, а не по паролю у целевого пользователя (чтобы разрешить делегирование определенных команд конкретным пользователям на определенных хостах без совместного использования паролей между ними и при этом минимизировать риск любых автоматических терминалов).

2

Одна вещь, которая не получила полного ответа, это то, что вы часто можете использовать, зависит от того, какой дистрибутив вы используете и кто его запускает. Один или другой (su или sudo), вероятно, не настроен для полного использования по умолчанию. Так, например, как уже упоминали некоторые люди, OS X и Ubuntu по умолчанию отключают корневую учетную запись (su). Точно так же Debian не предоставляет обычным пользователям никаких привилегий по умолчанию для sudo . (Во всех этих системах вы можете изменить эти значения по умолчанию, но только если у вас есть какие-то административные привилегии для начала. Я предполагаю, что мы говорим о несерверной ситуации, и вы управляете машиной, так как мы находимся на SU, а не на SF, но на всякий случай.)

Наконец, если вы хотите использовать sudo более детально, вы должны посмотреть на man sudoers как отредактировать файл /etc/sudoers . Тем не менее, вы никогда не должны редактировать его вручную. Используйте программу visudo - она не даст вам сохранить ваши изменения, если они не будут хотя бы минимально вменяемыми. Это отличная защита от простых ошибок, которые могут лишить вас прав администратора вашей системы.

1

В системах с отключенной учетной записью суперпользователя, таких как Mac OS X, su не будет работать; sudo -s будет.

Кроме того, кажется, нет доступных su -s , по крайней мере, на моей машине.

1

Это введение может помочь вам. su - это сокращение от su root , и вы сохраняете свои права как другого пользователя на неопределенный срок. Более опасно, но и более удобно, если вы выполняете много команд root-доступа в течение определенного периода времени.

1

su в основном создаст новую оболочку входа в систему с другими привилегиями пользователя (логин). sudo просто временно разрешит вам выполнить команду, используя указанного вами пользователя. В некоторых UNIX, таких как FreeBDS, нет опций -s.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .