OpenSSH는 심볼릭 링크가 있는 .ssh 디렉토리를 거부합니다.

OpenSSH는 심볼릭 링크가 있는 .ssh 디렉토리를 거부합니다.

내 환경에서는 실제 .ssh 디렉터리가 외부 장치에 존재하며 ~/.ssh해당 디렉터리에서 심볼릭 링크를 통해 연결됩니다. 클라이언트로 사용하는데는 문제가 없으나 openssh, sshd인증을 위해 공개키를 사용하는 것은 허용하지 않습니다.

.ssh외부 장치의 디렉터리를 사용할 수 있는 방법이 있나요 ?

journalctl -u sshd
Authentication refused: bad ownership or modes for directory /pool/secure/ssh

권한

$ ls -ld ~/.ssh
lrwxrwxrwx. 1 foobar foobar 28 Mar  7 19:59 .ssh -> /pool/secure/ssh

$ ls -l /pool/secure/ssh
-rw-------  1 foobar foobar  381 Jun 29 15:01 authorized_keys
-rw-------  1 foobar foobar  292 Jun 29 15:01 config
-rw-------. 1 foobar foobar 5306 Jun 23 02:16 known_hosts

$ ls -ld /pool/secure/ssh
drwx------. 2 foobar foobar 8 Jun 29 15:01

버전

$ ssh -V       
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

2017-06-29 (프롬프트)에 추가됨

  • OpenBSD와 FreeBSD는 chmod를 통해 심볼릭 링크의 액세스 권한을 수정할 수 있습니다. 그러나 Linux에는 이 작업을 수행하는 시스템 호출이 없습니다.
  • stat(2) 링크를 클릭하세요.
  • 기본 사양 Issue 7st_mode 필드에 반환된 파일 모드 비트의 값이 지정되지 않았습니다.

2017-06-30에 해결됨

인증_보안_경로답이 있습니다. 이 기능은 상위 디렉터리를 포함하여 파일 및 디렉터리에 대한 권한을 확인합니다. home 또는 root가 전달될 때까지 올바른 권한이 설정되었는지(소유자만 쓸 수 있음) 계속 확인합니다.

ex) general environment
/home/foobar/.ssh (raise error if group and other can write)
/home/foobar (same)
break!

ex) special environment (like me)
/home/foobar/.ssh -> /pool/secure/ssh
/pool/secure/ssh (raise error if group and other can write)
/pool/secure (same)
/pool (same)
/ (same)
break!

답변1

이는 권한 문제입니다.

foobar위의 모든 디렉터리(님의 홈 포함)의 권한뿐만 아니라 .ssh외부 장치의 대상 디렉터리 위의 모든 디렉터리의 권한도 확인해야 합니다 . foobar대상 디렉터리를 제외하고 .ssh다른 모든 디렉터리는 루트가 소유해야 하며 다른 사람이 쓸 수 없습니다.


SELinux 문제가 발생할 수도 있습니다. 다음 플래그를 사용하여 파일 및 디렉터리의 SELinux 보안 컨텍스트를 확인할 수 있습니다 -Z.

[sheepd0g@dogpound ~]$ ls -ZA
drwxr-xr-x. root   root   system_u:object_r:home_root_t:s0 ..
drwxrwxr-x. sheepd0g sheepd0g unconfined_u:object_r:user_home_t:s0 20170620-auditlogs
-rw-rw-r--. sheepd0g sheepd0g unconfined_u:object_r:user_home_t:s0 random.dat
drwx------. sheepd0g sheepd0g unconfined_u:object_r:ssh_home_t:s0 .ssh

참고할 몇 가지 사항이 있습니다.

  1. 권한 모드 필드 끝에 있는 마침표는 SELinux 컨텍스트가 파일에 대해 활성 상태임을 나타냅니다.
  2. .ssh 폴더에는 다른 유형 필드(ssh_home_t)가 있습니다.
  3. SELinux 객체, 유형, 정책 및 설정은 배포판과 심지어 주요 버전마다 다를 수 있습니다. RHEL6에서 작동하는 것이 SUSE 10 또는 Debian 6에서는 작동하지 않을 수 있습니다(Debian 6에 기본적으로 SELinux 적용 기능이 있는지는 잘 모르겠습니다...)

그럼에도 불구하고 다른 모든 방법이 실패하더라도 이곳은 보기 좋은 곳입니다. 다음 명령을 사용하면 SELinux가 적용 모드에 있는지 쉽게 확인할 수 있습니다.

[sheed0g@dogpound ~]$ sudo getenforce
Enforcing

SELinux에 문제가 있다고 의심되는 경우 SELinux를 허용 모드로 전환할 수 있습니다(정책을 활성화하지만 조치를 취하지 않고 로그/감사 조치만 취함).

[sheepd0b@dogpound ~]$ sudo setenforce 0
[sheepd0b@dogpound ~]$ sudo getenforce
Permissive

문제가 해결되면 이것이 문제일 수 있습니다.

SELinux는 여기에 설명된 것보다 훨씬 더 복잡합니다. .ssh/가 NFS 공유에 있는 경우 SELinux의 부울 설정을 추가로 변경해야 합니다.

다음은 SELinux에 대한 두 가지 좋은 참고 자료입니다.

SELinux의 CentOS 위키 항목

Red Hat Enterprise Linux 7 SELinux 가이드

답변2

내 경우(Lenovo NAS의 경우) 권한을 변경해도 도움이 되지 않았지만 번들 마운트로 문제가 해결되었습니다.

바꾸다

ln -s  /pool/secure/ssh  .ssh

내가 해냈어

mkdir -m 700 .ssh
mount --bind  /pool/secure/ssh  .ssh

답변3

SSH는 이유가 있다고 불평합니다. 디렉토리 ~/.ssh/는 누구나 쓸 수 있으므로 누구나 수정할 수 있습니다.

이것이 문제가 되지 않으면 설정하면 StrictModes no그대로 sshd_config사용됩니다. sshd변경 후에는 서비스를 다시 시작하는 것을 잊지 마세요.

관련 정보