Установка і настройка sudo в debian 7 - debian help

Home # 149; статті # 149; Установка і настройка sudo в Debian 7

список розділів

Sudo - це програма, що дозволяє адміністраторам давати обмежені root права користувачам і вести журнал root активності. Базова філософія полягає в тому, щоб дати так мало прав, як це можливо, але при цьому дозволити людям нормально виконувати свої завдання. Відмінність від команди su в тому, що користувач вводить пароль від свого облікового запису, а не пароль користувача root.

Sudo в Debian має п'ятнадцятихвилинний (може бути перевизначений) таймаут після введення пароля. Це означає, що коли ви перший раз ввели пароль рута, то у вас є 15 хвилин протягом яких ви можете виконати наступну команду без введення пароля. Таймаут може бути негайно скинутий за допомогою команди sudo -k.

Установка sudo в Debian 7

Під час установки створюється конфігураційний файл / etc / sudoers і директорія /etc/sudoers.d. про які ми поговоримо трохи пізніше.

Параметри команди sudo

Тут вказана велика частина доступних параметрів, але не всі. Щоб подивитися повний список використовуйте команду man sudo.

Налаштування sudo в Debian 7

Рекомендується всі призначені для користувача настройки задавати в файлах в директорії /etc/sudoers.d. а не в основному файлі / etc / sudoers. Тобто можна створити файл з будь-якою назвою в директорії /etc/sudoers.d і вже в ньому перерахувати необхідні настройки.

Синхронізація файлу sudoers

Взагалі кажучи, утиліта sudo є локальною, в ній немає вбудованих механізмів для поширення єдиних налаштувань на безліч серверів з одного центру. Для синхронізації можна використовувати, наприклад, NFS. rsync або LDAP.

Приклад вмісту файлу sudoers

Коли Новомосковскешь керівництво по налаштуванню sudo в Debian, то досить складно щось зрозуміти, але на прикладі все стає на свої місця. Так що для початку розглянемо приклад з man 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
Runas_Alias ​​ADMINGRP = adm, oper

# Аліаси для наборів хостів
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_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
Cmnd_Alias ​​REBOOT = / usr / sbin / reboot
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
Cmnd_Alias ​​PAGERS = / usr / bin / more, / usr / bin / pg, / usr / bin / less

Далі ми перевизначити деякі значення встановлені за замовчуванням при компіляції. Ми хочемо щоб sudo вів лог через syslog з використанням auth в усіх випадках. Ми мені хочемо, щоб співробітники працюють повний день отримували попередження від sudo, користувач millert не повинен вводити пароль і ми не хочемо скидати змінні оточення LOGNAME, USER or USERNAME коли виконуємо команди від рута. Додатково на машинах в Host_Alias ​​SERVERS ми зберігаємо додатковий локальний лог-файл і переконуємося, що буде Залогуватися рік в кожній лінії так як логи будуть зберігатися кілька років. Наостанок, в цілях безпеки для команд в списку PAGERS ми відключаємо можливість запускати інші команди.

# Переобумовленої вбудовані умовчання
Defaults syslog = auth
Defaults> root! Set_logname
Defaults: FULLTIMERS! Lecture
Defaults: millert! Authenticate
[Email protected] log_year, logfile = / var / log / sudo.log
Defaults! PAGERS noexec

Далі йде частина в якій визначається хто що може запускати.

root ALL = (ALL) ALL
% Wheel ALL = (ALL) ALL

Ми дозволяємо руту і всім користувачам в групі wheel запускати будь-які команди на будь-якому хості від імені будь-якого користувача.

FULLTIMERS ALL = NOPASSWD: ALL

Співробітники працюють повний день (millert, mikef і dowdy) можуть запускати будь-які команди на будь-якому хості без введення пароля.

PARTTIMERS ALL = ALL

Співробітники працюють частину дня (bostley, jwfox і crawl) можуть виконувати будь-які команди на будь-яких хостах, але повинні спочатку пройти процедуру аутентифікації.

jack CSNETS = ALL

Користувач jack може виконувати будь-які команди на машинах зі списку CSNETS.

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

Оператор може виконувати команди обмежені простий підтримкою системи. Ці команди пов'язані зі створенням резервних копій, вбивством процесів, системою друку, відключенням системи і командами в директорії / usr / oper / bin /.

joe ALL = / usr / bin / su operator

Користувач joe може використовувати su тільки щоб стати користувачем operator.

pete HPPA = / usr / bin / passwd [A-Za-z] *. / Usr / bin / passwd root

% Opers ALL = (: ADMINGRP) / usr / sbin /

Користувачі в групі opers могуть запускати команди з / usr / sbin / від імені себе в поєднанні з будь-якою групою з Runas_Alias ​​ADMINGRP (групи adm і oper).

Користувач pete може змінювати пароль будь-якого користувача за винятком root на будь-якій машині зі списку HPPA. В даному випадку не вийде вказати кілька імен користувачів в командному рядку.

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

