SSH 사용자 CA: 모든 호스트 대신 선택한 호스트를 사용하여 사용자 인증서에 서명하시겠습니까?

SSH 사용자 CA: 모든 호스트 대신 선택한 호스트를 사용하여 사용자 인증서에 서명하시겠습니까?

공통 서버를 공유하는 서버가 많습니다 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에는 루트로만 로그인할 수 있고 다른 서버에는 로그인할 수 없는 인증서를 생성할 계획입니다. 이것이 해당 서버의 server1FQDN(또는 의 전체 내용)인지 확인했습니다 . /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= . 이는 sshdAuthorized_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 인증서 인프라를 설정하기 위해 블로그를 작성했습니다.

https://medium.com/better-programming/how-to-use-ssh-certificates-for-scalable-secure-and-more-transparent-server-access-720a87af6617

관련 정보