sudoers を更新した後でも、PHP Web ページで UNIX コマンドが起動しない
質問
基本的に、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
手伝ってくれませんか ?私は何か間違ったことをしているでしょうか?
ご協力いただきありがとうございます、
ティブン
他のヒント
発生しているエラーは、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 が必要です