Як зробити так, щоб / sbin / shutdown, / sbin / reboot тощо вимагали знову судо в 16.04?


18

З якої - то причини ми не робимо більше не потрібно бути корінь (або з допомогою sudo) для запуску /sbin/shutdown, і /sbin/rebootт.д.

Це, мабуть, тому, що ті виконувані файли тепер є посиланнями, на /bin/systemctlякі обробляє все як звичайний користувач.

Однак що робити, якщо я хочу shutdownі rebootзнову вимагати автентифікацію root? Як я можу цього досягти?


3
Я б здогадався, що правила polkit. Змініть askubuntu.com/a/570969/158442 відповідно до потреби (використовуйте pkaction | grep login1для інших правил, що цікавлять)
muru

3
(приклад правил для вимагання прав адміністратора: askubuntu.com/a/744094/158442 )
muru

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

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

Відповіді:


5

Systemd дійсно обробляти shutdown, rebootі інші команди, і привілеї за замовчуванням , призначені поблажливі. Щоб змінити це, вам потрібно створити правило Polkit. Створіть .pklaфайл у /etc/polkit-1/localauthority/50-local.d(скажімо, confirm-shutdown.pkla), що містить:

[Confirm shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.*
ResultActive=auth_admin_keep

Різна вимикання, перезавантаження і т.д. команда, з точки зору Polkit, дії в org.freedesktop.login1, наприклад, org.freedesktop.login1.power-off, org.freedesktop.login1.rebootі т.д. Проблема конкретної тут є конфігурація за замовчуванням, яка знаходиться в /usr/share/polkit-1/actions/org.freedesktop.login1.policy:

<action id="org.freedesktop.login1.power-off">
        <description>Power off the system</description>
        ...
        <defaults>
                <allow_any>auth_admin_keep</allow_any>
                <allow_inactive>auth_admin_keep</allow_inactive>
                <allow_active>yes</allow_active>
        </defaults>

Зауважте, що це дозволяє активному користувачеві вимкнути, перезавантажити тощо.


0

Ви можете використовувати chmodкоманду.

  • Якщо ви хочете надати доступ лише до кореня, ви можете написати:

    chmod 700 directory/to/the/file
    
  • Якщо ви хочете надати дозвіл кореню та групі судо, ви можете написати:

    chmod 770 directory/to/the/file
    
  • Якщо ви хочете змінити групу файлу з sudo на іншу (наприклад, користувача або адміністратора), вам потрібно ввести:

    chown owner:group directory/to/the/file
    
  • Якщо ви хочете повернути назад, запустіть:

    chown root:sudo filedirectory 
    

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


Зауважте, що спроба зміни дозволів посилання змінить дозволи цілі (у цьому випадку /bin/systemctl), тому запуск chmod / sbin / shutdown вплине на всі посилання, які вказують на те, /bin/systemctlяк дозволи bin/systemctlбуде змінено, як підтверджено командою $ ll /bin/systemctl -rwx ------ 1 корінь кореня 659848 18 січня 16:04 / bin / systemctl *
Старійшина Geek

Якщо вам потрібно змінити його, дозволом за замовчуванням є-rwxr-xr-x 1 root root 659848 Jan 18 16:04 /bin/systemctl
Старійшина Гек

0

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

Ще один пов’язаний пост можна знайти тут


-1

Ви можете зробити скрипт, який перевіряє, чи користувач виконує його з дозволами root або ні.
Тоді вона виконає команду systemctl або поверне помилку.

#! / бін / баш
if ["$ (whoami)"! = "root"]; потім
    echo "Вибачте, ви не root".
    вихід 1
ще
    (команда відключення systemctl)
фі

Джерело


4
Що не дозволяє користувачеві, котрий не має права root, просто обійти цей скрипт?
Робі Басак

-1

Спробуйте змінити його дозволи в терміналі. Ви можете зробити його виконуваним лише певною групою, наприклад колесом або адміністратором. На жаль (або, на щастя), файл може мати лише одну групову власність, тому чоун просто не працюватиме сам по собі. Спробуйте "sudo chown root: wheel / sbin / shutdown", а потім "sudo chmod g + x / sbin / shutdown". Це зробить файл виконуваним лише корінцями та адміністраторами (здриганнями), а судодерам потрібно буде ввести свої паролі.


2
Група "колеса" - це справа Arch Linux і, можливо, інших дистрибутивів, але точно не на Ubuntu btw.
Командир байтів

2
Це не ефективно. Користувач може просто завантажити бінарний файл systemctl з іншого місця та запустити його замість цього.
Робі Басак

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