воскресенье, 3 января 2010 г.

Что мы знаем о команде su?

Очень часто новичков пугает получение привилегий суперпользователя или ставит в тупик способ их получения, хотя на самом деле все не так уж сложно. Кроме того, очень многие не знают в чем разница между su и sudo. Алексей Дмитриев, в своей статье пытается развеять таинственность. Это оригинал.

Из серии HuMan

Команда su (изменить пользователя - substitute user) позволяет изменить "владельца" текущего сеанса (сессии) без необходимости завершать сеанс и открывать новый.

Команду можно применять для замены текущего пользователя на любого другого, однако чаще всего она используется для получения рядовым пользователем прав суперпользователя (root). Последнее открывает доступ к любым командам и ко всем частям системы. По этой причине su часто расшифровывают (не совсем верно) как "супер юзер". Иногда ее также интерпретируют как switch user - "переключить" пользователя.

Возможности команды su

Самый простой и удобный способ изменить владельца текущей сессии на другого (в том числе суперпользователя) - применить команду su.

Применение команды su гораздо безопасней, чем вход в систему с правами root. Это одинаково относится и к администратору многопользовательской системы, так и к пользователю домашней однопользовательской ОС. Возможностей для случайного или злонамеренного повреждения гораздо меньше, если администратор входит в систему под аккаунтом рядового пользователя (имеющего по умолчанию очень ограниченные системные привилегии) и выполняет под этим аккаунтом задачи, не требующие прав суперпользователя. Для решения же задач, требующих таковых прав (скажем, исправление системных файлов или управление пользователями), администратор уже применяет команду su.

Особенно опасно работать как суперпользователь в Интернете. Вредоносные программы с удаленных компьютеров могут легко получить доступ к важным системным файлам или командам.

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

1. Посторонние (не доверенные) лица не должны видеть никаких паролей, вводимых после команды su.

2. Не оставлять без присмотра машины с открытым сеансом su.

3. По окончании работы в сеансе su немедленно закрывать его.

При работе с командой su в режиме настоящей консоли, исходная пользовательская сессия не может, естественно, использоваться на той же машине (так как сеанс su занимает весь экран монитора). Однако в режиме терминала, например окна терминала в графическом режиме, сеанс su распространяется только на команды, запущенные в этом окне, а все остальные окна, включая другие окна терминалов, продолжают действовать под первоначальным пользовательским аккаунтом.

Чтобы не набирать команду su много раз, с последующим вводом пароля, удобно открыть один раз окно терминала с сеансом su, и не закрывать его до конца работы, выполняя в нем все задачи, требующие администраторских прав. Правда, это возможно только в случае, когда никто посторонний не имеет физического доступа к данной машине.

Синтаксис

Команда su, введенная без опций и аргумента, запросит у вас пароль суперпользователя, и, если вы введете правильный пароль, то получите права root.
[ya@antony ~]$ su   (ENTER)
Password:
[root@antony ~]#

Символ $ в приглашении командной строки изменился на #, что напоминает о полученных привилегиях суперпользователя.

Того же эффекта можно было достичь при помощи команды

[ya@antony ~]$ su root

Но это лишняя работа, ведь по умолчанию, когда аргумент не введен, команда su считает, что это root.

Несмотря на получение прав root, вы остаетесь в своей пользовательской домашней директории, о чем говорит команда:

# pwd
/home/ya

То есть вы остались тем же пользователем ya, только наделенным правами суперпользователя. Поэтому не удивляйтесь, что некоторые директории и команды по-прежнему будут для вас закрыты (эти директории и команды определяются политикой безопасности вашего дистрибутива).

Дело в том, что вы сохранили не только свою домашнюю директорию, но и свои переменные окружения (environmental variables), которые вовсе не совпадают с таковыми суперпользователя (или других пользователей).

Важнейшей из переменных окружения является Путь - PATH. Когда вы печатаете в командной строке какую-либо команду, командная оболочка (шелл) начинает искать имя этой команды в директориях, перечисленных в ваших Путях, и ищет, пока не найдет (если не находит, то выводит сообщение: "команда не найдена").

Чтобы узнать свои Пути, следует применить команду:

