В чем различия между "su", "sudo -s", "sudo -i", "sudo su"?
Я уже прочитал это из руководства, но я не вижу разницы..
su
- изменить идентификатор пользователя или стать суперпользователем
sudo -s [command]
-s
Опция (shell) запускает оболочку, указанную переменной среды SHELL, если она установлена, или оболочку, указанную в passwd(5). Если указана команда, она передается в оболочку для выполнения. В противном случае, интерактивная оболочка выполняется.
sudo -i
исчезнуть описание в руководстве
5 ответов
Основное различие между этими командами заключается в том, как они ограничивают доступ к своим функциям.
su
(что означает "заменить пользователя" или "переключить пользователя") - делает именно это, запускает другой экземпляр оболочки с привилегиями целевого пользователя. Чтобы убедиться, что у вас есть права для этого, он запрашивает пароль целевого пользователя. Итак, чтобы стать пользователем root, вам нужно знать пароль root. Если на вашем компьютере есть несколько пользователей, которым нужно запускать команды от имени пользователя root, все они должны знать пароль root - учтите, что это будет тот же пароль. Если вам необходимо отозвать права администратора у одного из пользователей, вам нужно изменить пароль пользователя root и сообщить его только тем людям, которым необходимо сохранить доступ - беспорядочно.
sudo
(хм... что за мнемоника? Super-User-DO?) совершенно другая. Он использует файл конфигурации (/etc/sudoers), в котором указывается, какие пользователи имеют права на определенные действия (запускать команды от имени пользователя root и т. Д.). При вызове запрашивает пароль пользователя, который его запустил, - чтобы убедиться, что пользователь Терминал действительно тот же "Джо", который указан в /etc/sudoers
, Чтобы отозвать права администратора у человека, вам просто нужно отредактировать файл конфигурации (или удалить пользователя из группы, которая указана в этой конфигурации). Это приводит к намного более чистому управлению привилегиями.
В результате этого во многих системах на основе Debian root
У пользователя не установлен пароль - то есть невозможно войти в систему как root напрямую.
Также, /etc/sudoers
позволяет указать некоторые дополнительные параметры - т.е. пользователь X может запускать только программу Y и т. д.
Часто используемый sudo su
Комбинация работает следующим образом: первая sudo
запрашивает ваш пароль и, если вам разрешено, вызывает следующую команду (su
) как супер-пользователь. Так как su
вызывается root
, он не требует ввода пароля целевого пользователя. Так, sudo su
позволяет открыть оболочку от имени другого пользователя (включая пользователя root), если вам разрешен доступ суперпользователя /etc/sudoers
файл.
sudo
позволяет запускать команды в своей учетной записи пользователя с правами root. su
позволяет вам переключать пользователя, чтобы вы вошли в систему как пользователь root.
sudo -s
запускает оболочку с привилегиями root. sudo -i
также приобретает среду пользователя root.
Чтобы увидеть разницу между su
а также sudo -s
, делать cd ~
а потом pwd
после каждого из них. В первом случае вы будете в домашнем каталоге root, потому что вы root. Во втором случае вы будете находиться в своем домашнем каталоге, потому что вы сами с правами суперпользователя.
Здесь обсуждается именно этот вопрос.
Этот ответ является обманом моего ответа на вопрос об обмане, поставленный здесь на каноническом ответе, чтобы люди могли его найти!
Основное различие между sudo -i
а также sudo -s
является:
sudo -i
дает вам корневую среду, т.е.~/.bashrc
игнорируетсяsudo -s
дает вам среду пользователя, поэтому ваш~/.bashrc
уважается.
Вот пример, вы можете видеть, что у меня есть приложение lsl
в моем ~/.bin/
каталог, который доступен через sudo -s
но не доступно с sudo -i
, Также обратите внимание, что приглашение Bash изменяется так же, как и sudo -i
но не с sudo -s
:
dotancohen@melancholy:~$ ls .bin
lsl
dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl
dotancohen@melancholy:~$ sudo -i
root@melancholy:~# which lsl
root@melancholy:~# exit
logout
dotancohen@melancholy:~$ sudo -s
Sourced .bashrc
dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl
dotancohen@melancholy:~$ exit
exit
Хоть sudo -s
удобен для предоставления вам среды, с которой вы знакомы, я рекомендую использоватьsudo -i
по двум причинам:
- Визуальное напоминание о том, что вы находитесь в "корневой" сессии.
- Вероятность того, что корневая среда будет отравлена вредоносным ПО, таким как мошенническая линия в
.bashrc
,
su
Запрашивает пароль root, становится root, открывает интерактивную оболочку без авторизации.su -
Запрашивает пароль root, становится root, открывает интерактивную оболочку входа в систему.
sudo -s
Запрашивает ваши пароли, становится пользователем root, открывает интерактивную оболочку без авторизации.sudo -i
Запрашивает ваши пароли, становится root, открывает интерактивную оболочку входа в систему.
Лучшая практика заключается в использовании этих двух.
sudo su
Запрашивает ваш пароль, становится root на секунду и запускаетсяsu
как root`sudo su -
Запрашивает ваш пароль, становится root на секунду и запускаетсяsu -
как корень.
Так что в этом случае вы работаете su
с помощью sudo
и вам не нужно знать действительный пароль пользователя root. Результаты такие же, как su
а также su -
,
su
запрашивает пароль пользователя "root".
sudo
запрашивает ваш собственный пароль (а также проверяет, разрешено ли вам запускать команды от имени root, что настраивается через /etc/sudoers
- по умолчанию все учетные записи пользователей, принадлежащие к группам "admin" или "sudo", могут использовать sudo).
sudo -s
запускает оболочку как root, но не меняет ваш рабочий каталог. sudo -i
имитирует вход в систему в корневой учетной записи: ваш рабочий каталог будет /root
и корень .profile
и т.д. будут получены, как будто при входе в систему.
В Ubuntu или связанной системе я не нахожу много пользы для su
в традиционном, суперпользовательском смысле. sudo
справляется с этим делом гораздо лучше. Тем не мение, su
отлично подходит для того, чтобы стать другим пользователем в одноразовых ситуациях, когда настройка sudoers была бы глупой.
Например, если я чиню свою систему с живого CD/USB, я часто монтирую свой жесткий диск и другие необходимые вещи и chroot
в систему. В таком случае моя первая команда, как правило:
su - myuser # Note the '-'. It means to act as if that user had just logged in.
Таким образом, я работаю не как root, а как обычный пользователь, и затем использую sudo
по мере необходимости.