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

23922
Callum

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

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

23

9 ответов на вопрос

30
Mikeage

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

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

Стоит также сказать, что во многих дистрибутивах `sudo` не дает привилегий по умолчанию обычным пользователям. В этих системах `su` является единственным вариантом. Telemachus 10 лет назад 5
12
Mark Turner
su -s 

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

sudo -s 

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

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

10
Dan Udey

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. hot2use 4 года назад 0
5
badp
  • su спросит вас пароль пользователя root .
  • sudo спросит вас ваш пароль (и вам нужно очистить доступ sudo для этого).
Обычно это стандартное поведение для sudo, но его также можно настроить для запроса пароля root или другого пароля. theotherreceive 10 лет назад 2
2
Yaakov Ellis

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

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

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

2
Telemachus

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

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

1
jtbandes

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

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

Обратное часто верно. То есть во многих старых unix-подобных дистрибутивах обычные пользователи не имеют привилегий по умолчанию под `sudo` (который даже не всегда устанавливается). Telemachus 10 лет назад 0
1
Nikhil Chelliah

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

1
hendrasaputra

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

Похожие вопросы