이전 질문과 가능한 해결 방법과 관련하여 새 질문에서 다른 해결 방법을 찾아보라는 조언을 받았습니다.
(이것은 오래된 스레드입니다.SSH 에이전트 전달은 작동하지만 쉘/권한이 없는 sudo -u 사용자 이름은 어떻습니까? 작곡가)
따라서 단순화를 위해 내 서버에 (루트 외에) 두 명의 사용자만 있다고 가정해 보겠습니다.
한 사용자(Nal이라고 부르겠습니다)는 시간제 관리자입니다. 이는 그가 sudoers 목록에 있다는 의미입니다.
다른 사용자는 sftp(예: ftp over ssh;)용이며 /srv/web에 있는 웹 서버에서 사이트를 관리합니다(이 사용자를 Web이라고 부르겠습니다).
웹은 이 사이트를 관리하는 것 외에는 할 일이 없으므로 쉘 액세스(bin/false로 설정) 및 특수 권한이 없습니다.
이제 /srv/web/websiteA의 디렉토리는 Web이 소유하고 있으며 여기에는 Composer(기본적으로 PEAR를 대체하는 PHP 종속성 관리자)도 활용하는 Laravel(PHP 프레임워크) 설치가 있습니다.
아직 공개적으로 사용할 준비가 되지 않은 일부 준개발 패키지가 있으므로 개인 저장소에 배치합니다. 이 저장소에 액세스하고 git을 통해 콘텐츠를 복제하려면(모두 Composer에 의해 자동으로 수행됩니다!) "웹"에는 SSH 키가 필요합니다.
로컬 시스템과 서버에서 동일한 SSH 키 세트를 관리하는 대신 SSH 에이전트 전달을 통해 전달합니다.
이는 "Nal"에 매우 유용합니다. 그는 내 개인 저장소에 액세스할 수 있습니다. 그런데 /srv/web/websiteA에서 작성기 업데이트를 하려고 하면 "웹"을 사용하여 업데이트해야 하는데 그 사람은 셸 액세스도, SSH 키도 없어서 업데이트가 실패합니다.
내 현재 해결 방법은 다음과 같습니다.
나는 Nal로 로그인했습니다:
cd /srv/web/websiteA
setfacl -R -m u:Web:rwx "${SSH_AUTH_SOCK%/*}"
sudo -u Web SSH_AUTH_SOCK="$SSH_AUTH_SOCK" composer update
setfacl -b "${SSH_AUTH_SOCK%/*}"
그래서 웹이 액세스할 수 있도록 SSH 키를 넘겨주기 위해 Nal 소켓에 대한 권한을 설정한 다음 이를 업데이트하고 권한을 다시 취소했습니다.
이는 효과가 있지만 최선의 해결책은 아닐 수도 있습니다.
/srv/web/websiteA에 대한 권한을 775 또는 이와 유사한 것으로 설정하고 싶지 않으므로(그리고 Nal을 www-data 그룹에 추가) 여기에 질문합니다.
더 나은 해결책을 생각해 볼 수 있나요?
답변1
글쎄, 제안하자면 개인 키를 복사하여 ~/.ssh
서버의 웹 사용자 디렉토리에 넣은 다음 -p
ssh-keygen 옵션을 사용하여 웹 개인 키 복사본에서 비밀번호를 제거하는 것이 좋습니다.
키 파일을 얻는 사람은 누구나 비밀번호를 몰라도 사용할 수 있으므로 약간의 보안이 손실됩니다. 하지만 프록시 전달이나 유사한 설정 없이 git 저장소를 얻으려면 작동해야 합니다.