Linux ssh : 개인 키에 대한 사용자 읽기 권한을 제공하지 않고 공개 키 인증 허용


14

내 Linux 서버에 로그인 한 사용자는 기본 계정을 사용하여 특정 원격 시스템에 ssh 할 수 있어야합니다. 원격 시스템의 인증은 공개 키를 사용하므로 서버에서 해당 개인 키를 사용할 수 있습니다.

서버 사용자가 실제로 개인 키를 읽을 수 있기를 원하지 않습니다. 기본적으로 서버에 액세스 할 수 있다는 것은 ssh 권한을 허용하며 서버에서 제거하면 원격 시스템에 대한 연결도 허용되지 않아야합니다.

사용자가 개인 키에 대한 읽기 권한을 부여하지 않고 ssh 연결을 열 수있게하려면 어떻게해야합니까?

지금까지 내 생각 : 분명히 ssh 실행 파일은 개인 키를 읽을 수 있어야하므로 서버의 다른 사용자가 해당 권한을 가지고 있어야합니다. ssh 연결이 설정되면 명령을 입력하고 원격 시스템과 상호 작용할 수 있도록 사용자에게 "전달"할 수 있습니다.

  • 이것이 좋은 접근입니까?
  • 전진을 어떻게 구현해야합니까?
  • 사용자는 어떻게 연결을 시작할 수 있습니까 (즉, 키에 대한 읽기 권한이있는 사용자에 의한 ssh 실행)?
  • 보안 허점이 있습니까? -사용자가 다른 사용자로 ssh를 실행할 수 있다면 다른 사용자가 할 수있는 모든 작업 (개인 키 읽기 포함)을 수행 할 수 있습니까?


1
서버의 IP에서만 해당 키와의 연결을 허용하도록 원격 서버를 구성합니까? 그렇게하면 키를 훔쳐도 아무것도 할 수 없습니다.

@ AndréDaniel은 아마도 서버에서 암호없는 로그인을 허용하도록 구성된 완전히 관련이없는 다른 컴퓨터에 로그인 할 수 있습니다. 이것이 제가 이런 설정을하는 것으로 생각할 수있는 유일한 이유입니다. 그렇지 않다면 나는 그것이 무엇인지 궁금합니다. (실제로 중요한 것은 아닙니다.)
David Z

@DavidZ 나는 정말로 이해하지 못한다 ... IP는 IP가 첫 번째 서버 중 하나와 일치한다고 가정하면 대상 서버에서 신뢰할 수 없어야 합니다 (사용자가 연결된 곳).

2
이런 식으로 잠금해야 할 경우 사용자가 ~/.ssh/authorized_keys파일에 새 공개 키를 추가하지 못하도록 조치를 취했다고 가정 합니다.
mpontillo

답변:


31

그것이 sudo존재 하는 이유 중 하나입니다 . 사용자가 사전 승인 된 명령 줄 옵션만으로 하나의 단일 명령을 실행할 수 있으며 가장 확실한 우회가 해결됩니다. 예 :

#/etc/sudoers
%users ALL = (some_uid) NOPASSWD: /usr/bin/ssh -i /home/some_uid/.ssh/remote-host.key username@remotehost

sudo그룹의 모든 구성원이 users실행할 때 자신의 비밀번호 (또는 some_uid 계정의 비밀번호)를 입력하지 않고 사용자 some_uid로 ssh 명령을 실행할 수 있도록 설정합니다 .

sudo -u some_uid /usr/bin/ssh -i /home/some_uid/.ssh/remote-host.key username@remotehost

NOPASSWD:원격 호스트에 로그인하기 전에 사용자가 자신의 암호를 입력하도록하는 옵션을 제거하십시오 . 올바른 인수를 사용하는 데 상당히 까다롭기
때문에 사용자의 편의를 위해 별칭 또는 래퍼 스크립트를 설정했을 수 있습니다 sudo.


매력처럼 작동합니다. 이것은 wenzul이 언급 한 중복에 대한 권장 답변이어야합니다.
Philipp

10

이것은 호스트 기반 인증의 좋은 사용 사례처럼 보입니다. 이것은 SSH가 로컬 시스템 (이 경우 서버) 의 개별 사용자 키를 사용하여 인증하지 않는 인증 방법입니다 . 대신, 사용하는 호스트 의 개인 키를 저장 한 /etc/ssh/어느을 읽기만 root.

이것을 설정하려면, .shosts사람들이 (로 로그인하지 않은 ~/.ssh) 사용자로 로그인하기를 원하는 사용자의 홈 디렉토리에 원격 머신에 이름이 지정된 파일을 만들어야합니다 . 파일 내용이 있어야합니다

server-hostname +

어디 server-hostname 서버 이름이며 +"모든 사용자"를 의미하는 와일드 카드 역할을하는 리터럴 더하기 기호입니다.

당신은 또한 원격 시스템 서버의 호스트 키가 나열 될 필요가 의미 서버의 호스트 키를 확인 할 수 있도록해야합니다에서 하나 /etc/ssh/ssh_known_hosts또는 ~/.ssh/known_hosts원격 시스템. 그렇지 않은 경우 원격 시스템에 로그인하여 실행하여 설정할 수 있습니다

ssh-keyscan server-hostname >> /etc/ssh/ssh_known/hosts

이 단계를 설정 한 후에는 다른 용도로 필요하지 않은 경우 서버에서 개인 키를 완전히 삭제할 수 있습니다. (그렇다면 언제든지 읽을 수 있도록 설정할 수 있습니다.root 있거나 다른 것으로 .)

특정 사용자가 원격 시스템에 액세스하는 것을 허용하거나 거부하는 등의 작업을 쉽게 수행 할 수도 있습니다. sshand 의 매뉴얼 페이지를 참조하십시오hosts.equiv 자세한 내용을.

이 설정의 한 가지 문제점은 원격 시스템에 로그인 한 사용자가 수정할 수 있다는 것 .shosts입니다. 원격 시스템에 다른 사용자로 로그인 할 수있는 방법은 없지만 원격 시스템에 대한 자신 또는 다른 사람의 액세스를 차단할 수 있습니다. 이것이 우려된다면, 당신은 .shosts단지 쓰기 만 할 수 root있거나 할 수 있습니다 -이것이 작동하는지 확실하지 않지만 시도하고 볼 수 있습니다. (와 같은 다른 방법 sudo은 사용자가 항상을 삭제할 수 있기 때문에 동일한 위험에 취약합니다 ~/.ssh/authorized_keys.)


+1; 이 옵션은 사용자가 포트 전달, 보안 복사 등과 같은 터미널 이외의 SSH 기능을 사용해야하는 경우에 유연성이 우수하다고 생각합니다. 대체 SSH 클라이언트도 작동해야합니다. 이 sudo옵션은 잠긴 환경에서 더 나을 수 있습니다.
mpontillo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.