- Главная... arrow - Статьи... arrow | - SoftWare arrow Sudo в Ubuntu и не только

#Записки о Unix/Linux/BSD/Solaris

Sudo в Ubuntu и не только
Автор Охальников Олег   
11:08:2009 г.
По поводу использования Sudo в Ubuntu и отсутствие как такового рута - сказано много. Я лишь выскажу своё мнение. Sudo отличная утилита с помощью которой можно например дать права рута отдельному пользователю и только к примеру на выполнение одной единственной команды. Но в случае с UBUNTU не все так гладко, объясню чуть ниже. Что нужно было сделать, нужно создать пользователя на всех серверах UNIX (Ubuntu, Debian Lenny, FreeBSD) и дать ему права только на выполнение команды shutdown, вот сводка примеров того, что может sudo (файл настроек /etc/sudoerc):


ПРИМЕРЫ

Ниже приведены примеры записей sudoers. Возможно, некоторые из них являются выдуманными. Сначала мы определяем свои псевдонимы:


 # Определение псевдонимов пользователя
 User_Alias     FULLTIMERS = millert, mikef, dowdy
 User_Alias     PARTTIMERS = bostley, jwfox, crawl
 User_Alias     WEBMASTERS = will, wendy, wim


 # Определение псевдонимов Runas (Выполнить как)
 Runas_Alias    OP = root, operator
 Runas_Alias    DB = oracle, sybase


 # Определение псевдонимов машин
 Host_Alias     SPARC = bigtime, eclipse, moet, anchor :\
                SGI = grolsch, dandelion, black :\
                ALPHA = widget, thalamus, foobar :\
                HPPA = boa, nag, python
 Host_Alias     CUNETS = 128.138.0.0/255.255.0.0
 Host_Alias     CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
 Host_Alias     SERVERS = master, mail, www, ns
 Host_Alias     CDROM = orion, perseus, hercules


 # Определение псевдонимов Cmnd (команд)
 Cmnd_Alias     DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\
                        /usr/sbin/restore, /usr/sbin/rrestore
 Cmnd_Alias     KILL = /usr/bin/kill
 Cmnd_Alias     PRINTING = /usr/sbin/lpc, /usr/bin/lprm
 Cmnd_Alias     SHUTDOWN = /usr/sbin/shutdown
 Cmnd_Alias     HALT = /usr/sbin/halt, /usr/sbin/fasthalt
 Cmnd_Alias     REBOOT = /usr/sbin/reboot, /usr/sbin/fastboot
 Cmnd_Alias     SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
                         /usr/local/bin/tcsh, /usr/bin/rsh, \
                         /usr/local/bin/zsh
 Cmnd_Alias     SU = /usr/bin/su

Здесь мы переопределим некоторые встроенные значения по умолчанию. Мы хотим, чтобы sudo регистрировал события при помощи syslog(3), во всех случаях используя метод auth. Мы не хотим, что бы sudo читало лекции всем пользователям, и пользователь millert не должен указывать пароль. В добавок, на машинах в SERVERS Host_Alias мы держим дополнительный локальный файл журнала и удостоверимся, что мы регистрируем год в каждой строке файла журнала, так как записи журнала будут сохраняться в течение нескольких лет.


 # Переопределяем встроенные значения по умолчанию
 Defaults               syslog=auth
 Defaults:FULLTIMERS    !lecture
 Defaults:millert       !authenticate
 Defaults@SERVERS       log_year, logfile=/var/log/sudo.log

Определение пользователя является частью, которая фактически определяет кто что может выполнять.


 root           ALL = (ALL) ALL
 %wheel         ALL = (ALL) ALL

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


 FULLTIMERS     ALL = NOPASSWD: ALL

Системные администраторы занятые полный рабочий день (millert, mikef и dowdy) могут выполнить любую команду на любой машине без аутентификации.


 PARTTIMERS     ALL = ALL

Системные администраторы занятые не полный рабочий день (bostley, jwfox и crawl) могут выполнить любую команду на любом компьютере, но сначала должны себя аутентифицировать (так как в записи отсутствует тэг NOPASSWD).


 jack           CSNETS = ALL

Пользователь jack может выполнить любую команду на машинах с псевдонимом CSNETS (сети 128.138.243.0, 128.138.204.0 и 128.138.242.0). Из этих сетей только <128.138.204.0> имеет явную сетевую маску (в соответствии с CIDR) означающую сеть класса C. Для остальных сетей в CSNETS в случае соответствия будет использоваться сетевая маска машины.


 lisa           CUNETS = ALL

Пользователь lisa может выполнять любую команду на любой машине с псевдонимом CUNETS (сеть класса B 128.138.0.0).


 operator       ALL = DUMPS, KILL, PRINTING, SHUTDOWN, HALT, REBOOT,\
                /usr/oper/bin/

Пользователь operator может выполнять команды ограничивающиеся простым обслуживанием. В данном случае таковыми являются резервное копирование, уничтожение процессов, система печати, выключение системы и любая команда в каталоге /usr/oper/bin/.


 joe            ALL = /usr/bin/su operator

Пользователь joe может выполнять только su(1) оператору.


 pete           HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root

Пользователю pete разрешено изменять любой пароль, за исключением пароля супер-пользователя (root) на машинах HPPA. Учтите, что passwd(1) не воспринимает несколько имен пользователей подряд в одной командной строке.


 bob            SPARC = (OP) ALL : SGI = (OP) ALL

Пользователь bob может выполнять любые команды на машинах SPARC и SGI, как пользователь описанный в Runas_Alias в OP (root и operator).


 jim            +biglab = ALL

