www-data ユーザーから root スクリプトを実行する

www-data ユーザーから root スクリプトを実行する

私のApacheサーバーでPHP経由でroot権限を必要とするコマンドを実行するのに問題があります。

  1. ユーザーパスワードを必要としないようにsudoersにコマンドを追加しました。

ビジョン:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path = "/ usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin"

# Host alias specification

# User alias specification
# Cmnd alias specification

# User privilege specification
root ALL = (ALL: ALL) ALL

# Allow members of group sudo to execute any command
% sudo ALL = (ALL: ALL) ALL

# See sudoers (5) for more information on "#include" directives:

#includedir /etc/sudoers.d

www-data ALL = NOPASSWD: / sbin / iw
  1. PHPスクリプトを実行し、返されたエラーも確認してください。
<? php
echo '<pre>';
$ last_line = system ('sudo / sbin / iw wlan0 scan 2> & 1', $ retval);
// Printing additional info
echo '
</pre>
<hr /> Last line of the output: '. $ last_line. '
<hr /> Return value: '. $ retval;
?>

PHPスクリプトが返されます。

sh: 1: sudo: not found

Last line of the output: sh: 1: sudo: not found Return value: 127

sudoがインストールされ、他のユーザーが実行している場合は正常に動作します。

whoamiは「www-data」を返すので、ユーザーは大丈夫です。

www-データは次のとおりです。

sudo group

groups www-data
www-data: www-data sudo

ベストアンサー1

まず、この行は完全に間違っています。

www-data ALL = NOPASSWD: / sbin / iw

sudoersファイルを編集したことがある場合は、visudo次のような警告が表示されます(行番号の場合XXX)。

>>> /etc/sudoers: syntax error near line XXX <<<

構文エラーを通知します。実際には次のようになります。

www-data ALL = NOPASSWD: /sbin/iw

しかし、構文を除いて、Webアプリケーションに完全な無制限のアクセス権を与えるのはiw良い考えではないようです。一般的なアプローチは、呼び出し元が期待する1つまたは2つの操作のみを実行し、それ以上は実行しないヘルパースクリプトを作成することです。たとえば、スキャンにのみ興味がある場合は、スクリプトがスキャン以外の操作を実行することを許可しないでください。代わりに、アカウントwww-dataにこのスクリプトに対するroot権限が付与されているため、iw誰かがWebアプリケーションに侵入してもWebサーバーが実行できるすべての操作を実行できます。

第二に、この行も間違っていました。

last_line = system ('sudo / sbin / iw wlan0 scan 2> & 1', $ retval);

なぜこれが意味のある命令だと思うのかよくわかりません。/ sbin / iwこのコマンドを実行するとエラーが発生します。

sudo / sbin / iw wlan0 scan 2> & 1
-bash: syntax error near unexpected token `&'

正しい構文を使用してください。

sudo /sbin/iw wlan0 scan 2>&1

第三に、実行中のホストを指定していませんが、アカウントwww-dataにアクセス権がない可能性があります/usr/bin/sudo。追加情報がないと、この問題を診断するのが難しい場合があります。

おすすめ記事