다른 사용자로 명령을 실행할 수 있도록 sudo 명령과 sudoers 파일을 올바르게 사용하려고 합니다.
내 sudoers 파일은 다음과 같이 설정됩니다.
beans ALL = (root,apache) NOPASSWD: /opt/renovations/var/script-*.sh
루트, 아파치, 빈은 빈 그룹의 일부입니다.
또한 /opt에는 755개의 권한이 있으며 /opt/renovations 디렉토리와 해당 하위 디렉토리는 Bean 사용자 및 그룹이 소유합니다.
Bean으로 실행하려는 명령은 다음과 같습니다.
sudo -n -u apache -i /opt/renovations/var/script-test.sh
-n: cron에 의해 실행되므로 비밀번호를 묻는 메시지가 표시되지 않습니다.
-u: 아파치 사용자를 가장할 수 있습니다.
-i: 로그인을 가장할 수 있고 내 .profile이 로드됩니다. .profile의 환경 변수에 액세스하려면 이것이 필요합니다.
문제는 sudo 명령을 실행할 때 다음 메시지가 표시된다는 것입니다.
sudo: 죄송합니다. sudo를 실행하려면 비밀번호가 필요합니다.
AIX와 Ubuntu에서 실행해 보았지만 두 시스템 모두에 문제가 있었습니다. 다음 명령을 실행하면 작동합니다.
sudo -n -u apache /opt/renovations/var/script-test.sh
그러나 -i가 없으면 내 환경에 필요한 모든 환경 변수가 포함되어 있지 않습니다.
이를 달성하려면 sudoers 파일을 업데이트해야 하는 것이 있나요?
답변1
@krzysto가 말했듯이 해결책은 sudoers 파일에 다음을 추가하는 것입니다.
beans ALL = (root,apache) NOPASSWD: /usr/bin/ksh -c /opt/renovations/var/script-*.sh
beans ALL = (root,apache) NOPASSWD: /usr/bin/bash -c /opt/renovations/var/script-*.sh
다음으로 누락된 부분은 스크립트를 실행할 수 있도록 그룹에 스크립트에 대한 실행 권한이 있는지 확인하는 것입니다.