rootアクセスを必要とするコマンドを使用して、root以外のユーザーにスクリプトを実行させる最善の方法は何ですか?

rootアクセスを必要とするコマンドを使用して、root以外のユーザーにスクリプトを実行させる最善の方法は何ですか?

www-dataユーザーとして実行するためにPHPによって実行されるスクリプトがあります。スクリプトはとても簡単です。既定では、事前に作成されたいくつかのファイル(ホストやインタフェースファイルなど)を正しいディレクトリにコピーします。一部の権限などを更新することもできます。

新しいユーザーを作成し、そのユーザーに次のコマンドを介して必要なコマンドへのアクセスを許可することがvisudo効果的であると思います。

  1. ユーザーにはまだ.shパスワードを入力するように求められます。
  2. 明らかに、テストユーザーに権限を付与しません。

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'
  1. 次のユーザーだけが書き込むパスにスクリプトを配置します。root
  2. sudoこのような権限を作成してください。

    www-data ALL= NOPASSWD:/path/to/script.sh
    
  3. www-data次のようにスクリプトを呼び出します。

    sudo /path/to/script.sh
    

おすすめ記事