bash не "признаёт" команды останова системы из под рядовых пользователей

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Tir
Сообщения: 24
ОС: Slackware64 13.0

bash не "признаёт" команды останова системы из под рядовых пользователей

Сообщение Tir »

При вызове на Slackware 12.2 из под рядового пользователя (не root-а) halt, reboot, shutdown, poweroff bash ругается, что не знает таких команд. Попробовал добавить соответствующие алиасы в /etc/bashrc. Попутно не обнаружил файла bashrc ни в /etc, ни где бы то ни было ещё на машине. Создал его в /etc, прописал там алиас на reboot

Код: Выделить всё

alias reboot='/sbin/reboot'
Проблема сохранилась.
Увидел, что у рядовых пользователей в отличие от root-а в $PATH нету пути до /sbin. Создал в /usr/bin символьный линк на /sbin/reboot (проверил, чтобы у рядового пользователя в $PATH был прописан /usr/bin). bash по прежнему отказался признавать reboot.
Предположил, что это последствия запрета по умолчанию на останов системы для рядовых пользователей. Прописал в sudoers алиас команд останова системы:

Код: Выделить всё

Cmnd_Alias SHUTDOWN=/sbin/shutdown,/sbin/reboot,/sbin/poweroff,/sbin/halt
Там же выдал права на этот алиас группе power:

Код: Выделить всё

%power ALL=(ALL) NOPASSWD: SHUTDOWN
Попутно добавил соответствующие алиасы в /etc/bashrc:

Код: Выделить всё

alias reboot='sudo /sbin/reboot'
alias poweroff='sudo /sbin/poweroff'
alias halt='sudo /sbin/halt'
alias shutdown='sudo /sbin/shutdown'
Проблема осталась.
Дальше фантазия закончилась. В чём может быть проблема?
Спасибо сказали:
Аватара пользователя
grouzen
Сообщения: 120
ОС: LFS, slackware

Re: bash не "признаёт" команды останова системы из под рядовых пользователей

Сообщение grouzen »

дать команду через полный путь пробовали?
Что говорит /sbin/shutdown --help ?
Спасибо сказали:
Tir
Сообщения: 24
ОС: Slackware64 13.0

Re: bash не "признаёт" команды останова системы из под рядовых пользователей

Сообщение Tir »

grouzen писал(а):
06.05.2009 02:15
дать команду через полный путь пробовали?
Что говорит /sbin/shutdown --help ?

