내 환경에서는 실제 .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
참고할 몇 가지 사항이 있습니다.
- 권한 모드 필드 끝에 있는 마침표는 SELinux 컨텍스트가 파일에 대해 활성 상태임을 나타냅니다.
- .ssh 폴더에는 다른 유형 필드(ssh_home_t)가 있습니다.
- 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에 대한 두 가지 좋은 참고 자료입니다.
답변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
변경 후에는 서비스를 다시 시작하는 것을 잊지 마세요.