"역방향 sudo"가 있습니까? [복사]

"역방향 sudo"가 있습니까? [복사]

루트 권한을 가진 다양한 컴퓨터에서 실행될 스크립트가 있지만 루트 없이 스크립트의 특정 명령을 실행하고 싶다고 가정해 보겠습니다.

그게 가능합니까?

답변1

둘 다su그리고sudo이것은 가능합니다. 기본적으로 다른 사용자로 명령을 실행합니다. "다른 사용자"는 루트이지만 모든 사용자가 될 수 있습니다. 예를 들어,

sudo -u www-data ls

ls사용자로 실행됩니다 www-data.


하지만...

일반적인 접근 방식은 호출하는 사용자로 스크립트를 실행하고 sudo필요한 명령과 함께 사용하는 것입니다. sudo자격 증명은 캐시되므로 최대 한 번 메시지가 표시됩니다.

답변2

sudo환경 변수 SUDO_COMMAND, SUDO_GIDSUDO_UID를 내보냅니다 SUDO_USER.

호출 사용자를 사용 SUDO_USER하거나 반환할 수 있습니다.SUDO_UID

sudo -u "$SUDO_USER" an_unprivileged_command

답변3

sudosu더 나은 액세스 제어 기능을 갖춘 향상된 버전입니다. 이미 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.

관련 정보