yum을 루트로 실행하고 나머지 스크립트는 호출 사용자로 실행하는 스크립트를 만드는 방법

yum을 루트로 실행하고 나머지 스크립트는 호출 사용자로 실행하는 스크립트를 만드는 방법

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 권한이 있어야 합니다.

관련 정보