Кореневий доступ, який не може змінити пароль root?


66

У нас є невелика проблема на сервері. Ми хочемо, щоб деякі користувачі мали змогу це зробити, наприклад, sudoі стати root, але з тим обмеженням, що користувач не може змінити пароль root. Тобто, це гарантія того, що ми все ще можемо увійти на цей сервер і стати root, незалежно від того, що робитимуть інші користувачі.

Це можливо?


32
Ви можете використовувати sudoдозвіл лише для конкретних привілейованих додатків. Таким чином, користувачеві не буде дозволено змінювати пароль root
SHW

24
ЧОМУ вам потрібні sudoці користувачі. Якщо ви їм не довіряєте, не надайте їм sudoдоступу в першу чергу. Також зауважте, що в ідеалі корінь взагалі не повинен мати пароль , але слід використовувати інші засоби автентифікації. (Який користувач все ще зможе "зламати", навіть якщо ви протестуєте /etc/passwd)
Anonymous-Mousse

3
Що саме потрібно робити цим користувачам?
Олів'є Дулак

4
Що вони роблять зі своїми кореневими привілеями? Можливо, буде краще рішення, ніж те, про що ти думаєш.
sparticvs

23
Це одна з таких: "Чи може Бог зробити валун таким великим, що він сам не може його підняти?" введіть питання. Якщо у вас є кореневий доступ, ви можете робити що завгодно, саме тому кореневий доступ найкраще надавати розумно. sudoі setuidможе вирішити більшість проблем.
bsd

Відповіді:


57

Ми хочемо, щоб деякі користувачі мали змогу це зробити, наприклад, sudoі стати root,

Ну, ось цю проблему судо покликаний вирішити, тому ця частина досить проста.

але з обмеженням, що користувач не може змінити пароль root.

Ви можете, як SHW вказував у коментарі, налаштувати sudo лише для того, щоб певні користувачі могли взяти за основу певні дії. Тобто, ви можете дозволити user1 зробити sudo services apache2 restart, дозволяють user2 робити , sudo rebootале нічого іншого, дозволяючи при цьому найманий-як-система-адміністратор user3зробити sudo -i. Існують способи, як налаштувати подібне sudo, або ви можете шукати (або запитувати) тут. Це є вирішуваною проблемою.

Однак користувач, якому надана можливість sudo -iабо sudoв оболонку ( sudo bashнаприклад), може робити все, що завгодно. Це тому, що до того часу, як судо запустить оболонку, саме судо не виходить із картини. Він надає контекст безпеки іншого користувача (найчастіше кореневого), але не має жодного слова в тому, що робить виконана програма. Якщо ця програма по черзі запускається passwd root, судо нічого з цим не може зробити. Зауважте, що це можна зробити і через інші програми; Наприклад, багато більш досконалих редакторів надають засоби для виконання команди через оболонку, оболонка якої буде виконана за допомогою ефективного uid цього редакторського процесу (тобто root).

Тобто, це гарантія того, що ми все-таки можемо увійти на цей сервер і стати root незалежно від того, що робитимуть інші користувачі.

Вибачте; якщо ви дійсно означаєте, "переконайтеся, що ми зможемо увійти та використовувати систему незалежно від того, що робить хтось із кореневим доступом до неї", це (для всіх намірів і цілей) зробити не можна. Швидкий "sudo rm / etc / passwd" або "sudo chmod -x / bin / bash" (або будь-який інший корінь оболонки), і ви все одно сильно шлангували. "Досить сильно шланг", що означає "вам потрібно буде відновити з резервного копіювання і сподіваюся, що вони не зробили нічого гіршого, ніж промацування пальців". Ви можете вжити певних заходів, щоб знизити ризик випадкових випадкових випадків, що призводять до непридатної системи, але ви не можете запобігти зловмисню викликати дуже серйозні проблеми аж до того, що потрібно відновити систему з нуля або принаймні з відомих хороші резервні копії.

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

Обмежений доступ до кореня через напр. Sudo є трохи кращим, але ви все ж повинні бути обережними, щоб не відкрити жодних векторів нападу. І з кореневим доступом існує безліч можливих векторів атак для атак ескалації привілеїв.

