루트 권한을 가진 다양한 컴퓨터에서 실행될 스크립트가 있지만 루트 없이 스크립트의 특정 명령을 실행하고 싶다고 가정해 보겠습니다.
그게 가능합니까?
답변1
답변2
sudo
환경 변수 SUDO_COMMAND
, SUDO_GID
및 SUDO_UID
를 내보냅니다 SUDO_USER
.
호출 사용자를 사용 SUDO_USER
하거나 반환할 수 있습니다.SUDO_UID
sudo -u "$SUDO_USER" an_unprivileged_command
답변3
sudo
su
더 나은 액세스 제어 기능을 갖춘 향상된 버전입니다. 이미 root
으로 실행 중이라면 su
번거로움 없이 이 작업을 수행할 수 있습니다.
#!/bin/sh -e
echo -n "Script User: " && id -un
echo -n "Other user: " && su blrfl -c "id -un"
echo -n "Back to script user: " && id -un
실행하면 다음을 얻습니다.
Script User: root
Other user: blrfl
Back to script user: root
답변4
나는 동의한다알렉스 P의 답변일반적으로 루트가 아닌 사용자로 실행해야 하며 필요한 명령에 대해서만 sudo를 호출해야 합니다. 화이트리스트는 블랙리스트보다 항상 안전합니다.
AlexP의 답변 외에도: sudo
사용자가 실행할 수 없다는 것을 깨닫기 전에 많은 작업을 수행하지 sudo
않고 손상된 상태를 생성하지 않도록 스크립트 맨 위에서 이것을 호출할 수 있습니다. 따라서 sudo
때때로 필요할 때 스크립트 상단에 다음을 배치하는 것이 좋습니다.
#!/bin/bash
sudo true || exit 1
# … other code …
그러면 즉시 비밀번호를 요청하고(필요한 경우) 실패 시 스크립트 실행이 중단됩니다 sudo
.