Кілька Linux системних адміністраторів, що працюють як root


40

У нашій команді у нас є три досвідчені системи Linux, які потребують адміністрування декількох десятків серверів Debian. Раніше ми працювали як root, використовуючи аутентифікацію відкритого ключа SSH. Але ми мали дискусію щодо того, яка найкраща практика для цього сценарію, і ми нічого не могли домовитись.

Усі відкриті ключі SSH ставляться у ~ root / .ssh / pooblasti_keys2

  • Перевага: простота у використанні, пересилання SSH агентів працює легко, невеликі накладні витрати
  • Недолік: відсутній аудит (ти ніколи не знаєш, який «корінь» вніс зміни), більші шанси на аварії

Використання персоналізованих акаунтів та sudo

Таким чином ми входимо в облікові записи за допомогою персональних облікових записів SSH та використовуємо sudo для виконання одиночних завдань із дозволами root . Крім того, ми могли б дати собі групу "adm", яка дозволяє нам переглядати файли журналів.

  • Перевага: хороший аудит, sudo заважає нам робити занадто легко ідіотські речі
  • Недолік: переривання переадресації агента SSH, це клопот, тому що навряд чи що-небудь можна зробити як некореневий

Використання декількох користувачів UID 0

Це дуже унікальна пропозиція від одного з сисадмінів. Він пропонує створити трьох користувачів у / etc / passwd, усі мають UID 0, але різні імена для входу. Він стверджує, що це насправді не заборонено, і дозволяють всім мати UID 0, але все ще можуть проводити аудит.

  • Перевага: роботи з експедирування агентів SSH, аудит може працювати (неперевірений), ніяких судових клопотів
  • Недолік: відчуває себе досить брудно - не могло знайти його документально ніде як дозволений спосіб

Що б ти запропонував?


2
Про ваше твердження "не вдалося знайти його документально ніде як дозволений спосіб": Подивіться на -oпрапор на useraddсторінці керівництва. Цей прапор існує для того, щоб дозволити декільком користувачам обмінюватися одним і тим же uid.
jlliagre

6
Чи можете ви пояснити, що ви маєте на увазі під "перервами переадресації агента SSH" у другому варіанті? Ми використовуємо це в моїй роботі, і експедирування ssh-агента працює чудово.
Патрік

4
Вам слід вимкнути свій рахунок із свого некорінного акаунта, а не з судо.
Випадково832

4
Інший наслідок методу sudo: Ви більше не можете SCP / FTP як root. Будь-які передачі файлів спочатку потрібно перенести в домашній каталог особи, а потім скопіювати у термінал. Це перевага і недолік залежно від точки зору.
user606723

1
Чому не розглядаються системи лялькових / шеф-кухарів / відповідальних типів?
Алекс Холст

Відповіді:


64

Другий варіант - найкращий ІМХО. Особисті акаунти, доступ до судо. Повністю вимкнути кореневий доступ через SSH. У нас є кілька сотень серверів і півдесятка адміністраторів системи, ось так ми це робимо.

Як точно переривається переадресація агента?

Крім того, якщо це такі клопоти, використовуючи sudoперед кожним завданням, ви можете викликати оболонку sudo з sudo -sабо перейти на кореневу оболонку зsudo su -


10
Замість того, щоб повністю відключити кореневий доступ за допомогою SSH, я рекомендую зробити доступ до кореневих файлів SSH потрібними клавішами, створити одну клавішу з дуже сильною фразовою фразою та тримати її заблокованою подалі лише для екстреного використання. Якщо у вас постійний доступ до консолі, це менш корисно, але якщо ви цього не зробите, це може бути дуже зручно.
ВісімBitTony

17
Рекомендую відключити кореневий вхід через SSH з метою безпеки. Якщо вам дійсно потрібно ввійти як root, увійдіть як некорінний користувач та su.
таз

+1 .. Я б пішов далі, ніж сказав "Другий варіант - найкращий". Я б це єдиний розумний варіант. Варіанти один і три значно знижують безпеку системи як від зовнішніх атак, так і від помилок. Крім того, №2 - це те, як система була розроблена для використання в першу чергу.
Бен Лі