Якщо ви не можете довіряти їм рівень доступу, який спричиняє root, вам знадобиться або дуже затягнута конфігурація sudo, або просто не надавати користувачеві, про який йдеться, кореневий доступ будь-якими засобами, sudo чи іншим способом.


3
Вибачте, моя відповідь отримала весь галас (я не дуже розумію!). Ваша відповідь викликає відмінні бали, і я сподіваюся, що вона буде прийнята. +1 вам, сер.
Джозеф Р.

@JosephR. іноді кращим є відповідь.
Девід Кауден

@DavidCowden Так, здається, це так і є тут ...
Джозеф Р.

1
@JosephR. Не хвилюйся за мене. Спільнота Exchange Stack не завжди передбачувана, і питання, які вже мають багато оновлень, як правило, залучають більше. Дякую за підсумки. :)
CVn

92

Це практично неможливо. Перш за все, якщо ви наділите їх владою стати корінними , то ви нічого не можете зробити, щоб завадити їм щось робити. У вашому випадку використання, sudoслід використовувати для надання вашим користувачам деяких кореневих повноважень, обмежуючи інших, не дозволяючи їм стати root .

У вашому випадку, вам необхідно буде обмежити доступ до suі passwdкомандам і відкритий доступ до досить багато всього іншого. Проблема полягає в тому, що ви нічого не можете зробити для того, щоб ваші користувачі не могли безпосередньо редагувати /etc/shadow(або /etc/sudoersз цього приводу) редагувати і не впадати в пароль замінного корінця для викрадення root. І це лише найпростіший можливий сценарій "атаки". Судери з необмеженою потужністю, за винятком однієї або двох команд, можуть обійти обмеження щодо викрадення повного кореневого доступу.

Єдине рішення, запропоноване SHW в коментарях, - використовувати, sudoщоб надати своїм користувачам доступ до обмеженого набору команд.


Оновлення

Можливо, є спосіб досягти цього, якщо ви використовуєте квитки Kerberos для аутентифікації. Прочитайте цей документ, що пояснює використання .k5loginфайлу.

Я цитую відповідні частини:

Припустимо, користувач alice мав у своєму домашньому каталозі файл .k5login, що містить такий рядок:
bob@FOOBAR.ORG
Це дозволить bob використовувати мережеві додатки Kerberos, такі як ssh (1), для доступу до облікового запису Аліси, використовуючи квитки Kerbros на бобі .
...
Зауважте, що оскільки боб зберігає квитки на Kerberos за власного директора, bob@FOOBAR.ORGвін не матиме жодних привілеїв, які вимагають квитки Аліси, наприклад, кореневий доступ до будь-якого з хостів сайту або можливість змінити пароль Аліси.

Я, можливо, помиляюся. Я до сих пір переглядаю документацію і ще маю випробувати Керберос на собі.


Як ви зробили це класне посилання на коментар? Я подивився на джерело вашої відповіді і побачив (), що його оточує. Класна таємна шапочка!
Джо

@Joe Час публікації коментаря насправді є посиланням на сам коментар.
Джозеф Р.

@Joe Знайдіть id ( <tr id="thisistheid"...) до коментаря (наприклад, у Chrome правою кнопкою миші та Inspect element), а потім додайте його до посилання потоку з попереднім #. У вашому випадку (id = comment-162798) це виглядає приблизно так: unix.stackexchange.com/questions/105346/…
polym

1
Дякую за відповідь, я не знав, чи повинен я прийняти те чи інше від @Michael Kjörling, я вибрав його, тому що в ньому є більше опису - потрібен нуб, як я :) Однак, ваш також був корисний
244

@ 244an Не хвилюйтесь. Я б сам рекомендував те саме. :)
Джозеф Р.

17

Я припускаю, що ви хочете переконатися, що у вас є доступ до "адміністратора надзвичайних ситуацій", навіть якщо ваш фактичний адміністратор накрутив (але крім цього, ви повністю довіряєте головному адміністратору).

