yumを使用していくつかのDocker関連ユーティリティをインストールするbashスクリプトがあり、当然yumにはsudoアクセスが必要です。だから、次のようにスクリプトを実行します。
sudo ./myscript.sh
しかし、スクリプトが完了すると、私のユーザーはrootに変わります。これは、スクリプトの最後でこれを実行しているユーザーを次のようにDockerグループに追加したいので、これが問題になります。
groupadd docker
gpasswd -a $USER docker
したがって、スクリプトが完了すると、現在のユーザーではなくグループにルートが追加されます。これはsudoを使って実行したためです。
スクリプトをsudoしながら、現在のユーザーのログインを維持できますか?私が理解したのは、スクリプトでsudoを使用するのは一般的に良い考えではありません。
スクリプトは次のとおりです(以下の回答後に編集されます)。
#!/bin/bash
yum remove docker \
docker-common \
container-selinux \
docker-selinux \
docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce
systemctl start docker
groupadd docker
groupadd docker
gpasswd -a "${SUDO_USER}" docker
su "${SUDO_USER}" -c "newgrp docker"
答え1
このSUDO_USER
変数をチェックして、スクリプトが実行されていることを確認できます。渡す sudo
はい、どのユーザーが実行したのか。次に、以下で使用してくださいgpasswd
。
gpasswd -a "${SUDO_USER}" docker
または
gpasswd -a "${SUDO_USER-$USER}" docker
USER
せずに戻りたい場合SUDO_USER
。
ログインを終了させるコマンドroot
(厳密に言えば、ログインは変更されず、新しいシェルが実行されます)は次のとおりです。
newgrp docker
この問題を解決するには、つまりメインチームとしてdocker
自分自身の方法で管理する必要がありますsudo
。
su "${SUDO_USER}" -c "newgrp docker"
そうします。
このようにスクリプトを終了すると、newgrp
新しいプロンプトを受信したときにスクリプトが次のように終了しないことを意味します。
- 入力時にシェル
sudo ./myscript.sh
sudo
- シェルが実行中です
myscript.sh
newgrp
- シェルは
docker
デフォルトグループで始まります。
- シェルは
- シェルが実行中です
スクリプトは、起動したシェルを終了したときにのみ終了しますnewgrp
。
答え2
sudoを使用することが一般的に良い習慣と見なされ、それを使用する場合(特に手動で実行する必要がある短いスクリプトで)、ロジックまたはメンテナンスが簡素化され、目的を達成する場合は、スクリプトでsudoを使用するのが適切であると言えます。あります。まず。
スクリプトでsudoを使用し、通常のユーザーとしてスクリプトを実行できます。 sudoを呼び出すと、通常はパスワードを一度だけ要求します(またはユーザーが最近sudoを使用した場合はまったく要求しません)。ただし、正しい動作のために、スクリプトはユーザーがrootでスクリプトを実行するのを防ぐ必要があります。
# This should not be run as root (or using 'sudo')
if [ "$(/usr/bin/id -u)" == "0" ] ; then
echo "This script cannot be run as root (or using 'sudo')!" 1>&2
exit 1
fi
# Use sudo per command here
sudo groupadd docker
sudo gpasswd -a $USER docker
ここで、$USER変数は通常のユーザーに対応しているため、gpasswdに期待されるパラメータとして挿入されます。
この例は、sudoではなく通常のユーザーとして実行されます。ただし、正しい実行のためにはユーザーにsudo権限が必要です。