|
|
Содержание подраздела:
#======================================
#
# Edit by Ben-Ja http://www.net4me.net
# On Wed 18 Nov 2009 04:02:14 PM MSK
#
#======================================
Танцы с бубнами вокруг sudo.
Для того, чтобы предоставить пользователю в системе сделать что-либо от имени рута или другого пользователя, в unix-like OS есть система sudo.
В этой статье речь пойдет о самой команде sudo, файле конфигурации /etc/sudoers и редакторе этого файла visudo.
Не стану тут описывать ключи работы и т.п. Ключи можно посмотреть в man sudo. Уж чего-чего, а документации по sudo хватает:
$apropos sudo
gksu (1) - GTK+ frontend for su and sudo
gksudo (1) - GTK+ frontend for su and sudo
kdesu (1) - a sudo frontend for KDE
kdesud (1) - a sudo frontend for KDE
kdesudo (1) - a sudo frontend for KDE
sudo (8) - execute a command as another user
sudo_root (8) - How to run administrative commands
sudoedit (8) - execute a command as another user
sudoers (5) - list of which users may execute what
visudo (8) - edit the sudoers file
Итак, начнем с редактора.
visudo в любимом редакторе
Для того, чтобы редактировать конфиги sudo, существует специальная команда visudo.
Но по умолчанию, она открывает файл в редакторе vi (точнее в редакторе vim, но с установкой старинных и страшных настроек).
Для того, чтобы использовать для редактирования свой любимый редактор, достаточно изменить переменную окружения $EDITOR.
$ echo $EDITOR
vi
Изменим на то, в чём мы привыкли редактировать файлы:
export EDITOR="mcedit"
хотя, лично мне удобнее все-таки vim =)
Теперь команда visudo откроет файл /etc/sudoers на редактирование именно в нашем любимом редакторе.
Напомню, что редактировать этот файл имеет право только root. Поэтому для ubuntu, kubuntu и xubuntu надо выполнить sudo visudo.
Дать права рута себе любимому в ubuntu.
Итак, редактор выставили. Кто мы в системе посмотрели через whoami (если не помним).
Теперь хотим властвовать без ограничений.
$sudo visudo
Формат записей такой:
КТО ПСЕВДОНИМ_ХОСТА=ЧТО_МОЖНО
Открыли файл. И написали:
user ALL=(ALL) NOPASSWD: ALL
Естественно, слово "user" меняем на имя нашего пользователя в системе. Сохранили.
Теперь для выполсения любой команды от имени рута нам достаточно написать sudo команда и...
Опа! Просит наш пароль... =((( Чё за на?! Мы же сказали NOPASSWD какие пароли?!
А вот она особенность *ubuntu. Дело в том, что ОС типа домашняя и постоянный рут тебе тут типа не нужен.
Читаем дальше. Я всё объясню и мы все-таки получим права root без пароля.
Изменить время действия прав sudo
Как видим, получить рута в ubuntu (kubuntu, xubuntu) не так уж и просто...
Зато для знакомых линуксоидов, пришедших к вам в гости или сидящих рядом на работе, получить рута на вашей машине не составит труда.
Дело в том, что после того, как вы выполнили команду "sudo что-то" и ввели свой пароль,
получить привелегии может любой кто подойдет в течении 5 минут (вообще, по дефолту должно сохраняться 15 минут) к вашему компьютеру.
И дело в том, что ваша авторизация хранится какое-то время, в течение которого можно выполнять любые команды через sudo.
Проверяем:
$sudo mc
спрашивают пароль.
выходим. и еще раз вводим:
$sudo mc
и... никакого пароля не спрашивают.
То есть. Вы выполнили "sudo что-то", вас позвали. Вы закрыли терминал и отошли.
К компу подошел другой человек. Открыл терминал и ввел "sudo su". Всё. Он рут. =)
Хорошо если это друг в гостях и он всего лишь сменил пароль вашему пользователю ради шутки.
Или в вашем .bashrc прописал алиасы на все команды alias ls="echo здарова, гуру линукса!;"
А если это недоброжелатель по работе?
А если он создал себе пользователя, дал ему права рута и будет заходить к вам на машину по ssh чтоб качать торенты за ваш счет? =)
Избавляемся от времени хранения пароля:
$sudo visudo
Находим строчку
Defaults env_reset
Комментируем её, а под ней пишем "Defaults timestamp_timeout=0"
т.к. после timestamp_timeout надо указать количество минут, в течение которых пароль sudo требоваться не будет.
В итоге получили:
#Defaults env_reset
Defaults timestamp_timeout=0
Всё. Теперь sudo будет лочится сразу, а пароль будет требоваться всегда.
Как заставить работать NOPASSWD в *ubuntu sudo
Специально передвинул ответ ниже расказа о гостях-линуксоидах.
Ладно. Нет у нас гостей. Хотим мы рута без ввода пароля. Любой ценой хотим.
Написали же в sudoers: NOPASSWD. Так почему же не работает и как сделать, чтоб заработало?
Всё очень просто и хитро как и всё в бубунтах:
- пользователь должен быть в группе sudo и выше.
* Примечание: если это тот пользователь что заводился первым, то это уже так.
$ groups
*** adm dialout cdrom floppy audio dip video plugdev fuse lpadmin admin winbindd_priv
- $sudo visudo
user ALL=(ALL) NOPASSWD: ALL
НО!!!
Эта запись должна быть ОБЯЗАТЕЛЬНО ниже строчки про %admin!!!
Естественно, везде "user" заменяем на имя своего пользователя.
В итоге, должно выглядеть где-то так:
# User privilege specification
root ALL=(ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
user ALL=(ALL) NOPASSWD: ALL
Вот такие вот непонятные и хитрые правила для sudo в *ubuntu.
Только учтите, что теперь выполнить "sudo su" на вашей машине сможет
любой ваш гость, любой сотрудник вашей компании, и т.д.
Так что, я вас предупреждал.
Как обычно, если у вас есть что сказать на эту тему,
то велкам в обсуждение этой статьи в нашем блоге.
|