Популярний підхід (хоча і дуже хакітний) полягає у тому, щоб мати другого користувачаuid=0 , який зазвичай називається toor(корінь назад). Він має інший пароль і може служити резервним доступом. Щоб додати, вам, ймовірно, потрібно буде відредагувати /etc/passwdта /etc/shadow(скопіювати rootрядки).

Це все, крім відмов, але якщо вам просто потрібно захиститись від "головного адміністратора", змінивши пароль без попереднього повідомлення, це спрацює. Деактивувати відключення, видаливши toorобліковий запис, тривіально ; тому єдиною перевагою є наявність окремого пароля.

Крім того, ви можете переглянути альтернативні механізми аутентифікації, тобто sshключі libnss-extrausers, LDAP тощо.

Зауважте, що адміністратор все ще може погано викручуватися. Наприклад, блокуючи брандмауер.

Якщо ви хочете мати дуже захищену систему, подумайте про використання SELinux, де користувач unix (наприклад, root) також надходить з роллю, яка може бути набагато більш тонкою. Ви можете надати кореневому доступу адміністратора, але лише обмежену роль (наприклад, лише для адміністрування апаша). Але для цього вам знадобиться досить багато зусиль, щоб правильно налаштувати політику.


6
Це фактично не заважає користувачеві toorзмінити кореневий пароль; він надає лише другий пароль, з яким можна отримати root.
alexis

2
-1, то. Ви пропонуєте пароль заднього доступу, щоб адміністратори могли відновити кореневий доступ після втрати його ??? Це просто неправильно, і окрім набридливих користувачів, можна легко відключити це, як ви кажете. Є набагато більш надійні способи встановити бекдор.
alexis

2
@alexis Саме про це ІМХО запитав автор питання . Навіщо давати -1 за це? toorОблікові записи для відновлення є звичною практикою (хоча й нахмуреною) в Unix протягом десятиліть.
Аноні-Мус

9
Якщо єдиною метою є запобігання випадкових змін пароля, це хороша відповідь. Якщо мета - не допустити нічого шкідливого, це не дуже допоможе. Оскільки ОП не сказала, яка була мета, ми не знаємо.
Бобсон

2
Ось чому я заявив, що у своєму першому реченні: "закрути ... крім цього, ти довіряєш ... повністю". Це дійсно лише рішення "доступ до підтримки"; не є функцією захисту. Використання додаткових кореневих клавіш ssh досягає того ж самого, не піддаючись хакерству.
Аноні-Мус

11

Суть кореня полягає в необмеженому командуванні системою. Ви можете налаштувати його за допомогою SELinux (раніше був демонстраційний сайт, де кожен міг увійти як root, але його потужність була скалічена через систему доступу), але це не в цьому. Справа в тому, що це неправильне рішення вашої проблеми.

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

Звичайно, користувач з таким доступом (і трохи знань), ймовірно, може легко зламати систему, але ви принаймні працюєте з моделлю безпеки ОС, а не проти неї.

PS. Існує багато способів влаштувати кореневий доступ для себе без пароля; для одного, якщо ви знаходитесь /etc/sudoers(без обмежень), вам потрібен лише власний пароль, щоб стати root, наприклад, з sudo bash. Але вам просто не потрібно було їхати туди.


Але проблема полягає в тому, що ви не можете зупинити нападника від отримання корінця через експлуатацію, SELinux забезпечує захист у глибину.
Тімоті Леун

11

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

Дійсно, це залежить від того, що дійсно потрібно користувачеві, якому заборонено змінювати пароль root. Напевно, буде простіше і безпечніше просто розробити, що це таке, і надати ці дозволи, спеціально використовуючи sudo.


8
Хоча це робити з SELinux теоретично можливо (і я не переконаний), стверджуючи, що це не показуючи фактичних правил, нікому не допоможе.
Жиль

@Gilles насправді , саме для цього був розроблений SELinux. SELinux - це шар дозволів, необхідний на додаток до стандартних дозволів POSIX. На правильно налаштованій машині SELinux доступ до кореня є безглуздим, оскільки ваші справжні дозволи визначаються контекстом безпеки та міткою об'єктів.
tylerl

