Чому су світ виконується?


20

У мене є безголовий сервер, на який віддалено входять декілька користувачів. Жоден з інших користувачів не знаходиться у файлі sudoers, тому він не може отримати root через sudo. Однак, оскільки дозволи на suце -rwsr-xr-xніщо не заважає їм намагатися примусово застосувати кореневий пароль.

Можна стверджувати, що якщо користувач знає корінний пароль, він все одно може скомпрометувати систему, але я не думаю, що це так. OpenSSH налаштований PermitRootLogin noі PasswordAuthentication no, і ніхто з інших користувачів не має фізичний доступ до сервера. Наскільки я можу сказати, дозвіл на виконання миру /usr/bin/suє єдиним способом для користувачів, які намагаються отримати root на моєму сервері.

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

Я щось переглядаю? Чи світ виконує дозвіл suлише там на історичні причини? Чи є якісь недоліки у видаленні цього дозволу, з яким я ще не стикався?


9
"Це дозволяє мені керувати су безпосередньо безпосередньо замість того, щоб робити судо-су, але це навряд чи є незручністю". - А як щодо систем без додаткової sudoустановки? Я б сказав, що це досить велика незручність там;)
marcelm

1
Ви завжди можете обмежити доступ для / bin / su, але не забудьте зробити те ж саме для / usr / bin / pkexec.
jpa

6
Я не можу зрозуміти мотивацію цього питання. Здається, що вам було цікаво, чому су має бути виконаним у всьому світі, але який би був сенс альтернативи? Тобто, якби su виконувався лише корінь (?), Для чого ви думали, що це може бути використане?
Девід Z

1
@DavidZ Насправді це справді корисно для кореня! Ви можете швидко перемикати користувачів на нього.
Вал каже: Відновіть Моніку

1
@val Так, це правда. Те, що root може використовувати su, не викликає сумнівів. (Перечитавши, я бачу, як мій попередній коментар міг би запропонувати інше, але це не те, що я мав на увазі.) Мені цікаво, що Altay_H подумав про це, перш ніж вони задали це питання.
David Z

Відповіді:


39

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

Наприклад, якщо я ввійшов як користувач jim, і я хочу дослідити проблему, про mikeяку повідомили, але яку я не в змозі відтворити, я можу спробувати увійти як mikeі виконувати команду, яка доставляє йому проблеми.

