슈퍼유저 권한으로 특정 명령이 실행되지 않도록 방지

슈퍼유저 권한으로 특정 명령이 실행되지 않도록 방지

저는 배쉬를 처음 접했습니다. 나는 많은 줄과 명령으로 구성된 스크립트를 작성했습니다. 여러 패키지를 구해서 설치하는 데 사용되는 설치 파일입니다. 따라서 스크립트에서 다음과 같은 많은 설치 명령을 사용해야 합니다.

sudo apt install python2.7 python-pip

sudo스크립트에서 너무 많은 명령을 사용 하지 않기 위해 sudo각 명령 앞에 제거하고 다음과 같은 작업을 수행하기 로 결정했습니다 sudo ./setup.sh.

sudo잘 작동하지만 문제는 그 앞에 실제로 필요하지 않은 몇 가지 명령이 있다는 것입니다. 예를 들어 mkdir, wget그리고...

실행 스크립트를 사용할 때 sudo ./setup.sh이 스크립트를 사용하여 생성된 디렉토리는 을 사용하지 않고 삭제, 복사 또는 편집할 수 없지만 sudo모든 사용자가 액세스할 수 있기를 원합니다. 그래서 내 질문은 다음과 같습니다

sudo(예: 슈퍼유저 권한)를 사용하여 스크립트를 실행할 때 특정 내부 명령(예 : 슈퍼유저 권한) sudo ./setup.sh을 실행하지 않는 방법이 있습니까 ?mkdirwget

답변1

를 사용하면 sudo전환하라고 지시한 사용자(기본적으로 루트)로 새 셸을 시작하게 됩니다. 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변수를 사용하면 생성한 모든 디렉터리와 파일이 스크립트를 시작한 사용자가 소유하게 되며 스크립트를 실행할 때마다 해당 사용자의 이름을 스크립트에 명시적으로 알릴 필요가 없습니다.

답변2

mkdir로 생성된 디렉터리를 모든 사용자가 사용할 수 있도록 하려면 chmod 명령을 사용하여 권한을 WORLD 읽기/쓰기로 변경합니다.

스크립트에서 실행 후 mkdir다음 명령을 사용합니다.

chmod -R 755  «directory-name»

(모든 사람이 읽을 수 있고 루트만 쓸 수 있음)

또는

chmod -R 777  «directory-name» 

(시스템의 모든 사용자가 읽고 쓸 수 있음)

의 경우 다운로드 후 이 명령을 사용 wget하십시오 .chmod

또는

다른 사용자로 명령을 실행하려면 su 명령을 사용하십시오.

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

관련 정보