2
Якщо ви знаєте, як це зробити, будь ласка, дайте відповідь Міфу чи реальності: SELinux може обмежитися користувачем root?
Жиль

Теоретично це все ще можливо зробити із SELinux; однак налаштування чогось подібного повинна бути складнішою, щоб забезпечити надійне розділення для ВСІХ файлів конфігурації, пов’язаних з SELinux, від "звичайної" файлової системи (до якої rootкористувач має повний доступ). Зрештою, "найпростішим" методом такого поділу (з або без SELinux) було б
поєднання

7

Можливо, вам слід подумати про те, щоб дозволити користувачам мати root-доступ до віртуальної машини або контейнера LXC. Це дозволило б їм отримати повний кореневий доступ до системи, не дозволяючи їм заважати входити в хост або вживати адміністративних дій.


Це було б безпечніше, ніж багато варіантів IMHO.
Старійшина Гек

5

Я не знаю, що це буде практично здійсненно, але ось один брудний злом:

  1. напишіть скрипт / програму для обгортки, яка скопіює /etc/passwdфайл у якесь інше місце, перш ніж викликати фактичнеsudo
  2. Дозволити звичайному користувачеві користуватися sudo
  3. Як тільки він закінчив своє завдання, або коли він вийшов із судо, відновіть /etc/passwdфайл

Я знаю, що для цього потрібно врахувати багато плюсів-мінусів. Зрештою, це брудний злом


3
Завжди є можливість, щоб зловмисний користувач прочитав цей сценарій і видалив резервну копію.
Джозеф Р.

Це теж майже те, що vipwі друзі вже роблять.
CVn

Розгляньте це програмою та маючи лише кореневий доступ
SHW

1
rootВи можете змінити "інше місце" після sudo.
Аноні-Мус

5
Чому б ви надавали кореневий доступ потенційно шкідливому користувачеві ??? Як корінь, тривіально встановити задню двері, що не залежить від проходження через судо та / або обгортку ...
alexis

5

Заява, яка sudoпризначена лише для надання root, і після цього немає захисту, явно неправдива.

Ви використовуєте visudoдля зміни файлу sudoers. Ось приклад рядка:

redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command
  • redsandroце ім'я користувача, на яке ми надаємо дозвіл. Поставте %фронт, щоб він застосовувався до групи.
  • ALL- це назва цього правила. Судонери можуть зробити набагато більше, ніж просто надати глобальні дозволи. Ось де все ускладнюється.
  • = не потребує пояснень
  • ALL:ALLчитається як (who_to_run_it_as: what_group_to_run_it_as). Таким чином ви можете дозволити запуск команди, але тільки в контексті конкретного користувача або групи.
  • NOPASSWD: вказує, щоб вимкнути підказку пароля.
  • /path/to/command дозволяє вказати конкретні команди path_to_commmand, another_command

Слід пам’ятати, що хоча sudoдомашні користувачі в основному використовуються для переходу до кореневих привілеїв, він може бути і використовується для контролю доступу до певних команд набагато більш детально.

Список літератури

  • з моєї іншої відповіді тут

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

@ MichaelKjörling зроблено
RobotHumans

3
"Заява про те, що судо - це лише надання кореня, і після цього немає захисту, явно хибне". Скажімо, я надаю sudo viдоступ користувачеві, оскільки хочу, щоб вони могли редагувати файли конфігурації системи. Потім користувач робить :!/bin/bashце протягом sudo viсеансу. Як здатність sudo обмежувати, які команди може виконувати користувач через sudo, допомагає захистити мою систему за тих обставин? (Ніхто не сказав, що судо не може бути налаштовано більш чітко, ніж sudo -iпідхід « все або нічого» .)
CVn

6
Розуміння обмежень підходу легко настільки ж важливо, як і знання виконання завдання.
CVn

1
@ MichaelKjörling, я думаю, що це лише приклад. Але щоб було зрозуміло, правильний спосіб дозволити користувачам редагувати файли конфігурації системи - це дозволити їм працювати sudoedit. Ви можете конкретно визначити, які файли вони повинні мати можливість sudoedit. Це в man sudoers.
Меттью Флашен

