CentOS 6/7에서 Server에서 RSA 공개키 설정을 해도 passwd 입력을 받을 때가 있다.

SELinux 가 활성화 되어 있는 경우 .ssh 폴더의 Type 설정이 제대로 되어 있지 않아서 발생한다.

해결 방법은 아래와 같다.

 

[ ssh 공개키 설정 시 확인 사항 ]

1. SELinux 비활성화

# SELinux 활성화 확인
[root@skt-ocs2th-test ~]# getenforce
Enforcing
# SELinux 비활성화
[root@skt-ocs2th-test ~]# setenforce 0
# SELinux 비활성화 확인
[root@skt-ocs2th-test ~]# getenforce
Permissive

## selinux 설정 파일 변경 enforcing -> disabled
vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disabled

2. SELinux 활성화 시 확인 사항

2-1. restorecon 명령어로 SELinux 보안 Context 복구한다. ( type이 ssh_home_t로 설정되어야 한다.)

[jenkins@skt-ocs2th-test ~]$ restorecon -R -v ~/.ssh
restorecon reset /home/jenkins/.ssh context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /home/jenkins/.ssh/id_rsa context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /home/jenkins/.ssh/authorized_keys context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /home/jenkins/.ssh/id_rsa.pub context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
[jenkins@skt-ocs2th-test ~]$
[jenkins@skt-ocs2th-test ~]$ ls -Z .ssh
-rw-------. jenkins jenkins unconfined_u:object_r:ssh_home_t:s0 authorized_keys
-rw-------. jenkins jenkins unconfined_u:object_r:ssh_home_t:s0 id_rsa
-rw-r--r--. jenkins jenkins unconfined_u:object_r:ssh_home_t:s0 id_rsa.pub

2-2. restorecon 명령어를 수행해도 ssh_home_t로 복구 되지 않는 경우

 - 이 경우 해당 계정의 home이 /var/lib과 같이 특수한 directory 아래에 생성되었다면 SELinux의 다른 Type 설정에 따라 ssh_home_t가 설정되지 않을 수 있다.

 - 아래의 경우 jenkins 계정의 home은 /var/lib이기 때문에 .ssh 폴더의 type이 var_lib_t로 되어 있다.

[jenkins@skt-ocs2th ~]$ ls -aZ
drwx------. jenkins jenkins system_u:object_r:var_lib_t:s0   .
drwxr-xr-x. root    root    system_u:object_r:var_lib_t:s0   ..
-rw-------. jenkins jenkins unconfined_u:object_r:var_lib_t:s0 .bash_history
-rw-r--r--. jenkins jenkins system_u:object_r:var_lib_t:s0   .bash_logout
-rw-r--r--. jenkins jenkins system_u:object_r:var_lib_t:s0   .bash_profile
-rw-r--r--. jenkins jenkins system_u:object_r:var_lib_t:s0   .bashrc
drwx------. jenkins jenkins unconfined_u:object_r:var_lib_t:s0 .ssh
-rw-------. jenkins jenkins unconfined_u:object_r:var_lib_t:s0 .viminfo

 - /etc/selinux/targeted/contexts/files/file_contexts 파일에서 해당 계정에 맞는 path를 지정해서 ssh_home_t로 바꿔준다.

/var/lib(/.*)?  system_u:object_r:var_lib_t:s0
/var/lib(/.*)/.ssh(/.*)?        unconfined_u:object_r:ssh_home_t:s0

 - restorecon 명령어로 SELinux 보안 Context 변경한다.

[jenkins@skt-ocs2th .ssh]$ restorecon -R -v ~/.ssh
restorecon reset /var/lib/jenkins/.ssh/id_rsa context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /var/lib/jenkins/.ssh/authorized_keys context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /var/lib/jenkins/.ssh/id_rsa.pub context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0

 

+ Recent posts