루트가 아닌 다른 사용자로부터 SSH_AUTH_SOCK에 액세스


11

시나리오 :

로컬 PC에서 ssh-agent를 실행 중이며 모든 서버 / 클라이언트가 SSH 에이전트 인증을 전달하도록 설정되어 있습니다. 로컬 PC에서 ssh-agent를 사용하여 모든 컴퓨터 사이를 이동할 수 있습니다. 작동합니다.

자신 (user1)으로 컴퓨터SSH 연결하고 user2라는 다른 사용자 ( sudo -i -u user2 )로 변경 한 다음 로컬 PC에서 실행중인 ssh-agent를 사용하여 다른 상자로 ssh 할 수 있어야합니다. ssh user3 @ machine2와 같은 것을하고 싶다고 가정 해 보겠습니다 (user3이 authorized_keys 파일에 공개 SSH 키가 있다고 가정).

나는 한 sudo는 킵하도록 구성 SSH_AUTH_SOCK의 환경 변수를.

관련된 모든 사용자 (user [1-3])는 권한없는 사용자 (루트 아님)입니다.

문제 :

다른 사용자로 변경하면 SSH_AUTH_SOCK 변수가 올바르게 설정되어 있어도 (/tmp/ssh-HbKVFL7799/agent.13799로 설정) user2는 user1에 의해 작성된 소켓에 액세스 할 수 없습니다. 물론 user2는 user1의 개인 키를 가로 채서 해당 사용자로 이동할 수 있습니다.

이 시나리오는 user2에 대해 sudo를 통해 쉘을 얻는 대신 루트에 대해 sudo를 통해 쉘을 얻는 경우에만 잘 작동합니다. 당연히 루트는 머신의 모든 파일에 액세스 할 수 있기 때문입니다.

질문:

sudo를 사용하여 user1에서 user2로 어떻게 변경할 수 있지만 여전히 user1의 SSH_AUTH_SOCK에 액세스 할 수 있습니까?

답변:


12

당신이해야 할 두 가지가 있습니다 :

  1. SSH_AUTH_SOCK변수가 올바른 파일을 가리 키도록 설정 하십시오.
  2. 다른 사용자가 소켓에 연결하도록 허용 (파일 시스템 권한 사용)

따라서 할 수있는 일은 다음과 같습니다.

user1로서, user2가 소켓에 연결하도록하십시오 (소켓에 대한 모든 액세스 권한 및 디렉토리 입력 권한). /tmpACL이 허용 되기를 바랍니다 .

setfacl -m u:user2:rw $SSH_AUTH_SOCK
setfacl -m u:user2:x $(dirname $SSH_AUTH_SOCK)

다른 사용자로 변경하고 변수를 올바르게 내보내십시오.

sudo -u user2 env SSH_AUTH_SOCK=$SSH_AUTH_SOCK ssh user3@machine2

를 사용하여 대화식 쉘을 열려면 쉘 을 얻은 후 변수를 직접 sudoSSH_AUTH_SOCK보내야합니다.


답변 해주셔서 감사합니다. 그것은 완벽하게 작동하며 완전히 이해됩니다. 답변이 늦어서 죄송합니다. 누군가가 응답했다는 알림을받지 못했습니다.
Danny F
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.