Как заставить / sbin / shutdown, / sbin / reboot и т. Д. Снова потребовать sudo в 16.04?

18

По какой-то причине нам больше не нужно быть пользователем root (или использовать sudo) для запуска /sbin/shutdownи /sbin/rebootт. Д.

Это происходит потому, что эти исполняемые файлы теперь являются символическими ссылками, /bin/systemctlкоторые обрабатывают все как обычный пользователь.

Тем не менее, что если я захочу shutdownи rebootснова потребую аутентификацию root? Как мне этого добиться?

Byte Commander
источник
3
Я предполагаю, что правила polkit. Измените askubuntu.com/a/570969/158442 в соответствии с необходимостью (используйте pkaction | grep login1для других правил)
muru
3
(пример правил для требования прав администратора: askubuntu.com/a/744094/158442 )
muru
1
Разве это не единственное, если вы единственный пользователь, вошедший в систему. Если в систему вошел кто-то еще, вас попросят ввести пароль root.
Огнен
Это может быть не тот ответ, который вы ожидаете, но подобное поведение может быть вызвано тем, что другой пользователь-администратор отредактировал ваш / 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команду.

  • Если вы хотите дать доступ только root, вы можете написать:

    chmod 700 directory/to/the/file
    
  • Если вы хотите дать разрешение root и группе sudo, вы можете написать:

    chmod 770 directory/to/the/file
    
  • Если вы хотите изменить группу файла с sudo на другую (например, пользователя или администратора), вам нужно ввести:

    chown owner:group directory/to/the/file
    
  • Если вы хотите вернуться обратно, запустите:

    chown root:sudo filedirectory 
    

Примечание . Возможно, вам придется использовать sudoэти команды или войти в систему с учетной записью root

Якушо
источник
Обратите внимание, что попытка изменить разрешения для ссылки изменит разрешения для цели (в данном случае /bin/systemctl), поэтому запуск chmod / sbin / shutdown повлияет на все ссылки, /bin/systemctlна bin/systemctlкоторые будут изменены разрешения , что подтверждается командой $ ll /bin/systemctl -rwx ------ 1 корневой корень 659848 18 января 16:04 / bin / systemctl *
старший гик
Если вам нужно изменить его обратно, разрешения по умолчанию-rwxr-xr-x 1 root root 659848 Jan 18 16:04 /bin/systemctl
Elder Geek
0

Поскольку изменение разрешений символической ссылки в системе Linux не меняет разрешения ссылки, а вместо этого указывает на файл (по крайней мере, в Ubuntu). Я думаю, что самый безопасный способ сделать это - удалить ссылку и воссоздать ее с требуемым значением umask для получения желаемого результата.

Еще один связанный пост можно найти здесь

Старейшина Гик
источник
-1

Вы можете создать скрипт, который проверяет, запускает ли его пользователь с правами root или нет.
Затем он запустит команду systemctl или вернет ошибку.

#! / Bin / Баш
if ["$ (whoami)"! = "root"]; тогда
    echo "Извините, вы не root."
    выход 1
еще
    (команда выключения systemctl)
фи

Источник

Ven3k
источник
4
Что мешает обычному пользователю просто обойти этот скрипт?
Роби Басак
-1

Попробуйте изменить его разрешения в терминале. Вы можете сделать его исполняемым только определенной группой, такой как wheel или admin. К сожалению (или, возможно, к счастью), файл может иметь только одну групповую собственность, поэтому chown просто не будет работать сам по себе. Попробуйте "sudo chown root: wheel / sbin / shutdown", а затем "sudo chmod g + x / sbin / shutdown". Это сделает файл исполняемым только для пользователя root, и администраторы (вздрагивающие) и sudoers будут обязаны вводить свои пароли.

chevydog
источник
2
Группа "wheel" является частью Arch Linux и, возможно, других дистрибутивов, но определенно не в Ubuntu.
Byte Commander
2
Это не эффективно. Пользователь может просто загрузить бинарный файл systemctl из другого места и запустить его вместо этого.
Роби Басак
@ Роби, ты можешь сделать это с любым решением. Вы могли бы удерживать кнопку питания. Мое решение работает для того, что он просит.
chevydog