[ya@antony ~]$ echo $PATH

/home/ya/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin:/usr/games:/usr/X11R6/bin

Через двоеточия перечислены директории, в которых шелл будет вести поиск команд.

Сравним Пути пользователя ya с Путями пользователя root:

[root@antony ~]# echo $PATH
/root/bin:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin

Как видите, совпадений не слишком много. Именно поэтому, даже получив права root, вы не получаете доступа к командам, исполняемые файлы которых находятся в директориях суперпользователя. (Правда, зная в какой директории находятся исполняемые файлы нужных команд, легко обойти этот запрет, прописав полный путь вручную).

Однако команда su дает возможность стать полноценным суперпользователем, не только получив его права, но и перейдя в его домашнюю директорию. Фактически вы, не прерывая сессии, перелогиниваетесь в root. Для этого необходимо после команды su оставить пробел, а затем ввести символ черты (-):

[ya@antony ~]$ su -
Password:
[root@antony ~]#

С виду ничего в приглашении не изменилось, однако применим pwd:

[root@antony ~]# pwd
/root

и убедимся, что под знаком тильды (~) на этот раз скрывается домашняя директория суперпользователя - /root.

Вместе с домашней директорией суперпользователя, вы получаете и его переменные окружения, в том числе и Пути.

Команда su и рядовые пользователи

Введя после su аргумент (логин другого пользователя), вы можете получить его права. Естественно, если знаете его пароль.

Например, вашей жене срочно понадобилось просмотреть свою почту, вы вводите:

[ya@antony ~]$ su - wife

Затем жена вводит свой пароль

Password:
[wife@antony ~]$

открывает от своего "имени" свой почтовый клиент, просматривает свои письма, и, поблагодарив, уходит на кухню. Вы же набираете:

[wife@antony ~]$ exit
Password:
[ya@antony ~]$

И не пришлось закрывать программы, перелогиниваться и прочее. Удобно. А вводить логин жены через черточку пришлось, чтобы попасть в ее домашнюю директорию, где находится ее почтовый клиент.

Опции команды su

У команды мало опций, самой употребительной из которых является -c.

Опция -c

Эта опция позволяет сразу под нужным аккаунтом запустить нужное приложение. Например, просмотреть директорию /boot:

[ya@antony ~]$ su -c 'ls /boot'
Password:

boot.0800 map
boot.0807 memtest-2.10.bin
boot.FD04 splash
config-2.6.25-std-def-alt8.M41.4 System.map-2.6.25-std-def-alt8.M41.4
initrd-2.6.25-std-def-alt8.M41.4.img vmlinuz
initrd.img vmlinuz-2.6.25-std-def-alt8.M41.4

Или запустить файловый менеджер с правами суперпользователя:

[ya@antony ~]$ su -c konqueror
Password:

Или в случае с почтой жены:

ya@antony ~]$ su -c thunderbird - wife

При использовании опции -c, как только команда, запущенная с ее помощью, будет закрыта, или закончит свое действие, командная оболочка снова вернется в первобытное состояние, то есть к вашему первоначальному логину.

К недостаткам опции -c можно отнести неработающее автозавершение при помощи клавиши TAB во время набора команд.

Опция -s, --shell (оболочка)

Позволяет для нужного пользователя запустить нужную командную оболочку.

Опция -l, --login

То же самое, что уже знакомая черта после пробела. Позволяет перейти в домашнюю директорию нужного пользователя.

Опция --help

Общеизвестна.

Выход из команды su

Выйти из su, то есть вернуться к первоначальному пользователю, можно множеством различных способов.

  • Можно просто закрыть окно терминала, и открыть новое.
  • Можно набрать в командной строке exit и нажать ENTER.
  • Можно нажать клавиши CTRL+d.
  • Можно дать команду su ya или su - ya, в зависимости от ситуации, для возвращения в логин ya.
  • Если команда su применялась в виде su -, то можно напечатать в командной строке слово logout и нажать ENTER.

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

Резюме

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

Красивые и надежные двери межкомнатные это не только разделение жизненного пространства в доме, но и важная часть интерьера.
А партнерские программы позволяют привлечь новых пользователей и зраработать на этом.

Комментариев нет: