공통 서버를 공유하는 서버가 많습니다 TrustedUserCAKeys
. 모든 서버가 아닌 특정 서버에 특정 액세스 권한을 부여하도록 사용자 인증서에 서명하고 싶습니다.
예를 들어, 다음 명령은 모든 서버에서 루트로 로그인하는 데 사용할 수 있는 인증서를 생성합니다.
ssh-keygen -s ca -I example -n root id_rsa.pub
다음 명령을 시도했지만 쓸모없는 인증서가 생성되었습니다.
ssh-keygen -s ca -I example -n root@server1 id_rsa.pub
server1에는 루트로만 로그인할 수 있고 다른 서버에는 로그인할 수 없는 인증서를 생성할 계획입니다. 이것이 해당 서버의 server1
FQDN(또는 의 전체 내용)인지 확인했습니다 . /etc/hostname
호스트를 건드리지 않고 이를 달성할 수 있는 방법이 있습니까 sshd_config
?
답변1
파일을 변경하지 않으면 sshd_config
일반적으로 대답은 '아니오'입니다. 이를 달성하는 메커니즘은 AuthorizedPrincipalsFile
(또는 AuthorizedPrincipalsCommand
)을 설정하는 것입니다. 이 지시문이 없으면 sshd_config
기본 동작은 인증 시도에 대한 사용자 이름이 문자 그대로 인증서에 포함된 주체 중 하나로 나열되어야 한다는 것입니다. 이것이 "root"가 작동하지만 "root@server1"이 작동하지 않는 이유입니다.
'root@server1'을 사용하는 인증서가 작동하려면(항목을 추가할 필요 없음 /root/.ssh/authorized_keys
) AuthorizedPrincipalsFile
루트 사용자에 대해 인증서를 구성하고(이후 OpenSSH 버전에서는 Match
블록 내에서 이 지시어를 허용함) 'root@server1'을 나열해야 합니다. , 다른 서버에서도 유사한 작업을 수행합니다. 또한 이를 확장하여 "root@dev" 또는 "root@*"와 같은 서버 그룹에 적합한 인증서를 허용할 수도 있습니다 AuthorizedPrincipalsFile
.
.ssh/authorized_keys
이를 수행하는 또 다른 방법은 cert-authority
및 옵션을 사용하여 파일에 CA 키와 허용된 주체를 명시적으로 나열하는 것입니다 principals=
. 이는 sshd
Authorized_Keys 파일 형식의 매뉴얼 페이지 설명에 포함되어 있습니다.
답변2
문제는 SSH 인증서를 발급할 때 직접 입력하면 CA를 신뢰하는 모든 서버에 대한 액세스 권한이 부여된다는 root
점 입니다.Principals
이를 방지하려면 에서 문제를 발생시키지 마십시오 username
. 대신 액세스 정책을 개발하십시오. 일반적인 시나리오는 어떤 사람은 테스트 서버에 액세스해야 하고, 어떤 사람은 데이터베이스 서버에 액세스하고, 어떤 사람은 모든 서버에 액세스해야 하는 것입니다. 그래서 여러 원칙을 만들었습니다.
project-dev
- 개발/테스트 서버에 대한 접근project-databases
- 데이터베이스 서버에 접속project-super
- 모든 서버에 접속
이를 달성하려면 AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u
파일을 추가하세요 sshd_config
.
따라서 누군가 사용자 이름을 사용하여 서버에 로그인을 시도하면 root
파일을 확인합니다 /etc/ssh/auth_principals/root
( %u
사용자를 대신하여 알림).
따라서 사용자의 인증서에 이 파일에 나열된 원칙이 있으면 사용자에게 액세스 권한이 부여됩니다.
이 시나리오에 대한 권한 부여 정책 파일은 다음과 같습니다.
- 개발 서버 -
project-dev\nproject-super
- 데이터베이스 서버 -
project-dev\nproject-super
- 프로덕션 서버 -
project-super
따라서 귀하의 필요에 따라 전략을 개발하십시오.
root
참고: in을 사용하여 인증서를 발급하는 경우에도 Principles
계속 작동합니다. 그러니 이런 상황을 피하세요.
나는 완전한 SSH 인증서 인프라를 설정하기 위해 블로그를 작성했습니다.