여러 명령이 포함된 쉘 스크립트가 있는데 그 중 하나에는 루트가 필요합니다. 스크립트 실행 전이나 실행 중에 비밀번호를 입력하지 않고 스크립트를 실행하고 싶습니다. 어떻게 해야 하나요?
답변1
sudo는 특정 사용자에게 권한을 부여하는 일반적인 방법입니다.
여러 명령을 사용하는 간단한 예: 사용자 nagios가 특정 명령을 사용하여 정보를 덤프하도록 하고 싶습니다.
nagios ALL=(root) NOPASSWD: /usr/bin/dmidecode, /bin/netstat -ntp
또 다른 예로, 여러 서버를 관리하고 동일한 서버를 배포하려고 합니다. Sudoers각각의 파일. 그리고 이 규칙은 하나의 서버에서만 유효합니다.
nagios srvpeug1208 =(root) NOPASSWD: /usr/bin/dmidecode, /bin/netstat -ntp
그러면 nagios가 시작됩니다.srvpeu1208몇 가지 명령을 실행합니다.
답변2
다른 사람들이 언급했듯이 스크립트에 필요한 핵심은 비밀번호 프롬프트 없이 루트 권한이 필요한 명령을 루트로 실행할 수 있다는 것입니다.
이는 사용자가 일반적으로 루트 권한이 필요한 특정 명령을 실행해야 하지만 일반적으로 해당 사용자에게 루트 권한을 부여하고 싶지 않을 때 *nix에서 흔히 발생하는 문제입니다.
Unix에는 이에 대한 보편적인 솔루션인 setuid 비트가 있습니다. 바이너리에서 setuid 비트가 설정/활성화되면 바이너리는 항상 파일 소유자로 실행됩니다(따라서 실행 파일의 소유자가 루트인 경우 루트로 실행됩니다).
이 권한을 설정하려면 루트 권한이 필요한 바이너리가 루트 소유인지 확인한 다음 setuid 비트를 포함하도록 권한을 설정합니다.
sudo chown root /path-to-binary
sudo chmod 4755 /path-to-binary
이제 호출 사용자가 암호를 제공하지 않고도 바이너리가 루트로 실행됩니다. 바이너리 대신 쉘 스크립트가 있는 경우 여기에 설명된 해결 방법을 사용해야 합니다.setuid가 작동하지 않는 이유는 무엇입니까?
이는 사용자가 파일에 액세스하는지 여부에 관계없이 작동하므로 주의하세요. 이 기능을 특정 사용자로 제한하려면 다른 사용자가 제안한 대로 sudoers 구성을 수정할 수 있습니다.
답변3
일부 옵션:
- 이것을 읽고
man sudoers
스크립트를 실행하는 데 비밀번호가 필요하지 않으므로 sudo를 사용하여 스크립트를 등록하세요. visudo에 대한 내용(그리고 잠기지 않는 방법)을 주의 깊게 읽어 보십시오. 이렇게 하지 않으면 sudo가 작동하지 않을 때 여기로 돌아와 파일 편집 방법을 묻게 됩니다. golang
setuid 비트를 다시 작성 하고 사용하십시오.