
yum을 사용하여 일부 Docker 관련 유틸리티를 설치하는 bash 스크립트가 있으며 당연히 yum에는 sudo 액세스가 필요합니다. 그래서 다음을 통해 스크립트를 실행합니다.
sudo ./myscript.sh
그러나 스크립트가 완료된 후에는 내 사용자가 루트로 변경됩니다. 스크립트 끝에서 이를 실행하는 사용자를 다음을 통해 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를 사용한 경우에는 전혀 요청하지 않음). 그러나 올바른 동작을 위해 스크립트는 사용자가 루트로 스크립트를 실행하지 못하도록 해야 합니다.
# 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 권한이 있어야 합니다.