3

(Я не знаю ubuntu, але це має бути схоже на Fedora / Red-Hat)
Єдине, що я можу собі уявити обмеженням доступу до зміни кореневого пароля - це не надавати повного доступу до кореня, можливо, із судо, або використовувати SElinux для обмеження доступу до файлу паролів ... але я б не довіряв ні великому доступу, оскільки root зазвичай має необмежений доступ і може оновити SElinux, або відновити файл пароля, або запустити якусь попередньо підготовлену програму для зміни пароля.

Якщо ви їм недостатньо довіряєте, щоб не змінити пароль, ви, мабуть, не повинні надавати їм кореневий доступ. Інакше я б здогадався, що ти намагаєшся уникати нещасних випадків.

Якщо ви лише намагаєтеся захистити свій доступ до root, встановіть програму, яка може відновити пароль root, так що навіть якщо він змінений, його можна відновити з мінімальним доступом. (Судо добре справляється самостійно)


3

Ваша вимога:

У нас є невелика проблема на сервері [...], тобто гарантія того, що ми все одно можемо увійти на цей сервер і стати root, незалежно від того, що робитимуть інші користувачі.

З вашого запитання здається, що ви не стикаєтеся з випадковими зловмисними користувачами, які мають намір знищити вашу систему, а натомість мають напівдовірчих користувачів, які можуть спричинити непорозуміння час від часу (студенти, можливо?). Мої пропозиції стосуються цієї ситуації, а не загального нападу зловмисних користувачів.

  1. Запустіть сервер всередині віртуального середовища. Ви зможете змонтувати файлову систему сервера та замінити змінені файли відомими хорошими версіями. Залежно від можливого збитку, який ви очікуєте, ви можете зробити знімок усіх критичних каталогів (/ bin, / sbin, / тощо, / usr, / var тощо) та розширити знімок, щоб перезаписати пошкоджені файли, залишаючи решту система неушкодженою.

  2. Запустіть систему лише для читання, наприклад, з DVD-R. Якщо ви можете жити, коли більшість частин системи є статичними до наступного перезавантаження, це хороший варіант. Ви також можете скористатися резервним сховищем лише для читання з віртуальним середовищем або завантажити базову систему по мережі, що робить зміни між перезавантаженнями набагато простішими, ніж написання нового DVD-R.

  3. Модулі ядра. Модулі безпеки Linux (LSM) ядра служать основою для створення захищених модулів. LSM використовується SELinux, але також використовується низкою менш відомих і простіших систем, таких як Smack, TOMOYO та AppArmor. У цій статті є хороший огляд варіантів. Швидше за все, це одна з тих, які можна налаштувати поза вікном, щоб не допустити доступу для запису до / etc / passwd, / etc / shadow або будь-якого іншого файлу, який ви хочете, навіть під корінь.

  4. Та сама ідея, що і №1, але коли сервер не знаходиться у віртуальному середовищі. У вас може бути завантажена ланцюг сервера в ОС, доступній лише для читання, такі як живий компакт-диск, який автоматично монтує файлову систему сервера і замінює базову систему на кожному завантаженні з відомими хорошими копіями. ОС тоді лише для читання завантажиться в основну ОС.

  5. Знову ж таки, якщо припустити, що це напівнадійні користувачі, які підзвітні вищому керівнику (вчитель / начальник), найкращою відповіддю може бути аудит Linux . Таким чином ви дізнаєтесь про всі дії, пов’язані з безпекою, і хто їх здійснив (ви дізнаєтесь, хто вчинив, тому що навіть якщо всі користувачі мають спільний корінний обліковий запис, вони спочатку отримають доступ до свого облікового запису користувача). Насправді ви навіть зможете проаналізувати журнал аудиту в режимі реального часу та замінити пошкоджені файли. / тощо / тінь переписана? Немає проблем, просто сервер моніторингу миттєво замінить його на добре відому версію.