2
Будь ласка, детальніше sudo -s. Чи правильно я розумію, що sudo -iнемає різниці у використанні su -або в основному вході в систему як кореневі, крім додаткових записів журналу порівняно з простим входом у систему? Якщо це правда, то як і чому це краще, ніж звичайний кореневий логін?
PF4Public

9

Що стосується третьої запропонованої стратегії, окрім ознайомлення з useradd -o -u userXXXпараметрами, рекомендованими @jlliagre, я не знайомий із тим, як запускати декілька користувачів як один і той же uid. (отже, якщо ви все-таки продовжуватимете це, я був би зацікавлений, якщо ви можете оновити публікацію з будь-якими проблемами (або успіхами), які виникають ...)

Я думаю, що моє перше зауваження щодо першого варіанту "публічний ключ SSH кожного вводиться в ~ root / .ssh / pooblasti_keys2", це те, що якщо ви абсолютно ніколи не будете працювати на інших системах;

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

Другим зауваженням було б те, що якщо ви працюєте в системах, які прагнуть до HIPAA, відповідності PCI-DSS, або таких предметів, як CAPP та EAL, вам доведеться вирішувати питання судо, тому що;

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

Так; Використання персоналізованих акаунтів та sudo

Прикро, що як системний адміністратор, майже все, що вам потрібно буде зробити на віддаленій машині, вимагатиме підвищених дозволів, однак прикро, що більшість інструментів та утиліт на базі SSH розбиті, коли ви знаходитесь в sudo

Отже, я можу передати деякі хитрощі, які використовую, щоб подолати роздратування sudoзгаданих вами причин. Перша проблема полягає в тому, що якщо кореневий вхід блокується за допомогою PermitRootLogin=noабо у вас немає кореня за допомогою ключа ssh, то це робить SCP файли чимось PITA.

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

Нудне рішення : скопіюйте файли в домашній каталог, затухайте та скапуйте.

ssh userXXX@remotesystem, І sudo su -т.д., cp /etc/somefilesщоб /home/userXXX/somefiles, chown -R userXXX /home/userXXX/somefilesвикористовуйте УПП для вилучення файлів з пульта дистанційного керування.

Дійсно дуже нудно.

Менш нудне рішення : sftp підтримує -s sftp_serverпрапор, отже, ви можете зробити щось на зразок наступного (якщо ви налаштували sudo без пароля /etc/sudoers);

sftp  -s '/usr/bin/sudo /usr/libexec/openssh/sftp-server' \
userXXX@remotehost:/etc/resolv.conf 

(Ви також можете скористатися цим хак-файлом за допомогою sshfs, але я не впевнений, що його рекомендують ... ;-)

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

Метод ніндзя вперед :

Увійдіть до віддаленого хоста, але вкажіть, що віддалений порт 3022 (може бути будь-яким безкоштовним та незарезервованим для адміністраторів, тобто> 1024) повинен бути перенаправлений назад до порту 22 на локальній стороні.

 [localuser@localmachine ~]$ ssh userXXX@remotehost -R 3022:localhost:22
Last login: Mon May 21 05:46:07 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------

Отримайте корінь звичайним способом ...

-bash-3.2$ sudo su -
[root@remotehost ~]# 

Тепер ви можете пропрасувати файли в іншому напрямку, уникаючи нудного нудного кроку зробити проміжну копію файлів;

[root@remotehost ~]#  scp -o NoHostAuthenticationForLocalhost=yes \
 -P3022 /etc/resolv.conf localuser@localhost:~
localuser@localhost's password: 
resolv.conf                                 100%  
[root@remotehost ~]#  

 

 

Проблема 2: Переадресація агента SSH : Якщо ви завантажуєте кореневий профіль, наприклад, вказуючи оболонку входу, необхідні змінні середовища для переадресації агента SSH, такі як SSH_AUTH_SOCKскидання, отже, переадресація агента SSH буде "зламана" під sudo su -.

Напівзапекла відповідь :

Все, що належним чином завантажує кореневу оболонку, буде належним чином скинути середовище, однак є невелика робота, яку можна використовувати, коли вам потрібно ДОСТУПНИЙ корінний дозвіл І можливість користуватися агентом SSH, В ОДНІЙ ЧАС

