一部のコマンドがスーパーユーザー権限で実行されないようにする

一部のコマンドがスーパーユーザー権限で実行されないようにする

私は bash を初めて使います。多くの行とコマンドから成るスクリプトを書きました。これは、いくつかのパッケージを取得してインストールするためのセットアップ ファイルです。その結果、スクリプトでは次のコマンドのように多くのインストール コマンドを使用する必要があります。

sudo apt install python2.7 python-pip

sudoスクリプト内で をあまり使用しないようにするために、sudo各コマンドの前の を削除し、 のようにスクリプトを実行することにしましたsudo ./setup.sh

正常に動作しますが、 やなど、実際にはsudo前にが必要ないコマンドがいくつかあるという問題があります。mkdirwget

を使用してスクリプトを実行するとsudo ./setup.sh、このスクリプトを使用して作成されたディレクトリは、 を使用せずに削除、コピー、または編集することはできませんsudoが、すべてのユーザーがアクセスできるようにしたいと考えていました。したがって、私の質問は次のとおりです。

sudo を使用してスクリプトを実行する場合 ( など)、やなどの内部コマンドの一部をスーパーユーザー権限でsudo ./setup.sh実行しないようにする方法はありますか?mkdirwget

答え1

を使用するとsudo、切り替えるように指示したユーザー (デフォルトでは root) として新しいシェルを起動します。これにより、変数がそのユーザーのユーザー名にsudo設定されます。SUDO_USER

$ cat foo.sh
#!/bin/bash
echo "SUDO_USER: $SUDO_USER"

このスクリプトを私として実行すると、変数が設定されていないため何も表示されません。

$ foo.sh
SUDO_USER: 

しかし、 で実行するとsudo、変数が設定されます。

$ sudo foo.sh
SUDO_USER: terdon

これを念頭に置いて、スクリプトを起動したユーザーのユーザー名を使用して、通常のユーザーとして実行したい特定のコマンドを実行するだけです。したがって、スクリプト内の通常のユーザーとして実行したいその他のコマンドを変更しwgetchmodそれらを で実行して、sudo -u $SUDO_USERroot ではなく通常のユーザーとして実行されるようにします。

apt install python2.7 python-pip ## will run as root
sudo -u $SUDO_USER mkdir foo ## will run as $SUDO_USER

変数を使用すると、SUDO_USER作成するディレクトリとファイルの所有者がスクリプトを起動したユーザーになることが保証され、スクリプトを実行するたびにそのユーザーの名前を明示的にスクリプトに伝える必要がなくなります。

答え2

mkdir によって作成されたディレクトリをすべてのユーザーが使用できるようにするには、 chmod コマンドを使用して、権限を WORLD 読み取り/書き込み可能に変更する必要があります。

スクリプトでは、 を実行した後mkdir、以下のコマンドを使用します。

chmod -R 755  «directory-name»

(誰でも読み取り可能、root のみ書き込み可能)

または

chmod -R 777  «directory-name» 

(システム内のすべてのユーザーが読み取りおよび書き込み可能)

についてはwgetchmodダウンロード後に コマンドを使用してください。

または

それでも別のユーザーとしてコマンドを実行する場合は、su コマンドを使用します。

su - «username» -c 'command to be executed'

関連情報