쉘 스크립트에서 SUID를 안전하게 얻는 가장 쉬운 방법

쉘 스크립트에서 SUID를 안전하게 얻는 가장 쉬운 방법

/nix/storeOCI 컨테이너가 마치 쓰기 가능한 것처럼 마운트된 읽기 전용 디렉터리에 액세스할 수 있도록 오버레이를 설치해야 하는 스크립트가 있습니다 .

루트/휠이 아닌 사용자가 이 스크립트를 실행하도록 하고 싶습니다. 가장 쉬운 방법은 무엇입니까? 처음에 나는 순진하게 사용해 보았지만 SUID이것이 작동하지 않는다는 것을 깨달았습니다. 이로 인해 쉘 스크립트의 위험성에 대한 많은 SUID답변과 기사가 생겼습니다. 그 중 하나는 왜 그것을 일부 C 프로그램으로 래핑했는지 설명했지만 안전을 해결할 수 없습니다. 깨끗하지 않은 환경 문제.

이러한 취약점을 처리하기 위해 스크립트를 래핑할 수 있는 간단한 래퍼/유틸리티가 있습니까?

사용자 환경에서는 docker 컨테이너에 방금 전달된 ENV만 필요하지만 루트 사용자는 bash 세션에서 동일한 ENV 변수를 갖게 되므로 제안이 모든 사용자 환경을 무시하고 대신 루트 1을 사용하여 작동한다면, 내 사용 사례에는 괜찮습니다.

local temp_dir=$(mktemp -d)

mkdir -p {$temp_dir/store,$temp_dir/upper-store,$temp_dir/work-store}

# Create Overlay
sudo mount -t overlay overlay \
  -o lowerdir=/nix/store,upperdir=$temp_dir/upper-store,workdir=$temp_dir/work-store $temp_dir/store

# Do some sutff with the mounted overlay

sudo umount $temp_dir/store
rm -rf $temp_dir

답변1

여기에는 사용 중인 배포판과 모든 사용자를 추가하는지 여부에 따라 몇 가지 변수가 있습니다.그룹. 저는 ubuntu atm을 실행 중이고 모든 로컬 사용자는 입니다 plugdev.

따라서 모든 사람이 스크립트를 실행할 수 있도록 하려면 다음 줄을 추가합니다 /etc/sudoers.d/script.

%plugdev  ALL = NOPASSWD: /path/to/script

sudo그러면 스크립트에서 from 사용을 제거할 수도 있습니다 (설치하다&제거). 분명히 모든 사람이 볼 수 있는 경로에 스크립트를 넣어야 하지만 가급적이면 편집할 수 없도록 해야 합니다.

답변2

사용자에게 마운트/마운트 해제 액세스 권한을 제공하는 적절한 방법은 sudo스크립트에 이미 구현된 대로 를 사용하는 것입니다. 또는 sudo wrapper.sh 시스템 로깅을 덜 선호하는 경우 스크립트를 래핑하여 사용할 수 있습니다.

휠을 사용하지 않는 사용자도 실행할 수 있기를 바랍니다.

$ man 5 sudoers사용 사례에 맞게 유틸리티를 올바르게 구성하는 방법에 대한 광범위한 조언을 제공합니다. Stack Overflow에도 이 주제에 대한 세 가지 답변이 있습니다.

관련 정보