URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 43657
[ Назад ]

Исходное сообщение
"Пользователь с для выключения, для перегрузки"

Отправлено A Clockwork Orange , 06-Май-04 15:54 
Создал /bin/shutdown.sh

#!/bin/sh

/sbin/shutdown -r now

Сделал исполняемым
Создал пользователя, которому в качестве шела дал /bin/shutdown.sh

При регистрации от данного пользователя ничего не происходит. Что пропустил?


Содержание

Сообщения в этом обсуждении
"Пользователь с для выключения, для перегрузки"
Отправлено dev , 06-Май-04 16:09 
а прав у него хватает?


"Пользователь с для выключения, для перегрузки"
Отправлено A Clockwork Orange , 06-Май-04 16:33 
>а прав у него хватает?


Все скрипты должны быть в группе оператор (которой принадлежит сам shutdown) и пользователь должен быть в группе оператор.


"Пользователь с для выключения, для перегрузки"
Отправлено lavr , 06-Май-04 17:33 
>>а прав у него хватает?
>
>
>Все скрипты должны быть в группе оператор (которой принадлежит сам shutdown) и
>пользователь должен быть в группе оператор.

смотрим shutdown:

bash-2.05a$ uname -rs
OpenBSD 3.1
bash-2.05a$ ls -al /sbin/shutdown
-r-sr-x---  1 root  operator  180224 Aug 21  2002 /sbin/shutdown
bash-2.05a$

видим что в наличии setuid-bit

варианты, либо пользователя которому будет дан shutdown - добавить
в wheel (нехорошо), либо в оператор и setgroupid на shutdown видимо.

И в обоих случаях, в скрипте который в качестве shell'а - выставить
trap'ы чтобы нельзя было прервать выполнение в целях секурити

Голова уже не варит :(

PS. Вобщем, нехорошая затея...


"Пользователь с для выключения, для перегрузки"
Отправлено Дмитрий Ю. Карпов , 06-Май-04 17:52 
> варианты, либо пользователя которому будет дан shutdown - добавить в wheel (нехорошо),

Ну а даже если добавишь - что это даст?

> либо в оператор и setgroupid на shutdown видимо.

Запустить shutdown могут только владелец (root, которому и так всё можно) и члены группы operator; на фига тут SetGID? Просто тот юзер, под которым будет логиниться шатдаунер, :-) д.б. включён в группу operator.


Sergey_A:
> скрипт лежит в /sbin, а шелл в /bin

В данном случае в роли шелла выступает скрипт; т.е. шелл и скрипт - одно и то же, а в /sbin лежит не шелл и не скрипт, а экзешник.

Хотя я бы не стал класть свои файлы в /bin - лучше в /usr/local/sbin.


"Пользователь с для выключения, для перегрузки"
Отправлено Sergey_A , 06-Май-04 18:00 
>Sergey_A:
>> скрипт лежит в /sbin, а шелл в /bin
>
>В данном случае в роли шелла выступает скрипт; т.е. шелл и скрипт
>- одно и то же, а в /sbin лежит не шелл
>и не скрипт, а экзешник.
>
>Хотя я бы не стал класть свои файлы в /bin - лучше
>в /usr/local/sbin.

Мдя, я что-то не туда глянул. Я по ошибке прочитал, что скрипт (в котором команда shutdown) и путь к шеллу (в /etc/passwd) различаются. Сглючил.


"Пользователь с для выключения, для перегрузки"
Отправлено lavr , 06-Май-04 18:03 
>> варианты, либо пользователя которому будет дан shutdown - добавить в wheel (нехорошо),
>
>Ну а даже если добавишь - что это даст?
>
>> либо в оператор и setgroupid на shutdown видимо.
>
>Запустить shutdown могут только владелец (root, которому и так всё можно) и
>члены группы operator; на фига тут SetGID? Просто тот юзер, под
>которым будет логиниться шатдаунер, :-) д.б. включён в группу operator.
>

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

Дима - Thanks за поправки.

>Sergey_A:
>> скрипт лежит в /sbin, а шелл в /bin
>
>В данном случае в роли шелла выступает скрипт; т.е. шелл и скрипт
>- одно и то же, а в /sbin лежит не шелл
>и не скрипт, а экзешник.
>
>Хотя я бы не стал класть свои файлы в /bin - лучше
>в /usr/local/sbin.

