LINUX.ORG.RU
ФорумAdmin

выключить комп через терминал(shutdown) без sudo. как ?


0

2

приветствую. пишу для себя программку для выключения/перезагрузки системы по таймеру(аналог EasyShutdown под linux), ребутить систему решил через библиотеку subprocess(python) которая запускает скрипты bash в python'e, но не знаю как сделать, что бы можно было перезагрузить машину без su/sudo.

спасибо



Последнее исправление: barysevich (всего исправлений: 1)

Можно через dbus и ConsoleKit

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

Hjorn
()
Ответ на: комментарий от Hjorn

Проще через судов, а если серьёзно то добавить пользователя в группу, не помню какую так как нет возможности проверить

CHIPOK ★★★
()
Ответ на: комментарий от CHIPOK

этот вариант не катит, надо что бы программа запускалась «с коробки» на разных машинах, а не только у меня.

barysevich
() автор топика
Ответ на: комментарий от anonymous

нее, ты не так понял :) просто что бы программка работала на разных компьютерах(под разными учетными записями), а не только у меня(потому-что я прописал права доступа)

barysevich
() автор топика
Ответ на: комментарий от barysevich

ConsoleKit - это такой демон, обслуживащий пользовательские сессии. Им можно управлять через dbus. Только вот его вроде выпиливают сейчас повсюду. Если у тебя systemd, то фокус не прокатит. Может заглянут знатоки и подскажут, как это сделать через logind.

Hjorn
()
Ответ на: комментарий от snaf

да, прочитал о ConsoleKit так там в разных версиях может по разному себя вести, bash не катит, т.к. это будет аплет для unity с менюшками на Gtk, даже не знаю как быть, хотелось бы универсальность программки, что бы под разными версиями запускался системы/пакетов.

barysevich
() автор топика

Вроде бы с правами надо разбираться через polkit.

risenshnobel ★★★
()
Ответ на: комментарий от LongLiveUbuntu

Стрёмно как-то давать беспарольный sudo даже на одну команду. Хотя может это паранойя... Но всё равно ТСу это не подходит.

Hjorn
()

если ты делаешь утилиту для других людей, утилиту (работающую «из коробки») для которой нужны повышенные привелегии, такие как «вылючение компьютера» или «стереть все файлы из /home/» (шутка) — то просто укажи в документации к утилите это требование...

...мол — «запускайте от root или через sudo».

второй вариант: раздели свою утилиту на две слабосвязанные части. одна часть это сервисный-юнит (запускаемый через systemd и висящий в системе постоянно), а вторая часть это клиентская часть. клиентская часть — будет связываться со своей серверной частью через dBus, например.

кстати, во втором варианте — я разумеется вижу угрозу безопасности (так как кроме именно твоей программы — связаться с серверной частью сможет также и программа злоумышленника, которая не имеет повышенных полномочий).

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 2)
Ответ на: комментарий от barysevich

спасибо, буду пробовать, хотя не до конца понимаю что это за кусок кода.

Тогда уж не вызывать bash из python только для того, чтобы дернуть dbus-send, а использовать dbus-python.

dexpl ★★★★★
()
Ответ на: комментарий от Hjorn

Если systemd, то всё просто

poweroff или systemctl poweroff. По дефолту разрешения таковы, что единственный активный пользователь сможет вырубить машину без получения прав суперпользователя.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от user_id_68054

В случае с systemd такой демон уже написали и называется он logind :)

intelfx ★★★★★
()
Ответ на: комментарий от kernelpanic

$ ls -l /sbin/reboot
lrwxrwxrwx 1 root root 14 Aug 21 01:23 /sbin/reboot -> /bin/systemctl

sdio ★★★★★
()

Как в старые добрые времена - аккаунт с /sbin/shutdown вместо шела.

ssh shutdown@localhost по ключу

vel ★★★★★
()
Ответ на: комментарий от vel

Как в старые добрые времена - аккаунт с /sbin/shutdown вместо шела.

Что за времена?!
shutdown без указания времени не работает и по умолчанию не выключает, а выходит в root-шелл.

arson ★★★★★
()
Ответ на: комментарий от arson

90-х

Прикольно было - юзер shutdown без пароля. Только тогда сети небыло и сказать это можно было только с консоли, куда всех кого попало не пускали.

vel ★★★★★
()

Поставь на /sbin/halt SUID-бит. А если нужно только одному разрешить, то как выше советовали: NOPASSWORD. Скажем, я так сделал:

# в /etc/sudoers
eddy ALL=(ALL) NOPASSWD: /sbin/poweroff

# в ~/.bashrc
alias poweroff='sudo /sbin/poweroff'

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от vel

90-х

Что-то ты путаешь, это или не linux, или не shutdown. Насколько помню, Redhat 5.0 (98г.) такое же поведение. Может первая слака так себя вела :)

arson ★★★★★
()
Ответ на: комментарий от arson

не линукс и не x86. консоль-терминал через rs-232.

какая-то древняя AT&T SysV R3.

vel ★★★★★
()
Ответ на: комментарий от Eddy_Em

поделись методикой

В CentOS <7 shutdown now выбрасывает в root-shell без пароля.

P.S. Попробовал Debian в виртуалке, пароль спрашивает. А в CentOS 7 (systemd) выключает и даже без now! Команда одна, действия разные, черт знает что ;)

arson ★★★★★
()

Если комп в прямой видимости - то можно попробовать удаленно ботинком выключить :)

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

aeX1pu2b
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.