Выключите или перезагрузите как обычный пользователь

17

Чтобы запустить команду poweroffили rebootнужно быть суперпользователем. Есть ли в любом случае я могу запустить это как обычный пользователь? Я просто не хочу sudoвводить пароль каждый раз, когда перезагружаюсь или выключаюсь.

Stormvirux
источник
2
Ответ зависит от того, какую систему инициализации использует ваш дистрибутив ... Например, с systemdпомощью активного logindсеанса вы можете перезагрузить компьютер или выключить его без повышенных привилегий при условии, что ни один другой пользователь еще не вошел в систему ...
jasonwryan
@jasonwryan В настоящее время я использую Ubuntu, который systemdпо умолчанию не используется. То есть вы имеете в виду, что другие дистрибутивы, такие как Arch, могут перезагружаться без удаленных привилегий?
Stormvirux
Да: согласно условиям в моем первом комментарии.
Джейсонвриан

Ответы:

22

Я изменил это /etc/sudoersтак, чтобы каждый пользователь, который находится в группе администраторов, мог выполнять следующие команды без запроса пароля.

sudo halt
sudo reboot
sudo poweroff

Вам просто нужно добавить следующие строки в /etc/sudoers

## Admin user group is allowed to execute halt and reboot 
%admin ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff

и добавьте себя в группу администраторов.

Если вы хотите, чтобы это мог сделать только один пользователь, просто удалите %adminи замените его usernameследующим образом

## user is allowed to execute halt and reboot 
stormvirux ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff

Вы можете узнать больше о /etc/sudoersс man sudoersили на онлайн-странице руководства

Рафаэль Аренс
источник
4

Вы также можете создать новый файл под /etc/sudoers.dименем его, как вы хотите (я назвал его 'shutdown'), и поместить следующие строки внутри:

# Allows me to shutdown the system without a password

yourUserName ALL = NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff

Просто измените «yourUserName» на ВАШЕ Имя пользователя и добавьте или удалите команды для использования, лично я использую его только для shutdown. Одним из основных отличий создания определенного файла sudoers.dявляется то, что этот файл будет работать после обновления системы.

Рака
источник
1
Если вы выберете этот подход, убедитесь, что у /etc/sudoersнего есть соответствующая #includeдиректива для чтения файлов /etc/sudoers.d/.
Patricktokeeffe
2

Вы также можете добиться этого с помощью трюка с setuid. Я не знаю, будет ли это работать на всех системах, потому что они иногда игнорируют бит setuid / setgid.

Вы можете указать группу пользователей, которые могут выполнить изменение состояния системы, в моем случае это было adm. Затем добавьте соответствующих пользователей в эту группу.

gpasswd -a $USER adm

Укажите разрешения:

chmod 4550 /usr/bin/reboot

ls -l outpus должен выглядеть так:

-r-sr-x--- 1 root adm 18928 Mar 13  2015 /usr/bin/reboot

После этого вы можете просто набрать:

reboot
hurufu
источник
1

Самое простое решение:

sudo echo $USER >> /etc/shutdown.allow

Тогда вы сможете использовать одну из следующих команд:

shutdown -ah now   // halt
shutdown -ar now   // reboot

В соответствии с man shutdown существует опция -a для использования без полномочий root:

Если shutdownвызывается с аргументом -a (добавьте это к вызову shutdown в / etc / inittab ), он проверяет, присутствует ли файл /etc/shutdown.allow . Затем он сравнивает имена входа в этот файл со списком людей, которые вошли в систему на виртуальной консоли ...

Работает в Debian Linux. И есть ограничение на 32 имени пользователя в /etc/shutdown.allow.

Александр Янчарук
источник
4
Нет такой опции на Fedora, CentOS или RHEL.
fpmurphy
1
Это также не работает для Ubuntu, по крайней мере, это то, что я получаю из документации. Было бы полезно проверить, является ли это функцией только для Debian.
Рафаэль Аренс
Еще не в Ubuntu (18.04) в 2020 году =}
тинк