sudoers を更新した後でも、PHP Web ページで UNIX コマンドが起動しない

StackOverflow https://stackoverflow.com/questions/113728

  •  02-07-2019
  •  | 
  •  

質問

基本的に、php Webページからサービスを再起動しようとしています。

コードは次のとおりです。

<?php
exec ('/usr/bin/sudo /etc/init.d/portmap restart');
?>

しかし、 /var/log/httpd/error_log, 、分かりました

sudoers gid に変更できません:操作は許可されていません

/var/log/messages では、次のようになります。

9 月 22 日 15:01:56 ri カーネル:監査(1222063316.536:777):avc:pid=4851 comm="sh" name="var" dev=dm-0 ino=114241 scontext=root:system_r:httpd_sys_script_t tcontext=system_u:object_r:var_t tclass=dir の { getattr } が拒否されました
9 月 22 日 15:01:56 ri カーネル:監査(1222063316.549:778):avc:pid=4851 comm="sudo" の { setrlimit } が拒否されました scontext=root:system_r:httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass=process
9 月 22 日 15:01:56 ri カーネル:監査(1222063316.565:779):avc:pid=4851 comm="sudo" name="shadow" の { read } が拒否されました dev=dm-0 ino=379669 scontext=root:system_r:httpd_sys_script_t tcontext=system_u:object_r:shadow_t tclass=file
9 月 22 日 15:01:56 ri カーネル:監査(1222063316.568:780):avc:pid=4851 comm="sudo" name="shadow" の { read } が拒否されました dev=dm-0 ino=379669 scontext=root:system_r:httpd_sys_script_t tcontext=system_u:object_r:shadow_t tclass=file
9 月 22 日 15:01:56 ri カーネル:監査(1222063316.571:781):avc:pid=4851 comm="sudo" の { setgid } が拒否されましたcapability=6 scontext=root:system_r:httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass=capability
9 月 22 日 15:01:56 ri カーネル:監査(1222063316.574:782):avc:pid=4851 comm="sudo" の { setuid } が拒否されましたcapability=7 scontext=root:system_r:httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass=capability
9 月 22 日 15:01:56 ri カーネル:監査(1222063316.577:783):avc:pid=4851 comm="sudo" の { setgid } が拒否されましたcapability=6 scontext=root:system_r:httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass=capability

私のvisudoにこれらの行を追加しました

User_Alias WWW=apache

WWW ALL=(すべて) NOPASSWD:ALL

手伝ってくれませんか ?私は何か間違ったことをしているでしょうか?

ご協力いただきありがとうございます、

ティブン

役に立ちましたか?

解決

問題は現時点では sudo にあるのではなく、 SELinux, 、これは (合理的に) HTTPD が root 権限を取得することを拒否するように設定されています。
これを明示的に許可する必要があります (次のように使用できます)。 監査2許可 この場合)、代わりに SELinux を寛容に設定します。私は前者をお勧めします。

他のヒント

発生しているエラーは、SELinux 設定に関連しているようです。それを一時的に無効にしてみるとよいでしょう。

余談ですが、sudo 設定をより制限的に調整することを強くお勧めします。

User_Alias WWW=apache
Cmnd_Alias WEBCMDS=/etc/init.d/portmap
WWW ALL=NOPASSWD: WEBCMDS

最近この問題に遭遇しましたが、上記の受け入れられた回答が役に立ちました。ただし、次の人が私のように時間を費やす必要がないように、同じことを詳しく説明するためにこの回答を投稿したいと思います。

次のリンクのセクション 7 に従ってください。 https://wiki.centos.org/HowTos/SELinux.

grep を実行します httpd_sys_script_t.

基本的な手順は次のとおりです。

# grep httpd_sys_script_t /var/log/audit/audit.log | audit2allow -M httpdallowsudo
# semodule -i httpdallowsudo.pp

これはおそらく、非対話型シェルで sudo を実行しようとしていることが原因です。

Apache ユーザーのメール ログで「sudo」に対して grep を実行すると、次のような内容が見つかる可能性があります。

須藤:申し訳ありませんが、sudo を実行するには tty が必要です

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top