Інші технології, які ви можете вивчити, виходячи з ваших потреб:


2

Щоб доповнити інші відповіді, я припускаю, що сценарій полягає в тому, що ви вважаєте, що втрачаєте контроль над коренем рідкісною ситуацією, і що в таких випадках перезавантаження сервера дозволено. (Зрештою, якщо ви вважаєте, що машина зламана, ви все одно захочете її зняти в автономному режимі.)

Велика перевага цього в тому, що налаштовувати нічого. Ваше запитання стає таким: " Я забув корінний пароль, як я можу повернутися? ", І відповідь на це - перезавантажити систему та вибрати режим однокористування, коли машина з'явиться. Це дає вам кореневу оболонку без необхідності знати пароль. У цей момент ви можете встановити новий пароль. (А також зайдіть і відремонтуйте будь-які пошкодження ...)


2
Ні. Як Майкл так влучно зауважив , зловмисний користувач може запобігти кореневому доступу, не обов'язково захоплюючи пароль, просто зіпсувавши бінарні файли. Навіть такий init=...підхід може бути перешкоджений для видалення дозволів на виконання з відповідних бінарних файлів. Я думаю, що кращим рішенням у цьому випадку є встановити вашу кореневу файлову систему через LiveCD та (спробувати) виправити пошкодження. Знову ж таки, якщо ви вважаєте, що система була порушена, вам краще все-таки відновитись із резервної копії.
Джозеф Р.

Погодився @JosephR; виявлення та виправлення пошкоджень є складним, і я б також перевстановив теж. Але я здогадуюсь, стурбованість ОП стосувалась того, щоб хтось випадково їх заблокував ... навмисне хакерство в робочій чи шкільній ситуації трохи самогубне. ;-)
Даррен Кук

1
Не обов'язково. По-справжньому зловмисний користувач у поєднанні з необережним / незрозумілим sysadmin може прискорити невизначеність привілеїв. Я погоджуюся, що початковий намір ОП, ймовірно, полягав у тому, щоб запобігти невинним помилкам, а не захищатись від зловмисних намірів, але питання було позначене "безпека", і ми просто зіткнулися з цим, я думаю :)
Джозеф Р.

2

Якщо ви клонуєте ваш сервер у віртуальній машині (наприклад, VirtualBox ), ви можете надати людям безперебійний доступ до коренів і все одно гарантуєте, що ви завжди матимете прямий доступ до розділів (-ів) гостьової операційної системи, а тому підтримуєте остаточний контроль над /etc/passwdі подібне, оскільки ви будете мати root в хост-системі.

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


2

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

Однак, якщо ви можете довіряти своїм користувачам, що вони не злі, ви можете обмежити зміну пароля питаннями політики . Ви можете створити обгортку для passwdпрограми, яка буде нагадувати їм "будь ласка, не змінюйте кореневий пароль". Це передбачає, що джерелом проблеми є те, що користувачі, які змінюють пароль root, роблять це через непорозуміння (як, можливо, думають, що вони змінюють власний пароль після того, як це зробили sudo bash).

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

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

  1. виявити, коли користувач змінює ідентифікацію на root і відстежувати будь-які створені процеси;
  2. з цього часу занотуйте створення процесів, щоб побачити, хто є оригінальним користувачем, відповідальним за кожен процес, та використовуючи віддалений хост, де напівдовірні користувачі не мають доступу для надсилання журналів;
  3. використовувати якесь системне відстеження, щоб зареєструвати те, що відбувається, і щоб згодом виявити, хто стояв за порушенням політики.

Нам потрібно, принаймні, увімкнути відкриття іншого, ніж безпечного набору файлів для запису, створення процесів exec(), і звичайно будь-яку спробу змінити мережу.

Реалізація може бути здійснена за допомогою модифікованого libc або (набагато краще) системного відстеження викликів.

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


1

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

Проблема полягає в тому, що якщо власник має фізичний доступ до вікна, він може легко відновити логічні доступ до системи (за умови, що він ще живий :). Якщо ні - зберігання кореневого пароля не врятує, наприклад, sshd вниз або погана настройка мереж, таким чином система все одно недоступна.

