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

12

В чем разница между командой sudoи su? Почему OS X обрабатывает их иначе, чем Linux?

whitefleaCH
источник
1
Во всяком случае, Linux будет обращаться с ними иначе, чем OS X. OS X сертифицирована Unix, что означает, что она соответствует определенному стандарту поведения. Linux похож на Unix, но не сертифицирован Unix и не обязательно соответствует стандарту Unix. Так что, если есть различия (кроме проблемы с паролем root, отмеченной в ответе Аарона Лейка), они не соответствуют требованиям разработчиков конкретного дистрибутива Linux.
Алесплин

Ответы:

21

OS X работает так же, как sudoи suв Linux.

sudoэто команда, которая без каких-либо дополнительных параметров запускает команду от имени пользователя root. Например:

% touch /newfile
touch: /newfile: Permission denied
% ls -l /newfile
ls: /newfile: No such file or directory
% sudo touch /newfile
% ls -l /newfile 
-rw-r--r--  1 root  wheel  0 Apr 27 11:45 /newfile

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

% whoami
alake
% sudo su
$ whoami
root

Основное различие между sudoи suзаключается sudoв том, что команда запускается от имени пользователя root, тогда как она suделает вас пользователем root. Так же, как и другие утилиты командной строки, есть несколько альтернативных способов использовать оба, sudoи su, если вам интересно, вы всегда можете запустить, man <command>например. man sudoчтобы получить больше информации.

Озеро Аарон
источник
5
В простых языковых терминах sudoможет быть как super user and do. В качестве дополнительного пункта, в OS X, после успешной аутентификации, вы можете использовать sudo без пароля в течение короткого времени (5 минут по умолчанию, если не указано иное sudoers), после чего вам придется снова вводить пароль.
двоичный боб
1
'без дополнительных опций' - довольно значительный квалификатор ... они оба позволят вам стать пользователями, отличными от root ... например, sudo su -lm _wwwпозволят вам иметь такую ​​же оболочку, как если бы пользователь веб-сервера (запустив команду как root, как у него нет действительного пароля)
Joe
2
@ Джо, я решил добавить эту информацию, но для краткости опущен. Как вы описываете, sudoэто довольно надежная утилита, которая охватывает даже базовые функции, что в конечном итоге может сбить с толку или подавить целевую аудиторию, ищущую разницу между sudoи su.
Озеро Аарон,
«Основное различие между sudo и su состоит в том, что sudo запускает команду как root, тогда как su делает вас root» - false, sudo -sзапускает shell («делает вас root») и su -c commandзапускает команду как root.
el.pescado
2
Опять же, ради краткости, я опустил множество альтернативных методов использования sudo. Кроме того, вы не можете сделать su -c commandпо умолчанию на OS X, так как вы не знаете пароль пользователя root. Однако вы можете sudo suизменить пароль su -c command. Я чувствую, что на вопрос был дан ответ, и не было необходимости погружаться глубже, чтобы поочередно использовать sudo и su. Однако я обновлю пост для любопытных людей.
Озеро Аарон,