Як обійтися без прав root. Частина 3., Linux, Операційні системи, статті

Станіслав Лапшанскій

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

Говорячи по-русски, псевдонім це просто група користувачів, хостів або команд. Якщо службові обов’язки користувача змінюються, то для додання йому необхідних повноважень, вам слід просто додати його в опис того чи іншого псевдоніма. Для того що б ваші системні оператори як і раніше могли робити резервне копіювання, але при цьому не маючи повноважень для відновлення даних, вам доведеться всього лише видалити з їх псевдоніма відновлюють команди. Коли ви запустите в експлуатацію новий сервер, додавання імені цього сервера у відповідний псевдонім дозволить вам негайно дати адміністраторам системи права, необхідні їм для виконання їхньої роботи.

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

Користувальницький псевдонім описує групу користувачів. Оголошення користувацького псевдоніма починається з мітки «User_Alias». Як неважко здогадатися, користувальницький псевдонім містить в собі список користувачів. Описаний у даному прикладі користувальницький псевдонім DNSADMINS, містить двох користувачів mwlucas і chris:

User_Alias DNSADMINS = chris,mwlucas

Псевдонім Runas є спеціальним псевдонімом. Він визначає список користувачів від імені яких інші користувачі можуть запускати свої команди.

Багато сервери імен можуть виконуватися від імені користувача «named». Очевидно, що адміністратору DNS-сервера може знадобитися запускати команди від імені цього користувача, отже, ви можете визначити для нього Runas-псевдонім. Багато додатків в складі серверів баз даних виконуються під своїм власним користувачем. У багатьох випадках системний адміністратор, відповідальний за експлуатацію програми захоче мати можливість виконувати резервне копіювання від імені користувача «operator». Ви можете створити один Runas-псевдонім для групи таких команд. Псевдонім Runas починається з мітки «Runas_Alias».

Runas_Alias APPADMIN = named,dbuser,operator

«Хостової» псевдонім є просто списком мережевих хостов. Ознакою хостового псевдоніма є мітка «Host_Alias». У списку хостів можуть бути присутніми DNS-імена машин, IP-адреси і адреси мереж. (Пам’ятаєте, що якщо ви використовуєте DNS-імена, то ваша sudo-конфігурація буде піддана вразливостям пов’язаних з системою DNS). Ось приклади записів з усіма трьома типами адрес:

Host_Alias DNSSERVERS = dns1,dns2,dns3
Host_Alias SECURITYSERVERS = 192.168.1.254,192.168.113.254
Host_Alias COMPANYNETWORK = 192.168.1.0/16

Командний псевдонім складається зі списку команд операційної системи. Він починається з мітки «Cmnd_Alias». Запишемо псевдонім, який буде об’єднувати команди необхідні для резервного копіювання і відновлення даних:

Cmnd_Alias BACKUPS = /bin/mt,/sbin/restore,/sbin/dump

Ви можете створити псевдонім, який буде об’єднувати всі команди в певному каталозі. Припустимо, що у нас є якесь додаток, що виконується від імені певного користувача, крім того, всі утиліти цього додатка знаходяться в домашньому каталозі користувача. Замість того, щоб вказувати в псевдонімі всі ці команди по черзі, ми можемо вказати тільки повний шлях до каталогу і зразок імені файлу, що підходить під всі вміст цього каталогу:

