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

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

私は初めてバッシュに触れました。私は多くの行とコマンドで構成されたスクリプトを書いています。複数のパッケージを入手してインストールするために使用されるインストールファイル。したがって、スクリプトで次のような多くのインストールコマンドを使用する必要があります。

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

これを念頭に置いて、スクリプトを起動したユーザーのユーザー名を使用して、通常のユーザーとして実行したい特定のコマンドを簡単に実行できます。したがって、スクリプトで通常のユーザーとして実行したいと他のコマンドをwget変更し、ルートの代わりに通常のユーザーとして実行するように実行します。chmodsudo -u $SUDO_USER

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

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

おすすめ記事