13:27:20 /home/jim> su -l mike
Password:(I type mike's password (or have him type it) and press Enter)
13:27:22 /home/mike> id
uid=1004(mike) gid=1004(mike) groups=1004(mike)
13:27:25 /home/mike> exit  # this leaves mike's login shell and returns to jim's
13:27:29 /home/jim> id
uid=1001(jim) gid=1001(jim) groups=1001(jim),0(wheel),5(operator),14(ftp),920(vboxusers)

Використання -lопції suпричини викликає його для імітації повного входу (на manсторінку).

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

13:27:37 /home/jim> sudo su -l mike
Password:(I type my own password, because this is sudo asking)
13:27:41 /home/mike>

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


1
Це має багато сенсу. Оскільки я звик користуватися, sudoя забув, що suйого можна використовувати не просто sudo -s. І не будучи судором, це був би єдиний спосіб переключення користувачів без зміни ssh-клавіш. Для мого використання це ще одна причина для видалення дозволу, але зараз я розумію, чому дозвіл на виконання миру встановлено за замовчуванням. Спасибі!
Altay_H

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

Частина плутанини полягає в тому, що люди думають, що suозначає «суперкористувач», що це робиться, коли не вказано жодного користувача (або вказано кореневу конкретність), але воно також означає «переключення користувача». Отже, це друге використання suлегко забути.
Monty Harder

20

Історично (за угодами, що не належать до GNU), це не було, або, принаймні, це було вручну перевірено, якщо ви знаходитесь у групі під назвою "колесо", дозволеному su. Версія GNU suне відтворювала цю функціональність через ідеологію RMS щодо контролю доступу на той час:

Why GNU `su' does not support the `wheel' group
===============================================

   (This section is by Richard Stallman.)

   Sometimes a few of the users try to hold total power over all the
rest.  For example, in 1984, a few users at the MIT AI lab decided to
seize power by changing the operator password on the Twenex system and
keeping it secret from everyone else.  (I was able to thwart this coup
and give power back to the users by patching the kernel, but I wouldn't
know how to do that in Unix.)

   However, occasionally the rulers do tell someone.  Under the usual
`su' mechanism, once someone learns the root password who sympathizes
with the ordinary users, he or she can tell the rest.  The "wheel
group" feature would make this impossible, and thus cement the power of
the rulers.

   I'm on the side of the masses, not that of the rulers.  If you are
used to supporting the bosses and sysadmins in whatever they do, you
might find this idea strange at first.

Ви можете дізнатися набагато більше з цього питання, відвідавши "Googling" колеса колесових програм "Google" або подібне.


3
Це єдина правильна відповідь. Налаштування - навмисне, історичне, і саме це є причиною цього. Вся технічна блабла саме така - блабла. Ви можете абсолютно знову представити групу «колеса» в сучасному Unix.
Том

10

Однак, оскільки дозволи на suце -rwsr-xr-xніщо не заважає їм намагатися примусово застосувати кореневий пароль.

Так. Якщо припустити вашу звичайну систему Linux, pam_unix.soмодуль затримує невдалу спробу аутентифікації на ~ дві секунди, але я не думаю, що можна зупинити одночасні спроби.

Збільшені спроби реєструються, звичайно:

Aug 16 22:52:33 somehost su[17387]: FAILED su for root by ilkkachu

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

Що ще більше мене дивує тим, що це навіть не здається корисним.

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

Це дозволяє мені бігати suпрямо, а не робити sudo su, але це навряд чи є незручністю.

sudo suдещо зайве. Немає необхідності використовувати дві програми, які дозволяють запускати програми як інший користувач, однієї цілком достатньо. Просто використовуйте sudo -iабо sudo -s(або sudo /bin/bashін.), Якщо ви хочете запустити оболонку.

Я щось переглядаю? Чи світ виконує дозвіл на су просто з історичних причин?

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

Чи є якісь недоліки у видаленні цього дозволу, з яким я ще не стикався?

Не дуже, ні наскільки я знаю. Я думаю, деякі системи suналаштовані так, що тільки члени певної групи (" wheel") можуть керувати нею. Ви можете зробити те саме, що sudoвам подобається ( chown root.sudousers /usr/bin/sudo && chmod 4710 /usr/bin/sudo).

Або ви можете просто видалити одну або обидві програми, якщо вони вам не потрібні. Незважаючи на Debian, він suпостачається разом із цим loginпакетом, тому, мабуть, не годиться видаляти пакунок у цілому. (А спарювання loginта suподібне разом здається дещо історичним.)


1
Системи BSD вимагають, щоб користувачі були у wheelгрупі для використання su. Є деякі системи BSD (я можу говорити лише за OpenBSD), які взагалі не постачаються sudo(це сторонній пакет). У OpenBSD doasє повторне виконання основ sudo, але він за замовчуванням відключається при встановленні нової системи.
Kusalananda

@Kusalananda Ви повинні бути лише в тому wheelвипадку, якщо ви хочете suотримати корінь. Будь-який обліковий запис може suмати будь-який некорінний обліковий запис, на який вони мають пароль, незалежно від належності до wheelгрупи.
Джим Л.

Я запускаю "sudo su -", щоб переконатися, що корінна оболонка, яку я отримую, - це повний кореневий логін, без забрудненого середовища з мого облікового запису користувача. Судодер за замовчуванням на RHEL включає в себе досить багато змінних оточуючих середовищ, які можна виконати (наприклад, PS1).
jsbillings

@jsbillings, хм, добре. Чи suочищає довкілля тоді? Здається, це не робити на Debian ...
ilkkachu

"Su -" є у кожному Linux, який я знаю. Розум тире.
jsbillings

7

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

Наскільки я можу сказати, світове виконання дозволу на / usr / bin / su - єдиний шлях для користувачів, які намагаються отримати root на моєму сервері.

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


1

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

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

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


-2

Інші відповіді правильні: "su" дозволяє вам увійти до інших облікових записів, крім root.

Хоча одна примітка про "sudo su". Це фактично дозволяє увійти до кореневого облікового запису, не знаючи пароля root. Ви повинні знати пароль облікового запису, з яким ви запускаєте sudo, а також мати його у файлі sudoers.


3
Це повністю залежить від того, sudoersє targetpwчи rootpwвстановлений.
муру

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