При команде с полным путём bash перестаёт ругатся, что не знает таких команд, и говорит, что нужно быть суперюзером. Т.е. корень моей проблемы не в правах, а именно в том, что bash не видит соответствующих программ в /sbin.
Кроме того, настораживает, что по умолчанию файла /etc/bashrc не существовало, пришлось его создавать самому. Подозреваю, что и после этого bash его не воспринял. Поэтому и прописанные там алиасы не сыграли. Может надо где-то какую-то опцию указать, чтобы bash его зохавал? Или в слаквари файл настроек баша лежит не там/называется по-другому?
Спасибо сказали:
Аватара пользователя
(asper
Бывший модератор
Сообщения: 1661
Статус: nano vi sed awk !
ОС: Работает как часы !

Re: bash не "признаёт" команды останова системы из под рядовых пользователей

Сообщение (asper »

Код: Выделить всё

vlad ~  $  cat .bash_profile

...

# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

...


делайте выводы, либо пропишите задание переменной окружающей среды PATH непосредственно в .bash_profile

Ещё один вариант:
пропишите значения PATH прямо в /etc/profile
Сомнительно доброе привидение
Спасибо сказали:
Аватара пользователя
grouzen
Сообщения: 120
ОС: LFS, slackware

Re: bash не "признаёт" команды останова системы из под рядовых пользователей

Сообщение grouzen »

Таки советую осилить sudo, или выключать машину из под root'a.
Спасибо сказали:
Tir
Сообщения: 24
ОС: Slackware64 13.0

Re: bash не "признаёт" команды останова системы из под рядовых пользователей

Сообщение Tir »

(asper писал(а):
06.05.2009 17:18

Код: Выделить всё

vlad ~  $  cat .bash_profile

...

# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

...

делайте выводы, либо пропишите задание переменной окружающей среды PATH непосредственно в .bash_profile

Ещё один вариант:
пропишите значения PATH прямо в /etc/profile

Ну это относится, я так понимаю, к .bashrc, который свой у каждого пользователя и лежит у каждого пользователя в домашней папке. Я же хотел создать через bashrc алиасы для всех пользователей через редактирование bashrc, который в /etc/ лежит. Точнее должен лежать, но в моём случае его почему то там не оказалось. Аналогично насчёт .bash_profile. Менять каждому пользователю персональные настройки в данном случае ИМХО не кошерно. Кошерно ИМХО поменять общие настройки. Вот только никак не соображу, как это сделать. Писать в $PATH путь до /sbin/ тоже не хочется, ибо тогда всем станут доступны все программы, которые там лежат (какая-никакая, а защита от дурака). Оптимальный вариант в данном случае ИМХО алиас. Осталось только сообразить куда его написать :)

grouzen писал(а):
06.05.2009 23:10
Таки советую осилить sudo, или выключать машину из под root'a.

Причём тут sudo? Как может сыграть sudo, если bash не знает какую команду через него выполнять? Я ещё раз повторяю: проблема не в недостатке прав - при этом bash сообщает, что для выполнения команды необходимо быть суперюзером. В моём же случае bash ругается, что не знает таких команд, как reboot, poweroff и т.д. И sudo никак не может помочь bash-у "узнать" эти команды. Оно может помочь разве что выполнить эти команды, когда bash их уже "знает".
Спасибо сказали:
Аватара пользователя
grouzen
Сообщения: 120
ОС: LFS, slackware

Re: bash не "признаёт" команды останова системы из под рядовых пользователей

Сообщение grouzen »

Tir писал(а):
07.05.2009 12:22
Причём тут sudo? Как может сыграть sudo, если bash не знает какую команду через него выполнять? Я ещё раз повторяю: проблема не в недостатке прав - при этом bash сообщает, что для выполнения команды необходимо быть суперюзером. В моём же случае bash ругается, что не знает таких команд, как reboot, poweroff и т.д. И sudo никак не может помочь bash-у "узнать" эти команды. Оно может помочь разве что выполнить эти команды, когда bash их уже "знает".

Щито? P_P осильте таки man sudo, или хотя бы погуглите, чтоб не нести такую чушь.
По порядку. Когда вы пытаетесь запустить программу , лежающюю в /sbin, баш естественно о ней не знает, потому что не ищет ее там. Но вот вы догадались запустить программу через полный путь, но тут опять загвоздка - большинство программ лежащих в /sbin проверяют euid (эффективный идентификатор пользователя), который у вас равняется реальному (uid). Это можно обойти либо поставив suid бит на файл программы, либо запустив через sudo из под рута.
Спасибо сказали:
Tir
Сообщения: 24
ОС: Slackware64 13.0

Re: bash не "признаёт" команды останова системы из под рядовых пользователей

Сообщение Tir »

grouzen писал(а):
07.05.2009 13:53
Щито? P_P осильте таки man sudo, или хотя бы погуглите, чтоб не нести такую чушь.
По порядку. Когда вы пытаетесь запустить программу , лежающюю в /sbin, баш естественно о ней не знает, потому что не ищет ее там. Но вот вы догадались запустить программу через полный путь, но тут опять загвоздка - большинство программ лежащих в /sbin проверяют euid (эффективный идентификатор пользователя), который у вас равняется реальному (uid). Это можно обойти либо поставив suid бит на файл программы, либо запустив через sudo из под рута.

Вы хотя бы для разнообразия читаете, что вам пишут? Ну хотя бы каждый второй пост? man sudo я читал. И судя по всему получше вашего, раз понимаю, что sudo не спасёт от того, что
баш естественно о ней не знает, потому что не ищет ее там
Или вы про man sudo упомянули просто чтобы на умняк выпасть? Собственно, вы сами указали 2 проблемы, которые могут возникнуть при попытке останова системы из-под обычного пользователя:
  • bash не знает про команды останова, т.к. не знает про программы лежащие в /sbin/
  • у обычного пользователя нету прав на выполнение этих программ

Первая проблема решается созданием алиасов/добавлением соответствующих путей в $PATH/и т.д. Через sudo как раз решается вторая проблема.
Я вам в предыдущем своём посте писал, что судя по сообщениям баша он для начала не может найти эти программы. Т.е. права тут не причём (пока). Права будут причём когда баш таки найдёт эти программы и попытается запустить. Т.е. это как раз первая из двух вышеуказанных проблем. В ответ вы начинаете мне петь про man sudo. И кто после этого несёт чушь?

По теме
Раскурка стартовых скриптов баша показала, что алиасы в /etc/bashrc не помогают по одной простой причине - они не создаются. А не создаются они потому что /etc/bashrc нигде в ходе запуска bash-а не вызывается. Соотетственно проблему решил следующим образом: создал скрипт, создающий соответствующие алиасы и положил его в /etc/profile.d/. Алиасы естественно делал с вызовом через sudo:

Код: Выделить всё

...
alias reboot='sudo /sbin/reboot/'
...
В sudoers оставил разрешения на выполнение этих команд для членов группы power, как указано в первом посте.
Проблема решена. Тему можно закрывать.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: bash не "признаёт" команды останова системы из под рядовых пользователей

Сообщение SLEDopit »

Tir писал(а):
07.05.2009 16:13
1. bash не знает про команды останова, т.к. не знает про программы лежащие в /sbin/
2. у обычного пользователя нету прав на выполнение этих программ

Код:

[16:55]note:~ $ ifconfig bash: ifconfig: команда не найдена [16:55]note:~ $ sudo ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:38 errors:0 dropped:0 overruns:0 frame:0 TX packets:38 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2984 (2.9 KiB) TX bytes:2984 (2.9 KiB) wlan0 Link encap:Ethernet HWaddr 00:1c:bf:54:ae:66 inet addr:192.168.1.63 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::21c:bfff:fe54:ae66/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:777933 errors:0 dropped:0 overruns:0 frame:0 TX packets:472017 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1140888116 (1.0 GiB) TX bytes:42762823 (40.7 MiB) [17:02]note:~ $ sudo ifconfig eth1 up [17:02]note:~ $ sudo ifconfig eth1 Link encap:Ethernet HWaddr 00:1e:33:07:9c:c7 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:17 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:38 errors:0 dropped:0 overruns:0 frame:0 TX packets:38 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2984 (2.9 KiB) TX bytes:2984 (2.9 KiB) wlan0 Link encap:Ethernet HWaddr 00:1c:bf:54:ae:66 inet addr:192.168.1.63 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::21c:bfff:fe54:ae66/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:840010 errors:0 dropped:0 overruns:0 frame:0 TX packets:510451 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1233716735 (1.1 GiB) TX bytes:46237874 (44.0 MiB) [17:03]note:~ $ /sbin/ifconfig eth1 down SIOCSIFFLAGS: Отказано в доступе ##часть судоерса и никаких извращений с алиасами User_Alias EXAMPLE = user Host_Alias LOCAL = localhost,note Cmnd_Alias NET = /sbin/ifconfig EXAMPLE LOCAL = NOPASSWD: NET
вы прежде чем так безосновательно выдвигать обвинения лучше бы разобрались получше.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали: