Автор: Алексей Федорчук
Мир Linux. Наброски к книге
Команда su
— традиционный способ получения прав администратора внутри сеанса обычного пользователя (независимо, консольного или Иксового). Насколько я знаю, она испокон веков существует во всех POSIX-совместимых системах. Её GNU-версия, используемая в Linux, входит в состав
Имя этой команды иногда трактуют как аббревиатуру от Super User, но на самом деле оно означает Set UID, потому что она позволяет получить права не только администратора, но и любого другого пользователя — достаточно указать его имя в качестве аргумента:
$ su username
После чего ввести его пароль. При этом некоторые переменные окружения (например, текущий каталог), однако, наследуются от пользователя, давшего команду, а не от того, чей идентификатор был получен в результате её исполнения. Дабы полностью воспроизвести shell-окружение нового пользователя, эту команду надо дать в форме
$ su -l username
где опция l
символизирует, что все переменные из профильного файла командной оболочки пользователя (login shell) будут перечитаны заново.
Вместо командной оболочки пользователя, прописанной как login shell в атрибутах его аккаунта, можно использовать и любую другую, из числа установленных в системе и, что немаловажно, фигурирующую в файле /etc/shells
(впрочем, любой шелл, установленный штатным для данного дистрибутива способом, как правило, попадает туда автоматически). Для этого существует специальная опция, значением которой будет путь и имя исполняемого файла оболочки. Например, команда
$ su -l username -s /bin/zsh
создаст сеанс пользователя username с оболочкой zsh в качестве login shell вместо той, которая прописана для него по умолчанию. Впрочем, этой возможностью вряд ли кто активно пользуется, кроме как в экспериментальных целях — например, для оценки возможностей некоего свежеустановленного шелла.
Команда su
, данная без опций и аргумента, предоставляет, по вводе соответствующего пароля, доступ именно к суперпользовательскому аккаунту. Если мы пароль знаем и введем правильно — казалось бы, ничего не произойдет, никаких сообщений не последует. Правда, присмотревшись, можно увидеть, что изменился вид приглашения командной строки (как — зависит от настроек командной оболочки, по умолчанию для bash
— с символа доллара, $
, на символ решётки, #
). И это должно послужить сигналом к повышенному вниманию — с данного момента наш обычный пользователь наделен полномочиями root’а.
Правда, как уже было сказано, все настройки среды пользователя, эту команду отдавшего, сохраняются. Если требуется получить доступ к переменным окружения администратора в полном объеме (в частности, к путям поиска исполнимых файлов, которые для root’а и обычного пользователя могут быть разными), используется упомянутая выше форма
$ su -l
или, ещё короче,
$ su -
После этого никаких отличий от ситуации, когда мы авторизовались root’ом в ответ на первичное приглашение в консоли, не обнаружится. Обратим внимание на то, что текущий каталог, в котором была отдана команда, сменится на домашний каталог пользователя root — это довольно распространённый источник ошибок начинающих пользователей.
В большинстве дистрибутивов Linux права администратора посредством команды su
может получить любой пользователь, имеющий аккаунт в данной системе. Однако в некоторых из них, например, в Gentoo, по примеру BSD-систем по умолчанию введено ограничение: доступ к суперпользовательскому аккаунту имеют только пользователи, входящие в определённую группу — wheel.
Впрочем, доступ к root-аккаунту можно изменить в любую сторону — как ограничить, так и «демократизировать». Как — зависит от дистрибутива, точнее, от метода аутентификации пользователей. Так, в Fedora, по умолчанию использующей PAM-аутентификацию без задействования группы wheel, для ограничения административного рвения пользователей следует отредактировать файл /etc/pam.d/su, а именно — снять комментарии со следующих строк:
#auth sufficient pam_wheel.so trust use_uid # Uncomment the following line to require a user to be in the "wheel" group. #auth required pam_wheel.so use_uid
А перед этим надо, разумеется, не забыть добавить особо доверенных пользователей — в частности, себя, любимого, в эту группу командой вроде
# usermod -G wheel username
данной от лица суперпользователя.
У меня в любой системе, в которой я работаю сколько-нибудь продолжительное время, сосуществует два аккаунта: для моей скромной персоны при исполнении производственных обязанностей, и для неё же, занимающейся экспериментами, подчас нездоровыми. Так вот, в группу wheel я включаю только первого пользователя, дабы шаловливые ручонки второго не напортачили что-нибудь всерьёз.
Созданный командой su
«сеанс в сеансе» будет продолжаться неограниченно долго, до тех пор, пока не будет завершён явным образом — командой exit
, которая вернёт обычное пользовательское окружение, в том числе и текущий каталог, в котором мы находились до начала «вторичного сеанса».
Нередко, однако, административные полномочия нужны для выполнения одной- единственной команды. Например, нелепо открывать внутренний сеанс суперпользователя для того, чтобы только посмотреть текущую разметку диска командой вроде fdisk -l
. Что же, команда su
предоставляет нам и такую возможность — посредством опции -c
(или —command=), значениями которой будет выступать требуемая команда вместе со всеми необходимыми опциями и аргументами. Например:
$ su -c 'fdisk -l /dev/sdb'
или
$ su --command='fdisk -l /dev/sdb'
после ввода пароля суперпользователя выведут нам информацию об указанном диске точно так же, как это было бы после последовательности команд
$ su [пароль] fdisk /dev/sdb
Опять же обращаю внимание, что имя команды вместе с опциями и аргументами должно быть экранировано кавычками — иначе, скажем, аргумент /dev/sdb будет воспринят как имя пользователя, чьи права мы желаем получить, что повлечёт за собой сообщение об ошибке. Во всех виденных мной указаниях приводятся именно строгие, одинарные, кавычки (как в нашем примере), однако обычно проходят и нестрогие, двойные.
Неудобство такого способа в том, что после открывающей кавычки в командной строке перестаёт работать автодополнение по нажатию клавиши Tab. То есть сложные команды и пути придётся вводить по памяти. Эта, казалось бы, маловажная, деталь, — та самая соломинка, которая может склонить к использованию sudo
вместо su
, о чём пойдёт речь в следующем подразделе.
Разницe между su и su — нужно выделить жирно ) и в часности нужно привести примеры использования той и дрйгой команды особенно если будут запускаться gui приложения… Многие проблемы пользователей появляются после того как они заюзают su без черточки при запуске gui приложения…
2 komcumir
> Разницe между su и su — нужно выделить жирно…
—-
Согласен. Принято. Будет.