나는 어떤 종류의 인증도 요구하지 않고, 실행하는 사용자에 상관없이 데비안에서 루트로 실행되는 bash 스크립트를 만드는 방법(가능한 경우)을 알고 싶습니다.
이 파일은 루트 사용자인 것처럼 모든 명령을 실행하지만 실제 루트 사용자만 읽거나 쓸 수 있습니다.
, , 등과 swapoff
같은 명령을 실행하고 싶기 때문에 이것이 필요 하지만 다른 응용 프로그램을 통해 암호를 묻지 않기를 원합니다.swapon
apt
이러한 명령은 수정될 예정입니다(이 루트 명령은 입력이 아닌 파일에 인수를 갖습니다). 따라서 보안 관련 문제는 걱정되지 않지만 설명은 가능합니다.
답변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
.