Cmnd_Alias DBCOMMANDS = /usr/home/dbuser/bin/*

Для того що б скористатися створеним псевдонімом просто підставте його ім’я туди, куди ви зазвичай пишете ім’я користувача, машини або команди відповідно. Вище ми визначили для користувача псевдонім DNSADMINS. Нехай користувачі згадані в цьому псевдонімі мають право виконувати будь-які команди на будь-яких серверах:

DNSADMINS ALL = ALL

Давайте припустимо що користувач Філ (Phil) управляє додатком, що виконується від імені певного користувача. Він може виконати будь-яку команду на сервері від імені цього користувача. Скористаємося раніше певним Runas-псевдонім APPADMIN і командним псевдонімом DBCOMMANDS, що включає в себе необхідні команди.

phil ALL = (APPADMIN)DBCOMMANDS

Філу потрібно робити резервне копіювання даних його застосування. Ми вже згадали користувача operator в псевдонімі APPOWNER (судячи з усього автор просто забув вставити абзац з визначенням псевдоніма APPOWNER, проте його неважко відновити: «Runas_Alias ​​APPOWNER = dbuser, operator» – прим. перекладача), і описали командний псевдонім BACKUPS для здійснення резервного копіювання. Скомбініруем їх:

phil ALL = (APPOWNER) DBCOMMANDS, (APPOWNER) BACKUPS

Це виглядає куди простіше «розгорнутої» записи, яку довелося б писати не будь у sudo конструкції псевдонімів.

phil ALL = (dbuser,operator)/usr/home/dbuser/bin/*,
(dbuser,operator)/bin/mt, (dbuser,operator)/sbin/restore,
(dbuser,operator)/sbin/dump

В даному випадку деякі права надлишкові, оскільки резервне копіювання не вимагає прав користувача бази даних. Проте це набагато краще ніж, якби ми просто дали Філу права суперкористувача. Крім того, для своїх користувачів ви можете встановлювати наскільки завгодно жорсткі обмеження.

Є можливість використовувати вкладені псевдоніми. Наприклад ви хочете об’єднати псевдоніми DBCOMMANDS і BACKUPS в один загальний псевдонім. Зрозуміло об’єднуються псевдоніми вже повинні бути описані перед об’єднанням.

Cmnd_Alias DBADMINS = BACKUPS,DBCOMMANDS

sudo вміє брати інформацію про групи користувачів визначених у операційній системі і використовувати її як псевдонімів у файлі sudoers. Замість того, щоб визначати користувальницький псевдонім ви можете просто взяти назву групи користувачів і використовувати його, поставивши попереду значок відсотка “%», для того, щоб показати, що це саме ім’я групи.

%wheel ALL = ALL

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

Ви можете використовувати імена псевдонімів повторно. Користувальницький псевдонім DBADMINS це зовсім не те ж саме що командний псевдонім DBADMINS. Це цілком дозволяє робити такі записи у файлі sudoers.

Cmnd_Alias DBAPP = /usr/home/dbuser/bin/*
Host_Alias DBAPP = server8,server12,server15
RunasAlias DBAPP = dbuser,operator
User_Alias DBAPP = chris,mwlucas
DBAPP DBAPP = (DBAPP) DBAPP

Це відмінний приклад «технічно можливого, але абсолютно аморального» (мається на увазі сакраментальна фраза характеризує поточну точку зору на питання клонування людини – прим. Перекладача). Якщо ви будете користуватися цією можливістю, то хто-небудь сторонній, кому доведеться розбиратися в такій конфігурації, обов’язково згадає вас коротким образливим словом (більш того, якщо через деякий час вам доведеться повернутися до конфігурації sudo, ви самі будете рвати на собі волосся – прим. перекладача). Крім того, подібні речі зазвичай призводять до телефонних дзвінків в середині того короткого часу, який відводить на свій сон головний адміністратор.

Тепер давайте пробіжимося по неприємним ситуаціям в які потрапляють навіть досвідчені системні адміністратори. Іноді вам потрібно заборонити користувачам виконувати певний набір команд, дозволивши при цьому виконання всіх інших. Ви можете спробувати зробити це за допомогою оператора заперечення «!». Майте на увазі, що це абсолютно неефективно. Оскільки такі спроби робляться досить часто, ми обговоримо, як це працює і в чому тут каверза.

По-перше визначимо командний псевдонім, в якому будуть описані заборонені команди. Часто забороняються оболонки командних інтерпретаторів (оскільки якщо ви можете виконати оболонку від імені певного користувача, то ви можете робити все під ім’ям користувача) і команда su (1). А тепер давайте заборонимо вашому користувачеві використовувати команди описані цим псевдонімом за допомогою модифікатора «!»:

Cmnd_Alias SHELLS = /bin/sh,/bin/csh,/usr/local/bin/tcsh
Cmnd_Alias SU = /usr/bin/su
mwlucas ALL = ALL,!SHELLS,!SU

Виглядає чудово, чи не так? Подивимося, як це працює:

# sudo sh
Password:
Sorry, user mwlucas is not allowed
to execute ‘/bin/sh’ as root on openbsd.
#

Згадайте, sudo використовує повні шляхи для опису команд. Ви дозволили користувачеві запускати будь-яку потрібну йому команду, окрім декількох заборонених, описаних повними іменами. Все що потрібно користувачеві для запуску заборонених команд, це змінити шлях до їх файлів. Найпростішим засобом для реалізації цього задуму буде просте копіювання файлів в необхідне місце.

# id
uid=1000(mwlucas) gid=1000(mwlucas) groups=1000(mwlucas), 0(wheel)
# cp /bin/sh .
# sudo ./sh
# id
uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem), 3(sys),
4(tty), 5(operator), 20(staff), 31(guest)
#

Привіт, root!

Сподіваюся ви тепер зрозуміли, що такий спосіб обмежень може бути надзвичайно просто обійдений, будь-якою людиною, мало-мальськи розбирається в роботі sudo. Ця проблема добре документована в різноманітній літературі, а так само поставляється з sudo керівництві. Але, незважаючи на це, люди наполегливо наступають на одні й ті ж граблі, використовуючи обмеження такого роду для захисту робочих машин.

Якщо у вас є користувачі, яким ви не можете довірити необмежений доступ до системи, не користуйтеся винятком команд при описі їх привілеїв. Обмежтеся списком явно дозволених для виконання команд. Виняток команд може стати в нагоді тільки в разі довірених користувачів (працівників), як нагадування (вкрай суперечливе, на мій погляд краще взагалі не користуватися, щоб не вводити «у спокуса »- прим. перекладача). Тобто коли я зайду на машину і надрукую «sudo su», sudo скажімо мені, що мені не варто виконувати тут такі команди.

На цьому ми завершимо нашу розмову про sudo. Я можете дізнатися більше про sudo на її сайті (див. www.courtesan.com/sudo/), А так же прочитавши присвячені їй сторінки керівництва man 8 sudo і man 5 sudoers.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Трекбек і пінги

трекбеків / пінгів ще немає.

Відгуки

У вас деколи на головній сторінці вистрибує помилка 404 це так і має бути чи це в мене вогнелис глючить?

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*