시나리오는 다음과 같습니다. GnuPG를 사용하여 두 웹 서버 간의 데이터를 암호화합니다. RHEL에서는 1개입니다. GnuPG는 cgi 스크립트 액세스를 통해 암호화 및 암호 해독을 수행합니다. 따라서 Apache 사용자가 액세스할 수 있는 키링이 필요합니다. Red Hat에서는 이것이 어려운 것으로 판명되었지만 Ubuntu에서는 쉽게 설정할 수 있었습니다. 내가 시도한 것은 다음과 같습니다. 어쩌면 누군가가 이것을 달성하는 더 좋고/쉬운 방법을 가지고 있을 수도 있습니다.
아파치 사용자가 되었습니다
su -s /bin/bash apache
달리는 동안
gpg --gen-key
/var/www에 .gnupg 디렉터리를 만들 수 없어서 디렉터리를 만들고 소유자를 apache.apache로 설정했습니다. 이제 키를 생성하면
can't connect to `/var/www/.gnupg/S.gpg-agent': No such file or directory
gpg-agent[26949]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: Key generation canceled.
그래서 몇 가지 매뉴얼 페이지(그리고 인터넷 검색)를 읽은 후 이 파일을 만들었습니다.
mknod -m 700 S.gpg-agent p
지금은 이해
can't connect to `/var/www/.gnupg/S.gpg-agent': Connection refused
gpg-agent[26949]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: Key generation canceled.
나는 내가 잘 알지 못하는 영역에 들어가고 있었기 때문에 그 이후로 아무데도 갈 수 없었습니다. 나는 이것이 bash 구성 파일 등이 있기 때문에 실제로 사용자가 아닌 Apache와 관련이 있다고 가정합니다. 그럼 어디서부터 시작해야 할까요?
답변1
이는 장치 파일 권한 문제일 수 있습니다. pinentry
상속된 파일 설명자를 사용하는 대신 전달된 TTY에 직접 액세스하려고 시도했지만 작동하지 않았습니다.
tty
셸에서 실행하고 결과 ls -l /dev/pts/1
를 보면 apache
액세스할 수 없다는 것을 알 수 있습니다.
당신은 또한 실행할 수 있습니다
strace -o gpg.strace -f -e trace=open gpg --gen-key
그리고 다음과 같은 것을 찾을 수도 있습니다
open("/dev/pts/1", O_RDONLY) = -1 EACCES (Permission denied)
위험한 해결책은 (일시적으로) 콘솔 apache
에 대한 root
액세스 권한을 부여하는 것입니다... ( chown apache /dev/pts/1
). 더 나은 해결책은 실제 로그인을 하는 것입니다 apache
.
이는 키 생성에만 영향을 미칩니다. 다른 사용자로 키 쌍을 생성하고 내보내고 계정으로 가져올 수도 있습니다 apache
.
답변2
새 사용자를 생성하고 sudo를 사용하여 명령을 호출해 보셨나요? 이것이 일부 권한 문제일 수 있다고 걱정된다면 /var/www에서 gpg 사용자가 액세스할 수 있는 것으로 알려진 위치(예: /tmp 디렉터리)에 에이전트 노드를 삭제하는 것이 더 쉬운 접근 방식입니다. 환경 변수 GPG_AGENT_INFO를 변경하여 에이전트 노드 위치를 수동으로 지정할 수 있습니다.
답변3
나는 이것이 이 버그에 대한 회귀라고 생각합니다.https://rhn.redhat.com/errata/RHBA-2011-1096.html
정오표에서 :
이 업데이트는 다음 버그를 수정합니다.
- 이번 업데이트 이전에는 pinentry-curses 유틸리티를 사용하여 비밀번호를 입력할 때 문제가 있었습니다. pinentry-curses가 현재 tty를 소유한 사용자가 아닌 다른 사용자로 실행되면 비밀번호 입력 대화 상자 대신 오류 메시지가 표시되었습니다. 이 버그는 이번 업데이트에서 수정되었으므로 이제 오류 메시지가 더 이상 표시되지 않고 pinentry-curses가 예상대로 비밀번호를 묻습니다. (BZ#677665)
문제는 su 또는 sudo를 수행할 때 tty가 여전히 tty의 원래 소유자에 의해 소유되어 pinentry가 손상된다는 것입니다.
어제는 루트가 아닌 다른 사용자로 Cent 6 시스템에서 gpg 키를 생성할 수 없었다는 점을 지적하고 싶습니다. 키를 생성하려면 루트로 로그인하여 키를 생성하고 .gpg 디렉터리를 사용자의 홈 디렉터리에 복사한 다음 소유권을 변경해야 합니다.