SSH 인증 소켓을 다른 사용자와 공유하는 가장 좋은 방법은 무엇입니까?

SSH 인증 소켓을 다른 사용자와 공유하는 가장 좋은 방법은 무엇입니까?

나는 그것을 사용하고 있다안시푸르원격 서버를 설정하기 위해 SSH 에이전트를 사용하여 git clone저장소 로 전달합니다.bitbucket.orgsudo다음을 포함하는 환경 변수를 유지하기 위해 디렉터리의 파일을 사용하고 있으므로 로컬 SSH 키를 사용합니다 .SSH_AUTH_SOCK/etc/sudoers.d/

Defaults env_keep += SSH_AUTH_SOCK

이렇게 하면 이 환경 변수를 사용할 수 있게 됩니다 sudo. 문제는 web사용 가능한 소켓 파일에 액세스할 수 없는 다른 사용자 로 복제하려고 할 때입니다 SSH_AUTH_SOCK.

0777현재는 이 사용자에 대해 소켓 디렉터리의 소유권을 반복적으로 설정하고 있으므로 소켓 파일에 권한을 부여하지 않습니다 .

$ ls -l /tmp
drwx------  2 web web 4096 Aug  7 09:09 ssh-PcIG22W1CM

이 모든 작업은 Ansible을 사용하여 수행되었지만 이 질문은 다른 상황에도 적용되므로 Ansible 코드를 공유하지 않겠습니다.

rwx모든 사람에게 권한을 부여하지 않고 이 소켓 파일을 공유하는 가장 좋은 방법은 무엇입니까?

답변1

루트로서 다음을 사용하여 소켓을 브리지할 수 있습니다.

socat UNIX-LISTEN:/var/run/authsocket.sock,umask=077,user=web,fork "UNIX:$SSH_AUTH_SOCK"

리눅스에서, 이는 다른 사용자가 connect()이 소켓에 액세스하는 것을 방지합니다.

Linux에서는 setfacl user:$user:w $SSH_AUTH_SOCK소켓( )에 ACL을 설정하려고 할 수 있지만 OpenSSH 클라이언트가EUID 확인소켓에 대한 권한이며 소유자 및 루트 사용자에게만 허용됩니다.

관련 정보