Тема про те, як запобігти пошкодженню системи особою, яка має адміністративні привілеї, видається занадто широкою, щоб відповідати формату питань SE.

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

Якщо IPMI відсутній, будь-яка підходяща технологія віртуалізації не може обійтися, як уже було запропоновано вище.


0

Ви можете обмежити доступ до sudo у вашому /etc/sudoersфайлі

Щоб повністю пояснити синтаксис / etc / sudoers, ми будемо використовувати зразок правила та розбивати кожен стовпець:

jorge  ALL=(root) /usr/bin/find, /bin/rm

Перший стовпець визначає, до якого користувача чи групи застосовується це правило sudo. У цьому випадку це jorge користувача. Якщо слову в цьому стовпці передує символ%, воно позначає це значення як групу замість користувача, оскільки система може мати користувачів та групи з тим самим іменем.

Друге значення (ALL) визначає, до яких хостів це правило sudo застосовується. Цей стовпець є найбільш корисним при розгортанні середовища sudo в декількох системах. Для настільної системи Ubuntu або для системи, де ви не плануєте розгортати ролі sudo в декількох системах, ви можете залишити це значення встановленим на ВСІ, це є мальованою карткою, яка відповідає всім хостам.

Третє значення задається в дужках і визначає, яким користувачем або користувачами користувач у першому стовпці може виконати команду як. Це значення встановлено на root, що означає, що jorge буде дозволений виконувати команди, вказані в останньому стовпчику, як користувач root. Це значення також може бути встановлено на ВСЕ підстановку, що дозволить jorge виконувати команди, як будь-який користувач у системі.

Останнє значення (/ usr / bin / find, / bin / rm) - це розділений комами список команд, який користувач у першому стовпці може виконувати як користувачі (і) у третьому стовпці. У цьому випадку ми дозволяємо jorge запускати find і rm як root. Це значення також можна встановити на ВСЕ підстановку, що дозволило б jorge запускати всі команди в системі як корінь.

Зважаючи на це, ви можете дозволити X-команди в обмеженому комою порядку, і поки ви не додасте passwdдо цього, ви повинні бути добре


-1

Немає жодного 1/2 кореня :) Після надання привілеїв root вони можуть робити все, що завгодно. Крім того, ви можете використовувати sudo для запуску обмеженої оболонки bash або запуску rbash без привілеїв root.

Якщо ви хочете мати механізм відмови, щоб увійти на сервер як root, ви можете або створити іншого користувача, uid=0або створити простий cron, який періодично скидає пароль root.


Врятуватися від обмеженого удару можна легко, дивіться цей блог Sans
Franklin Piat

-1

Спробуйте додати групу коліс, а не використовувати судо. sudo дозволяє користувачеві виконувати так, ніби вони є root, а це означає, що він не відрізняється від запуску:

су -

стати коренем. Корінь uid = 0; колесо uid = 10. Люди використовують імена, але ОС використовує uid. Деякі команди не можуть виконувати член колесної групи. (Якщо ви використовуєте колесо, не робіть помилки, додаючи корінь як член групи колеса). Погляньте на документацію Red Hat, якщо ви не знаєте, що таке колесо.

Інший варіант - використовувати ключ ssh, а не пароль. Припускаючи, що ви можете бути впевнені, що люди, які використовують sudo, не додають свої відкриті ключі до файлу ~ / .ssh / санкціонованих ключів, це сприймає будь-які проблеми щодо зміни кореневого пароля, оскільки пароль root фактично ігнорується.

Якщо ви бажаєте заохочувати довіру до цих користувачів (не додавати їх власний відкритий ключ), спробуйте скористатися розширеними атрибутами файлів та за допомогою біта Immutable. Після створення файлу ~ / .ssh / санкціонованих ключів та після конфігурації / etc / ssh / sshd_config та / etc / ssh / ssh_config встановіть потрібний біт. Звичайно, є й способи накрутити це - нічого ідеального.