Це досягає свого роду химерного профілю, який насправді не слід використовувати, оскільки це неприємний злом , але корисний, коли вам потрібно передавати файли SCP з віддаленого хоста як root, на якийсь інший віддалений хост.

У будь-якому випадку, ви можете увімкнути, що ваш користувач може зберегти свої ENV-змінні, встановивши наступне в sudoers;

 Defaults:userXXX    !env_reset

це дозволяє створювати неприємні гібридні середовища входу на зразок цього;

вхід як звичайний;

[localuser@localmachine ~]$ ssh userXXX@remotehost 
Last login: Mon May 21 12:33:12 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------
-bash-3.2$ env | grep SSH_AUTH
SSH_AUTH_SOCK=/tmp/ssh-qwO715/agent.1971

створити bash оболонку, яка працює /root/.profileі /root/.bashrc. але зберігаєSSH_AUTH_SOCK

-bash-3.2$ sudo -E bash -l

Таким чином, ця оболонка має права доступу до root та root $PATH(але домашній каталог із захищеним файлом ...)

bash-3.2# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t
bash-3.2# echo $PATH
/usr/kerberos/sbin:/usr/local/sbin:/usr/sbin:/sbin:/home/xtrabm/xtrabackup-manager:/usr/kerberos/bin:/opt/admin/bin:/usr/local/bin:/bin:/usr/bin:/opt/mx/bin

Але ви можете використовувати це виклик, щоб робити речі, для яких потрібен віддалений корінь sudo, але також доступ до SSH агента;

bash-3.2# scp /root/.ssh/authorized_keys ssh-agent-user@some-other-remote-host:~
/root/.ssh/authorized_keys              100%  126     0.1KB/s   00:00    
bash-3.2# 

1
Мені подобаються хаки.
sjbotha

2

Третій варіант виглядає ідеально - але ви насправді випробували його, щоб побачити, що відбувається? У той час як ви могли б побачити додаткові імена користувачів на етапі аутентифікації, будь зворотний пошук буде повертати однакове значення.

Дозволити прямий доступ до кореневого ssh - це погана ідея, навіть якщо ваші машини не підключені до Інтернету / використовують надійні паролі.

Зазвичай я використовую 'su', а не sudo для кореневого доступу.


4
Додавання кількох користувачів з однаковим UID додає проблем. Коли програми переходять до імені користувача на номер UID, вони можуть знайти неправильне ім’я користувача. Програми, які працюють під коренем, можуть вважати, що вони працюють як неправильний користувач, і багато дивних помилок почнуть спливати (я спробував це один раз).
Патрік

8
Третій варіант - просто кривава погана ідея . Ви по суті порушуєте відношення 1: 1 між UID та іменами користувачів, і буквально все в Unix очікує, що це відношення має місце. Тільки тому, що немає явного правила не робити цього, це не означає, що це гарна ідея.
Шадур

Вибачте, але третій варіант - жахлива ідея. Якщо кілька людей, які входять в систему UID 0, просто вимагають множити проблеми. Варіант №2 є єдиним здоровим.
Дуг

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

@Patrick Ви бачили це на практиці? Наскільки я тестував, то програми вибирають rootкористувача, якщо rootкористувач перший /etc/passwdіз UID 0. Я схильний погоджуватися з jlliagre. Єдиний недолік, який я бачу, - це те, що кожен користувач є rootкористувачем, і іноді це може бути заплутаним, щоб зрозуміти, хто що робив.
Мартін

2

Я використовую (1), але мені трапилось набрати

rm -rf / tmp *

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

(2) Можливо, це інженерія - і ви можете стати повноцінним корінцем через sudo su -. Однак нещасні випадки все ще можливі.

(3) Я б не торкався баржі з жердиною. Я використовував його на Suns для того, щоб мати не-barebone-sh root-акаунт (якщо я добре пам’ятаю), але він ніколи не був надійним - плюс я сумніваюся, що це було б дуже ретельно.


2