Користувач bob може виконувати будь-які команди на машинах з груп SPARC і SGI від імені користувачів в Runas_Alias ​​OP (root і operator).

jim + biglab = ALL

Користувач jim може запускати будь-які команди в мережевий групі biglab. Sudo розуміє, що biglab - це мережева група завдяки префіксу "+".

fred ALL = (DB) NOPASSWD: ALL

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

На машинах в списку ALPHA користувач john може використовувати su щоб стати будь-який користувач крім рута. При цьому він не може використовувати будь-які параметри команди su.

jen ALL. SERVERS = ALL

Користувач jen може запускати будь-які команди на будь-якій машині крім що входять до списку SERVERS.

jill SERVERS = / usr / bin /. SU. SHELLS

На будь-яких машинах зі списку SERVERS, jill може запускати будь-які команди за винятком містяться в списках SU і SHELLS.

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

Користувач steve може запускати будь-які команди в директорії / usr / local / op_commands / на машинах в мережі CSNETS але тільки в якості користувача operator.

matt valkyrie = KILL

На його персональної робочої станції користувачеві matt потрібна можливість вбивати процеси.

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

На хості www будь-який користувач в списку WEBMASTERS (will, wendy і wim) можуть запускати будь-які команди від користувача www (який володіє файлами сайтів) або просто ставати користувачем www за допомогою команди su.

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

Будь-який користувач може монтувати або отмонтировать CDROM на машинах в списку CDROM без введення пароля.

Далі детально розберемо різні елементи файлу / etc / sudoers.

Формат файлу sudoers

Файл sudoers містить два типи записів: аліаси (звичайні змінні) і специфікації користувачів (вказують хто, що і де може запускати).

Коли є кілька специфікацій для одного користувача, вони застосовуються по порядку, тобто використовується остання.

В результаті форма специфікації має наступний вигляд:

хто де = (від імені кого) що

У більш повній формі:

хто де = (від імені кого) що, (від імені кого) що. де = (від імені кого) що, (від імені кого) що

Також можна вказати від якої групи можна запускати команду:

хто де = (від імені кого. від якої групи) що

Або навіть більш складний варіант:

хто де = (від імені кого, від імені кого. від якої групи, від якої групи) що, що

В дужках вказано від якого користувача або групи можна запускати команди. Користувачі і групи один від одного відокремлюються комами. Користувачі від груп відокремлюються двокрапкою.

Якщо ви хочете для одного користувача задати різні настройки на різних хостах, то для поділу також використовуються двокрапки.

user1 host1 = (op. opgr) / bin / ls

це правило говорить про те, що користувач user1 може виконати команду / bin / ls наступним чином:

Форма запису алиасов

Тіп_аліаса Ім'я = пункт 1, пункт 2. Ім'я = пункт 3, пункт 4

Ім'я аліаса може складатися з латинських букв обох регістрів, цифр та символу нижнього підкреслення. Ім'я обов'язково повинно починатися з літери у верхньому регістрі.

типи алиасов

User_Alias

