Показаны сообщения с ярлыком sudo. Показать все сообщения
Показаны сообщения с ярлыком sudo. Показать все сообщения

воскресенье, 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 наиболее удобный способ выполнить задачу, требующую прав суперпользователя (или любого другого пользователя), без потери времени на открытие нового сеанса.

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

понедельник, 10 ноября 2008 г.

su vs sudo

su vs sudo | Bappoy's blog

Written on 10.11.2008

С давних времен многих смущает разнообразие вариантов обеспечения безопасности при выполнении операций с максимальными привилегиями. Например, в официальной документации ubuntu в качестве команды редактирования рекомендуется использовать что-то вроде sudo nano, а в многочисленных любительских мануалах (в стиле "5 фокусов в командной строке, которые удивят вашу бабушку") для получения root'ового шелла предлагается писать "sudo su -". Попробую объяснить, почему такое положение вещей кажется мне неправильным.

Исторически единственным универсальным способом выполнить команду от имени другого пользователя в Unix была программа su. Запущенная без параметров, она запрашивала пароль суперпользователя и в случае успеха просто подменяла текущее имя пользователя на root, оставляя почти все переменные окружения от старого пользователя (кроме PATH, USER и еще пары-тройки, см. man su от своего дистрибутива). Более правильно было запускать ее как su - — в таком случае оболочка получала также и правильный environment. С параметром -c можно было выполнить команду: su -c "vim /etc/fstab".

При этом пользователям приходилось помнить пароль root'а и у всех пользователей, перечисленных в группе "0″ (т.е. в группе, члены которой могли выполнить команды su и стать суперпользователем), был одинаковый неограниченный доступ ко всей системе, что являлось серьёзной проблемой безопасности.

Затем появилась команда sudo, и это был прорыв. Теперь администратор мог указывать список разрешенных команд для каждого пользователя (или группы пользователей), файлы, доступные для редактирования, специальные переменные окружения и многое другое (все это великолепие управляется из /etc/sudoers, см. man sudoers от своего дистрибутива). При запуске sudo спрашивает у пользователя его собственный пароль, а не пароль root. Полноценный шелл можно получить с помощью "sudo -i"

Стоит особо упомянуть о специальной команде sudoedit, безопасно запускающей редактор, указанный в переменной окружения $EDITOR. При более традиционной схеме редактирование файлов производилось примерно так:

sudo vim /etc/fstab

Запускаемый таким образом vim наследовал оболочку с неограниченными правами и через :! пользователь мог запускать любую команду (если, конечно, админ не позаботился об этом заранее) и открыть любой файл.

sudoedit проверяет, можно ли этому пользователю изменять данный файл, затем копирует указанный файл во временный каталог, открывает его в редакторе, после редактирования, если файл был изменён, с особыми предосторожностями копирует его обратно.

В Debian-based дистрибутивах пользователь root не имеет пароля, вместо этого все административные действия должны производиться через sudo или его графический аналог gksudo. Являясь полной заменой su, sudo должна бы быть единственной командой переключения между пользователями, однако, как было сказано вначале, в настоящий момент это не так и все зачем-то изобретают дикие последовательности из sudo, su, vi и черточек.

Поэтому предлагаю всем раз и навсегда запомнить:

выполнить команду от имени root: sudo command
редактирование файлов от имени root: sudoedit file
оболочка root: sudo -i