PHP Exec Solaris svcadm - PullRequest
       20

PHP Exec Solaris svcadm

1 голос
/ 18 января 2011

Я пытаюсь выполнить команду svcadm из PHP на компьютере Solaris.

У меня есть следующая функция, в которой на данный момент есть две команды: who и команду svcadm, которые я действительно хочу выполнить.

Мне также известно, что этот код очень небезопасен и никогда не должен быть доступен публично.

private function RestartApacheImmediately(){
    var_dump($this->exec_enabled());
    $output = array();
    $returnvar = "";
    $cmd = 'who 2>&1';
    //$cmd = 'svcadm -v restart apache 2>&1';
    echo $cmd;
    $return = exec($cmd, $output, $returnvar);
    var_dump($output);
    var_dump($return);
    var_dump($returnvar);
}

Когда я выполняю who, я получаю двух пользователей: x и y.

Оба xи y настроены как профили управления службами в / etc / user_attr.

Когда запускается закомментированный $ cmd выше, я получаю следующий вывод в stderr:

svcadm: Could not set restarter_actions/auxiliary_tty property of svc:/network/http:apache: permission denied.

Есть идеи?

РЕДАКТИРОВАТЬ: разрешение было следующим:

Я получил это для работы с помощью метода user_attr, который я описал выше.Однако я обнаружил, что демон httpd работал от имени другого пользователя, а php сообщал о выполнении команды who.Так что это был не х или у, это был з.Я определил это, выполнив простую команду ps -e, когда вошел в систему как root в оболочке.

Ответы [ 2 ]

2 голосов
/ 20 января 2011

Вам нужно добавить auths ( value_authorization ) в манифест SMF в Apache HTTPD, чтобы выполнить изменение значения состояния , как вы можете видеть выше в примере Apache Tomcat.

значение_авторизации должно быть объявлено в / etc / security / auth_attr , например,

# echo "solaris.org.apache.smf.value.tomcat:::Change value of Apache Tomcat::" >> /etc/security/auth_attr
# echo "solaris.org.apache.smf.manage.tomcat:::Manage Apache Tomcat service states::" >> /etc/security/auth_attr

А затем отредактируйте манифест SMF, добавив пользовательский значение_авторизации , сначала в глобальный раздел

<property_group name='general' type='framework'>
        <propval
             name='value_authorization'
             type='astring'
            value='solaris.org.apache.smf.value.tomcat' />
        <propval
            name='action_authorization'
            type='astring'
            value='solaris.org.apache.smf.manage.tomcat' />
</property_group>

А также в разделе методов вам нужно добавить аутентификацию

   <property_group name='tomcat_6' type='application'>
                        <propval name='home' type='astring'
                           value='/opt/www/tomcat-6.0' />
                        <propval name='jvmargs' type='astring'
                           value='-d32 -Xms64m -Xmx128m' />
                        <propval name='java_home' type='astring'
                           value='/usr/java' />
             <propval name='value_authorization' type='astring'
                           value='solaris.org.apache.smf.value.tomcat' />
   </property_group>

У меня есть пример (на испанском языке) в моем блоге, чтобы поместить Apache Tomcat с использованием RBAC и SMF

И в конце вы должны добавить auth к роли или user , выполняющему скрипт

# usermod -A solaris.org.apache.smf.manage.tomcat,solaris.org.apache.smf.value.tomcat webope

или для роли

# rolemod -A solaris.org.apache.smf.manage.tomcat,solaris.org.apache.smf.value.tomcat webope

Надеюсь, это вам поможет,

Urko

1 голос
/ 18 января 2011

Процесс PHP выполняется как пользователь, у которого есть разрешения на выполнение действия svcadm?Я протестировал код, который вы разместили, и получил аналогичный результат, если php работал как обычный пользователь.

/usr/local/bin/php apacherestart.php

, но если я

sudo /usr/local/bin/php apacherestart.php

, он работал нормально для меня и фактически далмне несколько идей о том, что я мог сделать:)

...