не факт, особенно когда /usr отдельная FS, важно помнить и записывать
изменения, я статический bash всегда в корневую FS кладу для single-user
mode например.


"Пользователь с для выключения, для перегрузки"
Отправлено Дмитрий Ю. Карпов , 06-Май-04 19:38 
lavr:
> не факт, особенно когда /usr отдельная FS, важно помнить
> и записывать изменения, я статический bash всегда в корневую FS
> кладу для single-user mode например.

Это же скрипт, просто скрипт; и в Single-User Mode он совершенно не нужен.


A Clockwork Orange:
> скрипт должен принадлежать пользователю shutdown,
> принадлежность его группе operator недостаточно

Ну и что это даст скрипту? Владелец и группа файла со скриптом совершенно не важны - надо лишь чтобы посторонние не могли его заменть.


Amy:
> Плохой способ, несекьюрный!

Ну и чем же он несекьюрный? Что может сделать шатдаунер, кроме как прервать перезагрузку нажатием Ctrl+C?


"Пользователь с для выключения, для перегрузки"
Отправлено A Clockwork Orange , 06-Май-04 18:27 
>> варианты, либо пользователя которому будет дан shutdown - добавить в wheel (нехорошо),
>
>Ну а даже если добавишь - что это даст?
>
>> либо в оператор и setgroupid на shutdown видимо.
>
>Запустить shutdown могут только владелец (root, которому и так всё можно) и
>члены группы operator; на фига тут SetGID? Просто тот юзер, под
>которым будет логиниться шатдаунер, :-) д.б. включён в группу operator.
>
>
>Sergey_A:
>> скрипт лежит в /sbin, а шелл в /bin
>
>В данном случае в роли шелла выступает скрипт; т.е. шелл и скрипт
>- одно и то же, а в /sbin лежит не шелл
>и не скрипт, а экзешник.
>
>Хотя я бы не стал класть свои файлы в /bin - лучше
>в /usr/local/sbin.

скрипт должен принадлежать пользователю shutdown, принадлежность его группе operator недостаточно


"Пользователь с для выключения, для перегрузки"
Отправлено Sergey_A , 06-Май-04 16:20 
>Создал /bin/shutdown.sh
>#!/bin/sh
>/sbin/shutdown -r now
  ^^^^^^

>Сделал исполняемым
>Создал пользователя, которому в качестве
>шела дал /bin/shutdown.sh
                   ^^^^^

>При регистрации от данного пользователя ничего не происходит. Что пропустил?


См. помеченное. Это ты при написании сообщения ошибся или так и есть (скрипт лежит в /sbin, а шелл в /bin) ?


"Пользователь с для выключения, для перегрузки"
Отправлено Amy , 06-Май-04 18:26 
>Создал /bin/shutdown.sh
>
>#!/bin/sh
>
>/sbin/shutdown -r now
>
>Сделал исполняемым
>Создал пользователя, которому в качестве шела дал /bin/shutdown.sh
>
>При регистрации от данного пользователя ничего не происходит. Что пропустил?

Плохой способ, несекьюрный!
Лучше так:
Пользователю shutdown в кач. шелла такой /bin/shutdown.sh:
#!/bin/sh
trap : 1 2 3 15 30 31
: >/home/shutdown/.shutdown.now

Далее из крона, скажем раз в минуту проверяешь наличие файлика /home/shutdown/.shutdown.now и при наличии оного, удаляешь его и делаешь shutdown -r now
Таким образом пользователю shutdown не нужны никакие права, всё круто и секьюрно :)


"Пользователь с для выключения, для перегрузки"
Отправлено A Clockwork Orange , 06-Май-04 19:39 
Не въехал, по подробнее можно?

"Пользователь с для выключения, для перегрузки"
Отправлено yux , 07-Май-04 06:56 
вроде проще сделать в скрипте написать sudo ...



"Пользователь с для выключения, для перегрузки"
Отправлено Amy , 07-Май-04 16:08 
>Не въехал, по подробнее можно?

Всё просто. Скрипт, /bin/shutdown.sh, не делает ничего, кроме создания пустого файла /home/shutdown/.shutdown.now.
trap : заставляет скрипт игнорировать сигналы, чтобы злобный хакер не смог чего-нибудь сделать во время его выполнения.

Дальше в /etc/crontab прописывай строчку, вроде этой:
* * * * *   root   /bin/rm /home/shutdown/.shutdown.now && /sbin/shutdown -r now

Все дела!