MyTetra Share
Делитесь знаниями!
Как правильно менять пользователя в Linux. Использование команды su
Время создания: 27.06.2016 20:43
Раздел: Компьютер - Linux - Bash - Команды и скрипты
Запись: xintrea/mytetra_syncro/master/base/1464525643r00c3bb4lv/text.html на raw.github.com

Работать в Линуксе под суперпользователем (рутом) категорически не рекомендуется, но при обычной работе все же иногда необходимо выполнять административные задачи. Для этого существует 3 способа:

1. В одной из виртуальных консолей или Х-терминалов (xterm, konsole и т.д) залогиниться рутом, а после выполнения нужных команд выйти.

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

3. Используя команду sudo, просто выполнить нужную команду.

У этих способов есть свои плюсы и минусы.

Для 1-го способа нужна свободная виртуальная консоль либо еще один Х-терминал, тогда как 2-й и 3-й способы временно используют имеющуюся.

1-й и 2-й способы запускают новую командную оболочку, что позволяет выполнить несколько команд, но для выполнения всего одной команды (напрмер, редактирования файла конфигурации или выполнение make install) гораздо удобнее 3-й способ, когда команда вводится сразу, а после ее выполнения не надо делать выход из оболочки.

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


Теперь подробнее.

Команда su запускает в текущей консоли командную оболочку c правами другого пользователя, по умолчанию - рута. При этом необходимо ввести пароль этого пользователя. Запуск su должен обязательно производиться с дефисом в качестве параметра:

$ su -

При этом обновляются переменные окружения $HOME и $PATH, т.е. домашним каталогом становится /root, а в $PATH добавляются /sbin и /usr/sbin. При запуске su без дефиса $HOME остается равным домашнему каталогу пользователя, который запускал эту команду, и в результате работы программ, запущенных из-под su, туда могут быть записаны файлы (например, конфигурации этих программ) с правами рута, что может привести к ошибкам и странностям в дальнейшей работе.

Чтобы вернуться в оболочку обычного пользователя, нужно дать команду exit, logout или нажать Ctrl-D.

Команда sudo позволяет запустить одиночную команду с правами другого пользователя (по умолчанию - рута), при этом вводится пароль (если не включен беспарольный запуск) пользователя, который запускает sudo (а не того, от чьего имени запускается команда, в отличие от su). По умолчанию никто не имеет права запускать что-либо. Поэтому для начала пользования sudo необходимо ее настроить. Настройки хранятся в файле /etc/sudoers. Настоятельно рекомендуется редактировать этот файл командой visudo (эта команда проверяет синтаксис файла перед его сохранением). О гибких настройках sudo можно почитать в man sudoers, но мы рассмотрим несколько наиболее простых и интересных примеров.

ALL ALL = (ALL) ALL

Самый простой способ настройки sudo, но не самый удачный с т.зр. безопасности. Мы разрешаем всем пользователям запуск любой команды от любого имени. Рассмотрим, как можно ограничить эту свободу.

1-е поле в строке - это список пользователей и/или групп, к которым применяется данная строка. Может быть ALL (все), имя_пользователя, %имя_группы или #числовой_идентификатор_пользователя.

%wheel ALL = (ALL) ALL

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

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

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

4-е поле - команда, которую позволено выполнять. Здесь, как и в остальных полях, можно указывать список команд через запятую.

Любой пользователь может командой sudo -l узнать, какие команды ему разрешено выполнять.

При запуске sudo запрашивается пароль (пользователя, запустившего команду). В течение 5 минут (этот интервал можно изменить) после последнего запуска sudo его можно запускать еще раз уже без пароля. Можно в /etc/sudoers в нужных строках поставить после знака = тэг NOPASSWD:, тогда команды, указанные в этой строке, могут выполняться без пароля.

ALL ALL = NOPASSWD: (ALL) /sbin/shutdown, /sbin/reboot

Позволяет выключать и перезагружать компьютер любому пользователю без указания пароля, командами sudo /sbin/shutdown и sudo /sbin/reboot соответственно (другие способы выполнения этого будут рассмотрены в следующей статье).

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

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


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования