LINUX.ORG.RU

Организация удалленной блокировки


0

0

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

Так как я в большей степени веб кодер, а линукс осваиваю недавно, решил организовать следующим образом.

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

пхп скрипт запускает шелл скрипт примерно следующего содержания:

sudo usermod -U user1 sleep ${1}m export DISPLAY=:0.0 gdmflexiserver --startnew sudo usermod -L user1

Локально и под рутом скрипт работает как надо (правда тогда я убираю sudo для usermod) но удаленно работать не хочет

Во первых, ругается что "sorry, you must have tty to run sudo" (как я понял я не нахожусь в tty и не могу запустить судо..а где тогда выполняется скрипт?)

во вторых при запуске gdmflexiserver --startnew, ругается на cannot open display, хотя ведь export делается..

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

Но очень желателньо оставить удаленное управление через браузер...

Попробовал следующие: Установил на скрипт suid бит.. права на файл как положенно стали -rwsrwx--- root apache

Но когда запускаю файл, команда id (я прописал ее в скрипте) все равно возвращает айди апача. тоесть права рута апачь не получает...

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

для того чтобы выполнять команды на удалённой машине есть такая штука как ssh, именно для этого она и предназначена. Можешь сделать что-то вроде

ssh -f root@remote.machine "sleep ${1}m; su -c 'env DISPLAY=:0.0 gdmflexiserver --startnew' user1"

и не надо для этого поднимать целый апач на пользовательской машине (ещё непонятно как ты всё это было бы с точки зрения безопасности). Если очень хочется web-интерфейс — подними его на локальной машине чтобы он запускал ssh.

P.S. так как sleep должен где-то жить — в течение всех ${1} минут соединение с remote.machine будет жить в background.

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

Хммм...я тоже думал о ssh... но поднять на 20 машинах его, настроить ключи... у меня не так мног овремени осталось...хотелось бы все таки скриптом...но думаю если не получиться, попробую ssh...спасибо за идею.

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

> в течение всех ${1} минут соединение с remote.machine будет жить в background

при желании можно отправить sleep в dtach -- тогда только команда будет чуть сложнее, но зато соединение с remote.machine не надо будет держать.

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

"поднимать" надо именно апач, sshd почти везде и так есть по умолчанию. И настраивать на удалённых машинах (кроме запуска sshd) ничего не придётся.

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

хммм действительно...почему я считал, что только ssh клиент стоит по дефолту...все...убиваю апачь, и реализую Вашу идею... Как я понимаю, нужно сгенерить ключи дял ssh, что б не было запроса на пароль и все...

спасибо Вам!

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

>удалленной

>удалленной

>вызовит

>апачь

дальше не искал.

да, и побольше таких веб-кодеров.

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

В графической среде ошибка: Не удалось запустить новый дисплей Не удалось идентифицировать текущий сеанс

В терминале: ** (gdmflexiserver:2292): WARNING **: Unable to determine session: Unable to lookup session information for process '2292' ** (gdmflexiserver:2292): DEBUG: seat id is not set; can't switch sessions

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

К чему придираться к тексту? я такой кодер, какой я есть. Покрайней мере я стараюсь учиться и что то делать, а не искать чужие граматические ошибки. Если Вы не можете мне помочь, пожалуйста не загружайте ветку...

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

Шелл-скрипты не реагируют на suid-бит. Это сделано в целях безопасности.

Так что man sudoers и кастуй апачу право выполнения нужных команд без пароля.

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

я настраивал судо, локально работало а утдаленно нет, говорил что может работат ьтолько на tty...но это уже не важно...решил проблему так:

Работа осуществляется через ssh блокировка и смена пользователя - gnome-screensaver-command -l

все работает. все кто помог - большое спасибо

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

> Не удалось запустить новый дисплей

ну это уже не проблемы ssh, он только команды запускает. За правильностью команд ты должен следить сам. Сначала посмотри на каком там DISPLAY иксы запущены, запущен ли там gdmflexiserver чтобы его перезапускать и т.д. Изначальный вопрос был "как выполнить команду на клиентской машине", а уж какую команду там выполнять -- задавай вопрос в новом топике.

pupok ★★
()

насколько я правильно понял задачу - нужно вывалить пользователя из граф. среды и запустить сизнова авторизацию пользователя (графическую), если это так, то почему бы не: ssh root@remote_machine "/etc/init.d/gdm restart" - для гнома, или ssh root@remote_machine "/etc/init.d/kdm restart" для кед?

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

Нужно было не совсем вывалить, а временно. так что бы все окна и т.д. остались не тронутыми. я все решил с помощью gnome-screensaver-command...

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