www-dataユーザーとして実行するためにPHPによって実行されるスクリプトがあります。スクリプトはとても簡単です。既定では、事前に作成されたいくつかのファイル(ホストやインタフェースファイルなど)を正しいディレクトリにコピーします。一部の権限などを更新することもできます。
新しいユーザーを作成し、そのユーザーに次のコマンドを介して必要なコマンドへのアクセスを許可することがvisudo
効果的であると思います。
- ユーザーにはまだ
.sh
パスワードを入力するように求められます。 - 明らかに、テストユーザーに権限を付与しません。
visudo
(実行中はすべての権限が拒否されます./script.sh
)
test ALL=(ALL) NOPASSWD:ALL
test ALL= NOPASSWD:ALL
test ALL=(ALL) NOPASSWD:/bin/cp,/bin/mv,/bin/nano,/bin/chown,/bin/mv
test
ユーザーを自分のログインした実際のユーザーに変更すると機能します。
.sh
ログインしたユーザーが実行するか、www-data
必要な権限を持つ別のユーザーでコマンドを実行しようとします。
#!/bin/bash
sudo -H -u test cp test.txt /etc/test.txt
sudo -H -u test chown test /etc/test.txt
echo "ok"
www-data
ユーザーが権限を必要とするスクリプトを実行できるようにする最善の方法は何ですかroot
?
答え1
見せてくれた部分はsudoers
わかりませんね。
test ALL=(ALL) NOPASSWD:ALL
test ALL= NOPASSWD:ALL
test ALL=(ALL) NOPASSWD:/bin/cp,/bin/mv,/bin/nano,/bin/chown,/bin/mv
行の1つだけが必要で、おそらく最後の行になります。
前のコマンドの終了コードを考慮せずに実行することもecho "ok"
意味がありません。
あなたによると、sudo
このユーザーには権限がありませんwww-data
。
sudo -H -u test cp test.txt /etc/test.txt
ユーザーがtest
できないため、通常のシステムでは意味がありません/etc
。これは、ターゲットファイルが存在し、ユーザー「test」に書き込み権限がある場合にのみ機能します。
ただし、この方法で正常に呼び出すことができるsudo -H -u test chown test /etc/test.txt
唯一のユーザーはrootであるため、これは意味がありません。chown
解決策
私の考えにあなたに必要なのはこれです。台本
#!/bin/bash
cp ~test/test.txt /etc/test.txt &&
chown test /etc/test.txt &&
echo 'ok' || echo 'failure'
- 次のユーザーだけが書き込むパスにスクリプトを配置します。
root
sudo
このような権限を作成してください。www-data ALL= NOPASSWD:/path/to/script.sh
www-data
次のようにスクリプトを呼び出します。sudo /path/to/script.sh