Автор Тема: Остановка компьютера user'ом через терминал [избитая тема]  (Прочитано 1281 раз)

Оффлайн Пурпур

  • Завсегдатай
  • *
  • Сообщений: 131
    • Email
Здравствуйте. Я прочел на форуме несколько тем, посвященных вопросу, но до конца не разобрался. Поэтому хочу спросить еще, на своем русском:

Можно ли из под user'а остановить компьютер в терминале, к примеру, если выдать юзеру право на выполнение одной команды shutdown? К примеру, в одной из тем предлагают такой вариант: запуск visudo; добавление строки: myuser  ALL=NOPASSWD:/моя_команда .

Схожим образом можно решить проблему? Можно ли давать юзеру право на выполнение какой-то конкретной команды, т.е. не добавляя его в специальные группы и т.п.?

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
В системах на SysV этой фиче сто лет в обед :-)
$ rpm -q SysVinit-usermode
SysVinit-usermode-1.5-alt2.noarch
$ rpm -qvl SysVinit-usermode | grep bin/
lrwxrwxrwx    1 root    root                        6 апр 25  2008 /usr/bin/halt -> reboot
lrwxrwxrwx    1 root    root                        6 апр 25  2008 /usr/bin/poweroff -> reboot
lrwxrwxrwx    1 root    root                       29 апр 25  2008 /usr/bin/reboot -> /usr/lib/consolehelper/helper
$ rpm -q --changelog SysVinit-usermode | tail -n 3
* Ср ноя 14 2001 Dmitry V. Levin <ldv@alt-linux.org> 1:1.0-alt1
- Created from SysVinit-usermode subpackage.

$ rpm -q --changelog SysVinit-usermode | tail -n 3
* Ср ноя 14 2001 Dmitry V. Levin <ldv@alt-linux.org> 1:1.0-alt1
- Created from SysVinit-usermode subpackage.

В образ p9-xfce-sysv этот пакет не входит, но может быть включён в его состав.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
При установленном пакете SysVinit-usermode в систему на sysvinit, команды halt poweroff reboot могут выполняться от любого пользователя. Наличие пользователя в какой-либо группе не требуется.

Оффлайн Пурпур

  • Завсегдатай
  • *
  • Сообщений: 131
    • Email
Спасибо, попробую. А указанный способ, с добавлением строк по visudo не жизнеспособен? Просто для общего развития интересуюсь.

Оффлайн Пурпур

  • Завсегдатай
  • *
  • Сообщений: 131
    • Email
Выключение компьютера через терминал оказалось проще, чем я думал. У меня файлы команд выключения находятся не в /bin, а в /sbin. Простая команда выключает компьютер:
/sbin/poweroff
В таком случае, правда, не понятно, почему под user'ом не работает команда poweroff. %) Иногда проблема оказывается не в сложности задачи, а в запутанности гиппертекста.

« Последнее редактирование: 18.02.2021 13:43:07 от Пурпур »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Спасибо, попробую. А указанный способ, с добавлением строк по visudo не жизнеспособен? Просто для общего развития интересуюсь.

Жизнеспособен, но потенциально опасен.
По-умолчанию, в альтах, sudo-пользователь, это wheel-пользователь, - группа администраторов:
# control | grep 'sudo '
sudo            wheelonly       (public wheelonly restricted)

В альтах, sudo-команды, по-умолчанию может выполнять только группа wheel.
Логично, что в public эта конфигурация опасна:
ALL ALL=(ALL) ALL

А эта в public предельно опасна:
ALL=(ALL) NOPASSWD: ALL

Не стоит и забывать про умолчаный timestamp, который в альтах 5 минут, а в ubuntu/debian 15 минут. В течении которого, любой локальный пользователь может беспарольно выполнить sudo-команду. Это одна из причин, почему пакет sudo не входит в состав образа pclonuxos, как потенциальная угроза.

Оффлайн Пурпур

  • Завсегдатай
  • *
  • Сообщений: 131
    • Email
Понял, спасибо.

Честно говоря, иногда вся эта политика безопасности кажется очень условной. Потому что команду poweroff выполнять нельзя пользователю, а запустить файл /sbin/poweroff можно. Для меня, обычного пользователя, тут разница в безопасности совсем не очевидна; но, наверное, сис. админу виднее.

В любом случае, спасибо за комментарий. Ваш способ разберу в любом случае.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Честно говоря, иногда вся эта политика безопасности кажется очень условной. Потому что команду poweroff выполнять нельзя пользователю,

Почему нельзя? При установленном SysVinit-usermode в системе на sysvinit, выполнять poweroff можно любым пользователем. Даже без указания пути. Но 99.9%, у вас система на systemd.

Честно говоря, иногда вся эта политика безопасности кажется очень условной.
...
а запустить файл /sbin/poweroff можно.

:-) В альтовых системах на sysvinit, выполнять /sbin/poweroff запрещено в любом случае любому пользователю кроме root. Так что с безопасностью в альтовых системах на sysv всё в порядке.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Иногда проблема оказывается не в сложности задачи, а в запутанности гиппертекста.

Да, в системе на sysv, юзермод довольно хитро:
# rpm -qf /etc/pam.d/reboot /etc/security/console.apps/poweroff
SysVinit-usermode-1.5-alt2.noarch
SysVinit-usermode-1.5-alt2.noarch
# ls -l /etc/pam.d/poweroff
lrwxrwxrwx 1 root root 6 апр 25  2008 /etc/pam.d/poweroff -> reboot
# cat /etc/pam.d/reboot
# cat /etc/security/console.apps/poweroff

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
В X-терминале Xfce также можно выполнить пользователем:
$ xfce4-session-logout --help | tail -12
Параметры приложения:
  -l, --logout             Выходить из системы, не показывая диалог завершения сеанса
  -h, --halt               Выключать компьютер, не показывая диалог завершения сеанса
  -r, --reboot             Перезагружать компьютер, не показывая диалог завершения сеанса
  -s, --suspend            Переходить в ждущий режим, не показывая диалог завершения сеанса
  -i, --hibernate          Переходить в спящий режим, не показывая диалог завершения сеанса
  -b, --hybrid-sleep       Переходить в гибридный спящий режим, не показывая диалог завершения сеанса
  -u, --switch-user        Переключать пользователя, не показывая диалог завершения сеанса
  -f, --fast               Быстрый выход без сохранения сеанса
  -V, --version            Показать информацию о версии и выйти
  --display=ДИСПЛЕЙ        Используемый X-дисплей