Однозначно відповідь 2.

  1. Значить, ви дозволяєте SSH отримати доступ як root. Якщо ця машина будь-яким чином стикається з громадськістю, це просто жахлива ідея; Коли я запускав SSH на порт 22, мій VPS отримував кілька спроб на годину, щоб підтвердити автентичність як root. У мене був створений базовий IDS для реєстрації та заборони IP-адрес, які робили багато спроб, але вони продовжували надходити. На щастя, я заборонив доступ до SSH як кореневого користувача, як тільки у мене був налаштований власний обліковий запис і sudo. Крім того, у вас практично немає аудиторських записів для цього.

  2. Забезпечує кореневий доступ як і коли це потрібно. Так, ви майже не маєте жодних привілеїв як звичайного користувача, але це майже саме те, що ви хочете; якщо обліковий запис дійсно зламається, ви хочете, щоб він обмежений у своїх можливостях. Ви хочете, щоб будь-який суперкористувач потребував повторного введення пароля. Крім того, доступ до sudo можна керувати за допомогою груп користувачів і обмежувати лише певними командами, якщо вам це подобається, що дає вам більше контролю над тим, хто має доступ до чого. Крім того, команди, виконані як sudo, можуть реєструватися, тому це забезпечує набагато кращий аудиторський слід, якщо все піде не так. О, і не просто запускайте "sudo su -", як тільки ви увійдете в систему. Це жахлива, жахлива практика.

  3. Ідея вашого сидсмана погана. І він повинен почувати себе погано. Ні, * nix-машини, мабуть, не завадять вам цього зробити, але і ваша файлова система, і практично кожна програма там очікує, що кожен користувач має унікальний UID. Якщо ви почнете спускатися цією дорогою, я можу гарантувати, що у вас виникнуть проблеми. Можливо, не відразу, але з часом. Наприклад, не дивлячись на приємні дружні імена, файли та каталоги використовують номери UID для позначення їх власників; якщо ви зіткнулися з програмою, яка має проблеми з дублікатами UID вниз по лінії, ви не можете просто змінити UID у вашому файлі passwd пізніше, не потребуючи серйозної очищення файлової системи вручну.

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


1

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


1

За старих часів судо не існувало. Як наслідок, наявність декількох користувачів UID 0 була єдиною доступною альтернативою. Але це все ще не так добре, зокрема, з веденням журналу на основі UID для отримання імені користувача.

На сьогоднішній день судо є єдиним відповідним рішенням. Забудьте все інше.


0

Це задокументовано допустимо за фактом. Уніфікати BSD вже давно мають свій обліковий запис, і користувачі bashroot, як правило, приймають практику в системах, де csh є стандартним (прийняте неправомірне використання;)


0

Можливо, я дивний, але метод (3) - це те, що спочатку спало на думку. Плюси: у вас буде ім’я кожного користувача в журналах і ви б знали, хто що робив як root. Мінуси: вони завжди будуть викорінюватися, тому помилки можуть бути катастрофічними.

Я хотів би розпитати, навіщо вам потрібно, щоб усі адміністратори мали доступ до кореня. Усі 3 запропонованих вами методу мають один чіткий недолік: як тільки адміністратор запускає те sudo bash -lчи інше sudo su -, ви втрачаєте здатність відстежувати, хто що робить, і після цього помилка може стати катастрофічною. Більше того, у випадку можливої ​​поведінки, це навіть може закінчитися набагато гірше.

Замість цього ви можете подумати про інший шлях:

  • Створіть своїх адміністраторів як постійних користувачів
  • Вирішіть, хто повинен виконувати яку роботу (управління apache / управління постфіксами тощо)
  • Додайте користувачів до споріднених груп (наприклад, додайте "martin" до "postfix" та "mail", "amavis", якщо ви використовуєте його тощо)
  • Виправити дозволи (chmod -R g + w postfix: postfix / etc / postfix)
  • надайте лише відносні повноваження судо: (visudo -> нехай martin використовує /etc/init.d/postfix, / usr / bin / postsuper тощо)

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

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

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


Я повинен додати, що обробка SSH-з'єднань є досить базовим у цьому контексті. Який би метод ви не використовували, не дозволяйте кореневих логінів через SSH, дозвольте окремим користувачам ssh з власними обліковими даними та обробляти sudo / nosudo / тощо звідти.
Tuncay Göncüoğlu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.