LINUX.ORG.RU
ФорумAdmin

Управление Plesk Panel средствами php


0

0

Plesk панелью можно управлять через командную строку. Чтобы выполнять команды linux через php использую shell_exec.

И вот я пытаю выполнять простую команду для plesk:/usr/local/psa/bin/admin --info

И пишу так: echo shell_exec(«/usr/local/psa/bin/admin --info»);

На что в браузере мне выводится «Unable to read Control Panel configuration file: ». Через ssh интерфейс через пользователя root она работает как положенно.

Насколько я понимаю, это происходит из-за того, что эта команда выполняется с правами пользователя apache а не root. Следовательно нужно дать скрипту права root`a. Я воспользовался командой sudo.

echo shell_exec(«sudo /usr/local/psa/bin/admin --info»);

В браузере ничего не выводится. Настройки в sudo прописал такие: «apache ALL=NOPASSWD: ALL»

И ничего не пашет.


Ответ на: комментарий от Axenic

скорее всего скрипт не может получить доступ к конфигу
напиши скрипт под консоль, который пусти от юзера apache(или www-data)
а в нем сделай это команду
и уже там смотри
полюбому косяк с доступом к файлам

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

можешь еще попробовать через функцию
system(«sudo strace /usr/local/psa/bin/admin --info»);

я абсолютно не помню чем они отличаются

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

Самое что интересное через sudo не получается даже перезагрузить компьютер. Тоесть команда reboot не работает.

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

sudo -u apache sudo strace /usr/local/psa/bin/admin --info

выполни из консоли
вместо apache
поставь юзера от которого работает апачь
и посмотри выхлоп

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

Все равно не работет. А strace что делает? А ты говоришь безопасность... тут хотяб заработало. Мож это особености пользователя apache, поэтому он не может выполнять ряд команд, такие как reboot апример?

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

sudo -u apache sudo /usr/local/psa/bin/admin --info

Вот это из root`a из командной строки заработало

П.С. Из php команда system(«whoami»); выдает apache

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

sudo -u apache sudo whoami sudo -u apache sudo /usr/local/psa/bin/admin --info

Я поставил в настройках sudo NOPASSWW: для пользователя apache Когда убираю, просит пароль, а так нет.

system('sudo whoami'); - нет пароль не просит. Просто выдает apache даже. Но без настройки NOPASSWD ничего не выводит.

П.С. Надеюсь ты понимаешь что все что я пишу с функциями system значит это выполняется в php скрипте, а все что без них в командной строке через ssh

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

попробуй
system('sudo -u root whoami')

П.С. Надеюсь ты понимаешь что все что я пишу с функциями system значит это выполняется в php скрипте, а все что без них в командной строке через ssh


конечно не понимаю, я знаю только что такое телнет и удаленный рабочий стол

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

Поправка: system(«sudo whoami»); Вообще никак не работет. И с настройкой и без неё.



странно, только что у себя сделал, выдал «root»
тоесть все норм...что то у тебя с sudoers

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

попробуй еще

system(«sudo /usr/local/psa/bin/admin --info 2> log.txt»);

и посмотри что будет в файле log.txt

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

>Defaults requiretty


Defaults env_reset
Defaults env_keep = «COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
_XKB_CHARSET XAUTHORITY»


root ALL=(ALL) ALL
apache ALL=NOPASSWD: ALL

Все остальное коментарии. Причем где одна # а где 2.

Странно как-то получается apache не может вообще использовать sudo. Пож он не может использовать псевдоним «sudo» и путь к комане надо указывать от корневой дирректории?

П.С. system(«whoami»); Работает и выдает apache.

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

в таком случае может поможет костыль

создаешь скрипт
info.sh
ложешь его в дире с пхп файлами
в нем пишеш
[code]
#!/bin/sh
sudo /usr/local/psa/bin/admin --info
[/code]

а из php уже вызываешь этот скрипт без судо
мб поможет =)

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

Костыль не помогает. Не хочет sudo из-под апача запускаться. А где находится сама утилита? Мож к ней путь прописать вручную?

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

Да действительно ведь system(«sudo -V»); работает.

Axenic
() автор топика
Ответ на: комментарий от val-amart

Содержание sudoers:

Defaults    requiretty

Defaults    env_reset
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                       LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                       LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                       LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                       LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                       LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                       LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                       _XKB_CHARSET XAUTHORITY"


root    ALL=(ALL)       ALL
apache  ALL=NOPASSWD:   ALL

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

Я что только не перепробывал, но sudo решительно не хоче работать в php.

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

надо правильно задавать вопросы, на ЛОРе всегда найдутся знающие люди, чтобы ответить.
вообще, по правде говоря, system(), тем более с судо, да в пхпшном коде, это просто яро нарываться на неприятности. если ты скажешь, что тебе в надо _в итоге_, то вероятно найдется более правильный путь решения.

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

Мне нужно выполнять команды linux управляющие пользователями plesk panel. Но просто выполнять их в php не получается, нужно с правами администратора. Я думаю сделать скрипт, к которому будет обращаться php скрипт. Я думаю, разместить его в папке с правами 700, но её владелец будет не apache поэтому php скрипт не сможет выполнить скрипты в этой папке. Вот я и думаю, как бы мне посекюрней все сделать. Был бы очень рад услышать варианты.

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