В чем разница между командами «su -s» и «sudo -s»?

23

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

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

Каллум
источник

Ответы:

30

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

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

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

Дэн Удей
источник
хорошее объяснение различий между двумя командами su и sudo.
Джон aka hot2use
5
  • su спросит вас пароль пользователя root .
  • sudo спросит вас ваш пароль (и вам нужно очистить доступ sudo для этого).
badp
источник
2
Обычно это стандартное поведение для sudo, но его также можно настроить для запроса пароля пользователя root или другого.
другой прием
2

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

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

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

Яаков Эллис
источник
2

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

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

Телемах
источник
1

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

Кроме того, кажется, что нет в su -sналичии, по крайней мере, на моей машине.

jtbandes
источник
Обратное часто верно. То есть, во многих старых unix-подобных дистрибутивах обычные пользователи не имеют привилегий по умолчанию sudo(что даже не всегда установлено).
Телемах
1

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

Нихил Челлия
источник
1

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

hendrasaputra
источник