Форум русскоязычного сообщества Ubuntu


Автор Тема: взаимодействие двух процессов запущенных разными юзерами  (Прочитано 648 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн NWH

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
 Hi All!

 Возникла задача и для ее решения не хватает основных знаний о Linux.

 Задача:
 
 Есть Приложение запущенное пользователем user.
 Этим приложением можно управлять консольными командами из под user`а. Все работает.

 На этой же машине есть  веб сервер.
 
 Нужно управлять Приложением через веб сервер используя команду php system("консольная команда для Приложения");
 Т.е. сделать такой веб интерфейс управления Приложением  :)
 
 И вот тут начинаются проблемы из-за того, что Приложение запущено пользователем user, а к нему лезет какой-то веб сервер.

 По моим представлениям веб серверу не хватает прав доступа для реализации поставленной ему задачи :) А как эти права назначить - вот тут и проявляет себя нехватка знаний о Linux.

 Сама команда php system работает. Проверял на system('ls',$output). В $output результат работы system.

 Все дело работает под ubuntu 10.04.

 Подскажите, что здесь можно сделать. Спасибо.
 

 

Оффлайн drako

  • Старожил
  • *
  • Сообщений: 1422
    • Просмотр профиля
Создать virtualhost для вебморды и запускать его от имени user.

Оффлайн NWH

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Создать virtualhost для вебморды и запускать его от имени user.

 А можно по-подробнее...
 Вы предлагаете веб серверу дать права user'a или как?

 Я думаю мою задачу можно сформулировать так:
 Веб серверу нужно запустить Приложение от имени user'a. И с окружением user'a.

Оффлайн drako

  • Старожил
  • *
  • Сообщений: 1422
    • Просмотр профиля
А можно по-подробнее...
 Вы предлагаете веб серверу дать права user'a или как?
Подробнее - это уже конфиг виртуалхоста за вас написать. Ну и права я предлагаю не все веб-серверу давать, а только той части, что за веб-морду приложения отвечает.

Оффлайн NWH

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
А можно по-подробнее...
 Вы предлагаете веб серверу дать права user'a или как?
Подробнее - это уже конфиг виртуалхоста за вас написать. Ну и права я предлагаю не все веб-серверу давать, а только той части, что за веб-морду приложения отвечает.

 Тогда начнем с азов.
 Что такое "виртуалхост"? У меня это ассоциируется с virtual host в apache :) но вы-то имеете в виду что-то другое. Что это?
 Что такое "веб-морда"? Апач и пхп примерно предсталяю себе что это такое, а "веб-морду" не знаю. Может вы имели в виду: "веб-морда"  - это пхп файл, в котором прописана та самая функция system()?
 
Цитировать
и права я предлагаю не все веб-серверу давать
- я думаю надо сделать user'a и пользователя www-data одним и тем же пользователем, но совершенно не представляю как... Т.е. чтобы Приложение не понимало (не могло различить), кто им командует веб сервер или user.


Оффлайн Zloy1

  • Активист
  • *
  • Сообщений: 261
    • Просмотр профиля
назначьте вашему приложению (назовем его /usr/local/bin/my_application) права на запуск любым пользователем.
sudo chmod a+x /usr/local/bin/my_application

Оффлайн drako

  • Старожил
  • *
  • Сообщений: 1422
    • Просмотр профиля
Что такое "виртуалхост"? У меня это ассоциируется с virtual host в apache :) но вы-то имеете в виду что-то другое. Что это?
Именно то что у Вас ассоциируется я и подразумевал.
Может вы имели в виду: "веб-морда"  - это пхп файл, в котором прописана та самая функция system()?
Именно это и есть веб-морда ;)
я думаю надо сделать user'a и пользователя www-data одним и тем же пользователем, но совершенно не представляю как...
В апаче есть диррективы user и group - позволяют запускать как весь сервер, так и отдельный виртуалхосты от имени нужного пользователя\группы.

Оффлайн NWH

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
назначьте вашему приложению (назовем его /usr/local/bin/my_application) права на запуск любым пользователем.
sudo chmod a+x /usr/local/bin/my_application

 Мне кажется вы несколько не поняли ситуацию.
 Приложение запустил userA. И надо чтобы userB управлял уже запущенным userA приложением. Причем userB это веб сервер.

Оффлайн Zloy1

  • Активист
  • *
  • Сообщений: 261
    • Просмотр профиля
да нет, вроде так все я и понял ) Почему вы решили, что я не так понял?

Вы из консоли как юзер Б управлять приложением, запущенным пользователем А можете или нет? На права ругается или нет?
Если нет, то в чем проблема? Каковы симптомы?


Пользователь решил продолжить мысль 19 Декабрь 2011, 19:09:58:
Этим приложением можно управлять консольными командами из под user`а.
консольными командами или нажатиями на клавиатуру?
« Последнее редактирование: 19 Декабрь 2011, 19:09:58 от Zloy1 »

Оффлайн NWH

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
да нет, вроде так все я и понял ) Почему вы решили, что я не так понял?

