Танцы с бубнами вокруг sudo в ubuntu. Раздаем и забираем sudo привелегии. visudo. Защищаемся от соседей. Права рута


#======================================
#
# 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. Так почему же не работает и как сделать, чтоб заработало?
Всё очень просто и хитро как и всё в бубунтах:

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

    $ groups
    *** adm dialout cdrom floppy audio dip video plugdev fuse lpadmin admin winbindd_priv
    
  2. $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» на вашей машине сможет
любой ваш гость, любой сотрудник вашей компании, и т.д.
Так что, я вас предупреждал.