Пользователь jim может выполнить любую команду на машинах в сетевой группе biglab. Sudo знает, что biglab является сетевой группой из-за префикса +.


 +secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser

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


 fred           ALL = (DB) NOPASSWD: ALL

Пользователь fred может выполнять команды от имени любого пользователя в Runas_Alias DB (oracle или sybase), без указания пароля.


 john           ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*

На машинах ALPHA пользователь john может выполнить su любому пользователю, за исключением супер-пользователя (root), но не имеет права задавать su(1) какие-либо флаги.


 jen            ALL, !SERVERS = ALL

Пользователь jen может выполнить любую команду на любой машине, за исключением машин в Host_Alias SERVERS (master, mail, www и ns).


 jill           SERVERS = /usr/bin/, !SU, !SHELLS

Для любой машины в Host_Alias SERVERS jill может выполнить любую команду в каталоге /usr/bin/, за исключением команд относящихся к Cmnd_Aliases SU и SHELLS.


 steve          CSNETS = (operator) /usr/local/op_commands/

Пользователь steve может выполнить любую команду в каталоге /usr/local/op_commands/, но только как пользователь operator.


 matt           valkyrie = KILL

На своей персональной рабочей станции, valkyrie, matt необходима возможность уничтожать зависшие процессы.


 WEBMASTERS     www = (www) ALL, (root) /usr/bin/su www

На машинах www, любой пользователь в User_Alias WEBMASTERS (will, wendy и wim), может выполнить любую команду как пользователь www (который является владельцем web-страниц) или просто su(1) к www.


 ALL            CDROM = NOPASSWD: /sbin/umount /CDROM,\
                /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM

Любой пользователь может монтировать или размонтировать CD-ROM на машинах в Host_Alias CDROM (orion, perseus, hercules) без ввода пароля. Ввод этого несколько утомителен для пользователей, поэтому это первейший кандидат для включения в сценарий оболочки.  


Взято из мануала к sudoerc  на opennet.

Согласно выше написанному, мне подходит срока:

operator       ALL = DUMPS, KILL, PRINTING, SHUTDOWN, HALT, REBOOT,/usr/oper/bin/


Меняю ее под свои нужды:

user       ALL = SHUTDOWN


(Не забудте создать пользователя user в системе!)
ВАЖНО! настройки начал с Debian Lenny, как  известно встроенный root имеется. Так вот, захожу под этим пользователем и ввожу 

sudo shutdown -r now


на что система говорит, данную команду может выполнить только root. Так вот!!!! в DEBIAN формат строки в sudoerc немного отличается и надо было прописать

user       ALL = /sbin/shutdown


ИМЕННО ТАК! после этого пользователь user  в Debian Lenny смог выполнить команду

user       ALL = /sbin/shutdown


Остальные команды и операции в системе от имени рута ему запрещены, что и требовалось настроить.

Следующий этап, это настройка системы UBUNTU, все тоже самое. Создаю пользователя user и так как есть уже рабочая строка в sudoerc на Debian ее и добавляю в sudoerc

user       ALL = /sbin/shutdown


Сохраняю файл и выхожу и вот тут самое интересное, при попытке выполнить sudo любая команда от системного пользователя или от пользователя user я получаю ошибку в строке 23 (это добавленная строка).  Что это значит, это значит, что раз в системе нет как такового рута я не смогу поправить файл sudoerc! не смогу выполнить ни одной команды требующей прав рута, даже выключить  или перезагрузить корректно сервер не смогу. Ситуация в которой приходится править файл sudoerc, если это не домашний ПК, достаточно частая и достаточно часто получается такая незадача. Возможно кто то подумает что я драматизирую и что достаточно подойти к серверу, ребутнуть его, загрузится с лайв СД и делов то. Но что если сервер за 350 км? и все настройки выполняются удаленно через консоль SSH?
Меня спасло то, что root в системе был создан очень давно, пароль к сожалению не помнил, но смог сменить его через Webmin, который так же присутствовал на системе, иначе было бы худо.
После смены пароля зашел в систему уже рутом, через su и пароль рута, далее поправил файл sudoerc, в UBUNTU синтаксис строки не такой как в Debian и надо писать:

Cmnd_Alias     SHUTDOWN = /sbin/shutdown


user       ALL = SHUTDOWN



ИТОГ: Создавайте в системе полноценного ROOT, даже если вы им не пользуетесь, это спасет в непредвиденных ситуациях с ошибками в файле sudoerc или его порчей. Как это сделать, можно прочитать здесь...

P.S. ... производите правки sudoerc с помощью специальной утилитой visudo, защита sudo и проверка синтаксиса обеспечены, возможно это сохранит вам немного нервов и позволит избежать вышеописанного.

Удачи!
H@wk!
/Охальников Олег/

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code


Просмотров: 6897

  Ваш коментарий будет первым
RSS комментарии
 
« VmWare-Server управление машинами из консоли с помощью vmrun   OTRS - Open Ticket Request System, установка и настройка на Debian 5 Lenny »

#COMMENT

Блокируем Ylmf-pc на Exim, Bru...
Благодарю за кучу уцелевших нервов:) постоянно приходилось б...
30/05/17 00:02 More...
By Mus

Установка даты и времени в кон...
Спасибо
12/05/17 17:49 More...
By dushka

Раскладка в rdesktop
Огромное спасибо!
28/04/17 14:01 More...
By Виктор

Аутентификация средствами Apac...
подскажите как писать пороль цифры ?пж! :sigh
28/03/17 13:06 More...
By Лиза

Logwatch - мониторинг журналов...
Отлично, очень не хватало. Автору большое спасибо, пиши еще.
25/01/17 02:44 More...
By Gregg

Сейчас на сайте находятся:
1 гость