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 ★★★★★
()
su - -c "shutdown -h now"

Хотя лучше все же sudo с nopasswd.

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

Поставь на /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 ★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.