У будь-якій системі інсайдери є найвищим ризиком. Людина, яка веде шоу, знаходиться у верхній частині купи. Пов'язана думка стосується контрактів. Юристи скажуть вам: "Ніколи не займайтеся бізнесом з кимось, з ким вам потрібен контракт для ведення бізнесу". Здоровий глузд говорить нам: "Ніколи не ведіть бізнес без договору". Коли ви знайдете когось, якому ви достатньо довіряєте, щоб вести бізнес, пишіть договір, виходячи з потреб один одного.

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

-Джон Крут


sudoце дуже відрізняється від su -. Це було неодноразово вказував, наприклад, SHW , Joseph R. , сам , hbdgaf і цілком можливо , ще кілька коментарів поле занадто коротке , щоб включати в себе ...
CVn

Все правда, але не має значення. Ви обговорюєте альтернативні способи стати корінними та ризики надання кореневого доступу, але нічого, що має відношення до "root доступу, який не може змінити пароль root".
Жиль

Правда. Питання - логічний оксиморон; Він не може існувати, якщо встановлення не порушено. Яка користь у вході / обліковому записі користувача, коли той користувач не може змінити свій пароль, але він має кореневий доступ? Тому запропоновані пропозиції стосуються того, що мав на увазі запитуючий; не до того, як вони написали запитання. Будь-який метод контролю доступу має властивий ризик.
Джон Крут

-3

Одним із способів було б переконатися, що /etcце не піддається запису. Ніхто, доки може бути sudoerнавколо.

Це можна зробити, встановивши її по мережі та переконайтесь, що з іншого боку не можна записати пристрій.

Це можна зробити за допомогою локального пристрою, який перешкоджає доступу до нього запису. (Пошук write blockerапаратного забезпечення)

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

Щоб бути впевненим, що користувач також не може виконувати ваші здібності до входу, у вас повинні бути встановлені лише читання /binта /sbin.

І вам доведеться мати сценарій, який періодично відновлює мережеве з'єднання.

(Як сторонне позначення: Якщо ви дозволите судеру лише дуже обмежений набір команд, і для кожної з них переконайтеся, що вони не можуть вирватися з них / замінити їх і т.д., то ви можете запобігти цьому, під час /etcзапису.)


Монтаж / тощо лише для читання, хоча можливо, можливо (вам доведеться бути обережними, наприклад, під час стрижневого кореня в скриптах завантаження initrd), ризикує стати досить крихкою установкою. Крім того, є багато речей, які може зробити користувач із кореневим доступом, що калічить можливість інших користувачів отримувати привілеї root, які не передбачають внесення змін у / і т.д.
CVn

@ MichaelKjörling Налаштування не тендітне, я використовую його часто (як місцеві кріплення лише для читання).
Анджело Фукс

@ MichaelKjörling Я додав деякі інші елементи, які ви хочете мати лише для читання, якщо ви хочете переконатися, що ви все ще можете увійти. Отже, список дій, які потрібно зробити, якщо ви спускаєтесь по цій дорозі, не такий короткий, але це єдиний спосіб, який "є гарантією того, що ми все ще можемо увійти на цей сервер і стати root, незалежно від того, що робитимуть інші користувачі".
Анджело Фукс

Я визнаю, що ніколи не бачив необхідності спробувати це, але одне, напевне, я можу побачити, що було б ризиковано - це те, як init збирається обробляти / etc / inittab замінюватися під ногами. Або що зробить система, якщо початковий і після повторного перерахунку / etc / fstab різні. А там / etc / mtab. Інші користувачі можуть захотіти змінити свої власні паролі, що включає в себе запис у / etc / shadow та, можливо, / etc / passwd. І монтаж / і т.д. тільки для читання є ще тільки частковим вирішенням. Я не кажу, що це не може бути частиною рішення, але, безумовно, це не перший крок, який я зробив би в ситуації з ОП.
CVn

1
Так. Це робити небезпечно і має серйозні проблеми, якщо зробити це неправильно. Досі, наскільки я бачу, це єдиний життєздатний спосіб вирішити запит на оперативні програми для користувачів, яким слід дозволити отримати корінь.
Анджело Фукс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.