쉘 스크립트를 항상 루트로 실행하도록 하는 방법이 있습니까?

쉘 스크립트를 항상 루트로 실행하도록 하는 방법이 있습니까?

나는 어떤 종류의 인증도 요구하지 않고, 실행하는 사용자에 상관없이 데비안에서 루트로 실행되는 bash 스크립트를 만드는 방법(가능한 경우)을 알고 싶습니다.

이 파일은 루트 사용자인 것처럼 모든 명령을 실행하지만 실제 루트 사용자만 읽거나 쓸 수 있습니다.

, , 등과 swapoff같은 명령을 실행하고 싶기 때문에 이것이 필요 하지만 다른 응용 프로그램을 통해 암호를 묻지 않기를 원합니다.swaponapt

이러한 명령은 수정될 예정입니다(이 루트 명령은 입력이 아닌 파일에 인수를 갖습니다). 따라서 보안 관련 문제는 걱정되지 않지만 설명은 가능합니다.

답변1

setuid를 실행하는 bash 스크립트를 만들 수 없습니다. 그러나 sudo루트 권한으로 실행되도록 하려면 (또는 calife와 같은 유사한 프로그램) 사용할 수 있습니다 .

이를 수행하는 두 가지 기본 방법이 있습니다.

스크립트가 호출되어 reset-swap다음을 수행한다고 가정합니다.

#!/bin/sh
swapoff /dev/sdb
shred -n0 -z /dev/sdb
mkswap /dev/sdb
swapon /dev/sdb

옵션 A: 모든 사용자가 이러한 개별 명령을 실행할 수 있도록 허용하며 앞에 sudo를 붙입니다.

#!/bin/sh
sudo swapoff /dev/sdb
sudo shred -n0 -z /dev/sdb
sudo mkswap /dev/sdb
sudo swapon /dev/sdb

그리고 /etc/sudoers모든 사람이 이 작업을 수행할 수 있도록 일련의 줄을 추가합니다.

ALL     ALL = NOPASSWD: /sbin/swapoff /dev/sdb
ALL     ALL = NOPASSWD: shred -n0 -z /dev/sdb
ALL     ALL = NOPASSWD: mkswap /dev/sdb
ALL     ALL = NOPASSWD: swapon /dev/sdb

그러나 모든 사람이 지정된 작업을 안전하게 수행할 수 있는 반면스크립트가 그러하듯이, 그다지 독립적이지 않을 수도 있습니다. 예를 들어, mkswap작업하기 전에 스왑 파티션이 마운트되지 않았는지 확인하십시오. 그러나 shred마운트된 스왑 파티션은 행복하게 지워질 것입니다.

따라서 다음을 사용하는 것이 좋습니다.

옵션 B: sudo를 사용하여 스크립트를 실행하면 됩니다.

ALL     ALL = NOPASSWD: /usr/local/bin/reset-swap

sudo reset-swap그런 다음 대신 에 로 호출할 수 있습니다 reset-swap. 원하는 경우 스크립트가 루트로 실행되지 않는 경우 접두사를 지정하지 않고 실행되도록 자체 권한을 높일 수 있습니다 sudo.

#!/bin/sh
if [ "`id -u`" -ne 0 ]; then
 echo "Switching from `id -un` to root"
 exec sudo "$0"
 exit 99
fi

swapoff /dev/sdb
shred -n0 -z /dev/sdb
mkswap /dev/sdb
swapon /dev/sdb

마지막으로 sudo 강의의 몇 가지 요점으로 마무리하겠습니다. 입력하기 전에 두 번 생각하십시오. 큰 힘에는 큰 책임이 따릅니다.

답변2

프로그램이 항상 특정 UID에서 실행되도록 하는 낮은 수준의 방법은 바이너리의 setuid 비트입니다. 예를 들어 정상적인 사용을 통해 정상적으로 실행되었음에도 불구하고 sudo루트 권한을 얻는 방법입니다 . su그러나 일반적으로 Unix 계열 시스템은 setuid를 지원하지 않습니다.스크립트, 바라보다:쉘 스크립트에 setuid 설정 허용

sudo그러나 사용자가 적절한 권한으로 특정 특정 파일을 실행할 수 있도록 구성하거나 기타 유사한 도구를 구성할 수 있습니다 . 예를 들어, 다음은 이름이 지정된 사용자가 인증 없이 모든 매개변수를 사용하여 viceadmin실행할 수 있도록 허용합니다./usr/local/bin/sudoswapon

viceadmin ALL = NOPASSWD:/usr/local/bin/sudoswapon

이제 sudo권한 자체를 변경하는 작업이 포함되므로 이는 sudoswapon쉘 스크립트일 수 있습니다.

스크립트가 명령줄 인수를 처리하는 방식에 주의해야 한다는 점은 맞습니다.모두쉘 언어의 함정이 적용됩니다. 다행히 옵션이 설정된 sudo경우에는 대부분의 환경 변수가 필터링됩니다 .env_reset

답변3

setuid 스크립트는 극복할 수 없는 보안 문제(쉽게 스푸핑될 수 있음)를 야기한다는 것이 오래 전에 인식되었으므로 IFS더 이상 스크립트를 사용하지 않습니다. setuid 스크립트를 피할 수 있도록 Linux가 변경되었습니다.

sudo당신은 당신의 소원을 실현하는 데 사용할 수 있습니다 NOPASSWD. 읽다 man sudoers sudo.

관련 정보