명령에 "sudo"를 사용하면서도 여전히 "나 자신"이 될 수 있는 방법은 무엇입니까?

명령에 "sudo"를 사용하면서도 여전히 "나 자신"이 될 수 있는 방법은 무엇입니까?

sudo내 시스템 관리자가 특정 스크립트를 실행하는 데 이를 사용하도록 요청했습니다 . 스크립트(인수로 전달한 하위 명령에 따라 다름)는 ssh 키를 사용하여 다른 컴퓨터에 연결하지만 이는 실패합니다. 아마도 나 대신 루트로 실행되기 때문일 것입니다.

sudo명령이 실행되는 동안 SSH 키에 액세스하면서 스크립트를 실행할 수 있는 권한을 얻기 위해 시스템 관리자가 필요로 하고 변경할 권한이 없는 이 권한을 어떻게 계속 사용할 수 있습니까 ?

답변1

sudo 구성 방법에 따라 대부분의 환경 변수가 재정의될 수 있습니다. 특히, 가릴 가능성이 높고 SSH_AUTH_SOCK, 가릴 가능성이 높습니다 HOME. sudo 구성을 변경하지 않으면 이 문제를 해결할 수 없습니다.

root 로 실행하면 sudo 구성(특히 보존되는 환경 변수)을 볼 수 있습니다 sudo -V. 권한이 없는 사용자로는 구성을 볼 수 없는 기능입니다.

시스템 관리자가 스크립트가 SSH 키를 사용할 수 없도록 sudo 권한을 잠갔을 수 있습니다. 이는 아마도 보안 정책일 것이며 올바르게 구현된 경우 정의에 따라 직접 수정할 수 없으므로 구성을 변경하려면 시스템 관리자가 필요합니다.

스크립트의 기능과 sudo 구성이 무엇인지 모르면 무엇이 필요한지 알기가 어렵습니다. 다음과 같은 줄이 도움이 될 수 있습니다( sudoers실행할 명령이 다음과 같은 경우 환경 변수를 보존하도록 sudo에 지시합니다).SSH_AUTH_SOCK/path/to/script

Defaults!/path/to/script env_keep+=SSH_AUTH_SOCK

스크립트가 본인이나 루트가 아닌 사용자로 실행되는 경우 해당 사용자에게 키를 읽거나 에이전트에 액세스할 수 있는 권한을 부여해야 합니다.

답변2

두 가지가 떠오릅니다. 먼저, 높은 권한이 필요한 명령으로만 실행되도록 스크립트를 편집합니다 sudo. 이렇게 하면 SSH 연결이 제대로 작동하게 됩니다. 이는 필요한 명령만 높은 권한으로 실행할 수 있다는 장점이 있습니다. 올바른 작업을 수행하기 위해 스크립트의 호출 sudo에 의존하여 명령줄에서 명령을 실행할 필요가 없습니다 .sudo

둘째, 연결할 사용자의 이름을 명시적으로 설정하도록 스크립트를 편집합니다. $SUDO_USER현재 세션을 시작한 사용자의 사용자 이름을 보유하는 이 변수를 사용할 수 있습니다 sudo. 이렇게 하면 트릭을 수행할 수 있습니다.

ssh "${SUDO_USER}@remotehost.example.com"

답변3

사용자 ID는 항상 sudo로 변경되지만 -E 매개변수를 사용하여 환경을 보존할 수 있습니다.

관련 정보