Може містити одне або більше імен користувачів, id користувачів (з префіксом #), імен груп користувачів і їх id (з префіксами% і% #, відповідно), мережеві групи (з префіксом +), що не-юнікосовие імена груп і ID (з префіксами%: і%: #, відповідно), а також аліаси користувачів (User_Aliases). Кожен пункт може передувати символом знаку оклику ( "!").

Пункти можуть бути укладені в подвійні лапки щоб уникнути використання екранування спеціальних символів. При використанні подвійних лапок префікси повинні бути включені в текст між лапками.

Runas_Alias

Даний алиас може містити ті ж пункти, що і User_Alias. Зверніть увагу, що імена і групи порівнюються як ланцюжки. Іншими словами, два користувача (групи) з різними іменами, але з однаковими uid (gid) вважаються різними. Якщо ви хочете вказати всі імена користувачів з однаковим uid (наприклад, root і toor), ви можете використовувати uid (# 0 в нашому прикладі).

Host_Alias

Cmnd_Alias

У список можуть входити одна або більше команд, директорій або інших алиасов. Команда - це повністю певне ім'я файлу (тобто містить шлях до файлу), яке може містити групові символи. Просте ім'я файлу дозволяє користувачеві запускати команду з будь-якими аргументами. Однак ви можете також вказати аргументи командного рядка (включаючи групові символи). З іншого боку, можна вказати "" щоб запобігти використанню будь-яких аргументів з даною командою. Директорія - це повністю певний шлях закінчується символом '/'. Коли в Cmnd_Alias ​​вказана директорія, користувач може запускати будь-які файли всередині цієї папки (але не в її піддиректоріях).

перевизначення замовчувань

Деякі опції можуть бути змінені під час запуску за допомогою однієї або більше записів Defaults, які можуть впливати на всіх користувачів на будь-якому хості, на всіх користувачів на певному хості, на певного користувача, певну команду або на команди запускаються від певного користувача. Варто пам'ятати, що записи для окремих команд не можуть включати аргументи. Якщо потрібно задати аргументи, то задайте Cmnd_Alias ​​і використовуйте його.

При записи Defaults для різних алиасов використовуються різні символи вказують на тип аліаса:

'Defaults' '@' Host_List
'Defaults' ':' User_List
'Defaults »'! ' Cmnd_List
'Defaults' '>' Runas_List

Параметрами можуть бути прапори, цілочисельні значення, рядки і списки. Прапори є булеві і можуть бути відключені за допомогою оператора "!". Значення можуть бути укладені в подвійні лапки якщо вони містять кілька слів. Спеціальні символи можуть бути екрановані за допомогою зворотного косою риси (\).

Списки мають два оператора присвоювання + = і - =. Ці оператори використовуються для додавання і видалення зі списку, відповідно.

Записи 'Defaults' обробляються в наступному порядку: спочатку основні, для хостів і користувачів, потім runas і, нарешті, для команд.

Ключові слова

З командою може використовуватися нуль або більше ключових слів. Існує вісім ключових слів: NOPASSWD, PASSWD, NOEXEC, EXEC, SETENV, NOSETENV, LOG_INPUT, NOLOG_INPUT, LOG_OUTPUT and NOLOG_OUTPUT.

NOPASSWD і PASSWD

user1 host1 = NOPASSWD: / bin / ls, / bin / ln, PASSWD: / bin / kill

NOEXEC і EXEC

NOEXEC може використовуватися для того, щоб запобігти запуск динамічно слінкованих виконуваних файлів за допомогою доступних для виконання команд. приклад:

user1 host1 = NOEXEC: / usr / bin / more

символи узагальнення

sudo дозволяє використовувати символи узагальнення (а також, мета або глобальні символи) в іменах хостів, шляхах і аргументах командного рядка в файлі sudoers. Варто пам'ятати, що це не регулярні вирази.

* - замінює нуль або більше будь-яких символів.
? - замінює будь-який один символ.
[. ] - замінює будь-який символ в заданому діапазоні.
[. ] - замінює будь-який символ НЕ входить в заданих діапазон.
\ - символ екранування щоб в іменах можна було використовувати спеціальні символи.

Також можна використовувати класи символів. Однак, так як двоеточніе ( ":") є спеціальним символом, то його доводиться екранувати:

це означатиме будь-який файл починається з букви.

Крім того, пряма коса риска не замінюється підстановочних знаками. Наприклад:

відповідає / usr / bin / who, але не відповідає / usr / bin / X11 / xterm.

Щоб заборонити використання аргументів командного рядка, можна використовувати подвійні лапки - "".

Включення вмісту інших файлів в sudoers

Включення ( "інклуд" від include) вмісту інших файлів можливий за допомогою директив #include і #includedir.

Це може використовуватися в ситуації, коли у вас є директиви для sudo загальні для всіх серверів і особливі на кожному сервері. В такому випадку можна створити два файли, наприклад, sudoers і sudoers.local. Потім другий інклуд в перший за допомогою директиви (разом із позначкою решітки):

Також можна створити файли з різними частинами після точки, що відповідають іменам серверів і інклуд їх наступним чином:

де замість% h підставляється ім'я хоста.

Що стосується директиви #includedir. то можна створити окрему директорію, в яку можна складати файли і вони будуть автоматично включатися в файл sudoers. Наприклад, в Debian після установки sudo створюється директорія /etc/sudoers.d/. а в файлі / etc / sudoers додана директива:

Варто врахувати, що файли обробляються і сортуються лексично, а не за номерами. Тобто, наприклад, файл /etc/sudoers.d/01_first буде оброблений перед /etc/sudoers.d/10_second, але файл з ім'ям /etc/sudoers.d/1_whoops буде оброблений після /etc/sudoers.d/10_second , так як спочатку назви відсутня нуль.

Додаткові спеціальні символи

ALL - є зарезервованим словом, яке позначає всі можливі значення. Може використовуватися замість будь-яких алиасов і значень в полях "хто", "де", "від кого", "що". Не намагайтеся створювати аліаси з ім'ям ALL.

Знак оклику ( '!') Використовується як логічний оператор заперечення (not) і дозволяє виключати певні значення. Наприклад, можна дозволити виконувати будь-які операції за винятком деяких використовуючи ALL і "! ".

Довгі рядки можна розбивати на підрядка за допомогою символу зворотної косої межі ( '\') стоїть в кінці кожної подстроки крім останньої.

Прогалини між елементами '=', ':', '(', ')' не обов'язкові. Тобто їх можна використовувати, а можна не використовувати.

Наступні символи необхідно екранувати за допомогою символу зворотної косої межі ( '\'):

Схожі статті