Вы из консоли как юзер Б управлять приложением, запущенным пользователем А можете или нет? На права ругается или нет?
Если нет, то в чем проблема? Каковы симптомы?


Пользователь решил продолжить мысль 19 Декабрь 2011, 19:09:58:
Этим приложением можно управлять консольными командами из под user`а.
консольными командами или нажатиями на клавиатуру?

 Да поняли задачу вы правильно :)

"Вы из консоли как юзер Б управлять приложением, запущенным пользователем А можете или нет?" - честно говоря не могу проверить. UserB это веб сервер. Точнее пхп команда system ('консольная команда',$output). После исполнения в output содержится "1" и все. Основное приложение не реагирует. Что именно ему не нравится я точно не знаю. У меня были предположения что или не хватает прав или не правильные настройки окружения...

 В консоле из под userB получалось управлять процессом, запущенным userA, вот так: su - userA "консольная команда"
 Надо чтобы точно так же сработал веб сервер, но без запроса пароля userA.

"консольными командами или нажатиями на клавиатуру?" - не совсем понял вопрос. Я набираю команду в консоле, а приложение запущенное в другом окне, на эту команду реагирует.

Оффлайн Zloy1

  • Активист
  • *
  • Сообщений: 261
    • Просмотр профиля
ну так дайте права всем запускать ваше приложение как я уже написал. Что выходит?

Оффлайн NWH

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
ну так дайте права всем запускать ваше приложение как я уже написал. Что выходит?

 Если юзерА запустил приложение, а юзерБ пытается посылать консольные команды (не через su - ) то операционка или сами консольные команды пытаются найти приложение в окружении юзераБ, а его там нет...

Как-то так, к сожалению более детально объяснить не могу ибо полный нуб в этом деле.

Пользователь решил продолжить мысль 19 Декабрь 2011, 20:39:40:
В апаче есть диррективы user и group - позволяют запускать как весь сервер, так и отдельный виртуалхосты от имени нужного пользователя\группы.

 Я пока не освоил апач до такой степени  :-[ уже час мучаю гугл на эту тему, материала много, но результата нет.
 
 
 Мне надо чтобы скрипт /var/www/index.php запускался с правами userа, а не с правами www-data.
 
 Я уже в /etc/apache2/envvars уже пытался прописать export APACHE_RUN_USER=user, но толку не было. Подскажите плиз в каком конфиге это надо прописать.


 Родилась мысль:  иметь второй веб сервер, который запускает сам юзер, и юзер же запускает и само Приложение. И тогда по идее у веб сервера должны быть теже привелегии что и у юзера....
« Последнее редактирование: 19 Декабрь 2011, 21:09:13 от NWH »

Оффлайн drako

  • Старожил
  • *
  • Сообщений: 1422
    • Просмотр профиля
Тогда давайте смотреть что и где у нас.
cat /etc/apache2/envvars | grep -i user -A1
cat /etc/apache2/apache2.conf | grep -i group -B1
ps aux | grep apache2
Это все сюда.

Оффлайн Zloy1

  • Активист
  • *
  • Сообщений: 261
    • Просмотр профиля
Если юзерА запустил приложение, а юзерБ пытается посылать консольные команды (не через su - ) то операционка или сами консольные команды пытаются найти приложение в окружении юзераБ, а его там нет...

Так в system() надо указывать полный путь к приложению, чтобы операционке не приходилось искать его. Чтобы узнать полный путь, выполните which my_application И еще надо убедиться, что все каталоги, в полном пути к приложению доступны для чтения. Для этого можно попробовать например запустить его от юзераБ.

su - юзерБ /полный/путь/к/приложению/my_application
если запустится, то доступ есть.
« Последнее редактирование: 19 Декабрь 2011, 22:57:09 от Zloy1 »

Оффлайн NWH

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
 48 часов мучений дали итог: через "торпедный аппарат" задача была решена.

 Задача свелась к такой задаче: "запустить php скрипт с кодом system("консольная команда") от имени user'a, запустившего Приложение".
 Уважаемая публика толкала к варианту реализации apacha c правами user'a. Я упирался как мог, т.к. плохо себе представлял всю картину и суть(!) необходимых манипуляций.
 Я решил задачу так: php скрипт вместо исполнения system("консольная команда") создает в папке /home/user/ какой-то файл, например do_it.txt.
 Cron (от имени user'a) каждую минуту проверяет наличие этого файла и если файл есть, то реализует консольную команду (от имени user'a - как мы и хотели) и удаляет файл do_it.txt.

 Вот и все  ;)

 PS drako, Zloy1 - спасибо за помощь!!!

 


 

Страница сгенерирована за 0.086 секунд. Запросов: 25.