systemctl status sshd.service and journalctl -xe for details 에러

[요약]
centos sshd 기동시에 jounralctl xe 오류 및 systemctl status sshd의 [exit] 255로 빠지면 setenforce 0으로 SELINUX 옵션을 변경해주고 돌리면 정상 기동된다.


/etc/selinux/config 파일내에 옵션이 있으며
1. enforcing – SELINUX 보안정책
2. poermissive – 보안정책대신 경고프린트
3. disabled – 보안정책 미사용
서버 기동시 기본은 1번이다.

Linux 시스템 (이 연습에서는 CentOS 7.3을 사용)에서 SSH 포트를 변경하여 기본이 아닌 SSH 포트 (TCP 포트 22)를 수신하는 방법을 설명합니다. 이 변경 사항을 수용하기 위해 SELinux 수정을 포함 할 것입니다.

1. 처음으로 sshd  서비스 의 기본 구성 및 출력을 확인  합니다.

    1.1  포트 구성을 위해 sshd_config 를 확인  합니다.

[root@system1 ~]# <strong>cat /etc/ssh/sshd_config | grep "Port 22"</strong>  
#Port 22

    포트 22도 주석 처리되고 있으며 기본적으로 포트 22를 사용합니다.

    1.2 시스템이 이제 포트 22에서 수신하는지 확인합니다.

[[root@server ~]# <strong>ss -tulpn | grep sshd</strong>
tcp    LISTEN     0      128       <strong>*:22</strong>            *:*                   users:(("sshd",pid=5485,fd=3))
tcp    LISTEN     0      128      <strong>:::22</strong>           :::*                   users:(("sshd",pid=5485,fd=4))

 1.3 SELinux는 강제  모드에 있어야  합니다. 그렇지 않으면 / etc / sysconfig / selinux 로 이동   하여 SELinux 모드를 변경하십시오.

혹시나 나중에 ssh 기동시에 안되는경우가 있다. setforce 0 으로 해서 permission 모드로 변경하면 정상적으로 올라간다. 상세내용은 아래참조

[root@system1 ~]# <strong>getenforce</strong> 
Enforcing

2. 기본 SSH 포트를 변경하고 서비스를 다시 시작합니다.

    2.1  포트 20002를 기본 포트로 사용하도록 sshd_config 파일을 수정  합니다.

[root@system1 ~]# <strong>vim /etc/ssh/sshd_config</strong>  
...........
Port 20002
...........

    2.2 sshd 서비스를 다시 시작합니다.

[root@server ~]# <strong>systemctl restart -l sshd</strong>
Job for sshd.service failed because a configured resource limit was exceeded. See "systemctl status sshd.service" and "journalctl -xe" for details.
[root@server ~]# <strong>systemctl status -l sshd</strong>
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: resources) since Sun 2017-02-26 23:43:51 WIB; 6s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 5534 ExecStart=/usr/sbin/sshd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 5485 (code=exited, status=0/SUCCESS)

Feb 26 23:43:51 server.mylab.com systemd[1]: sshd.service never wrote its PID file. Failing.
Feb 26 23:43:51 server.mylab.com systemd[1]: Failed to start OpenSSH server daemon.
Feb 26 23:43:51 server.mylab.com systemd[1]: Unit sshd.service entered failed state.
Feb 26 23:43:51 server.mylab.com systemd[1]: <strong>sshd.service failed</strong>.

          서비스가 시작되지 않은 것을 볼 수 있습니다. 이 문제를 해결하는 가장 쉬운 방법은 SELinux (setenforce 0)를 비활성화하여 sshd 서비스를 차단하는 이유인지 파악하는 것입니다. 이 연습에서는 sealert  를 사용하여 더 많은 정보를 얻기 위해 식별  할 것입니다.

    2.3 SELinux가 sshd가 포트 20002 / TCP에 바인딩하는 것을 차단하고 있는지 확인합니다.

[root@server ~]# <strong>sealert -a /var/log/audit/audit.log</strong> 
100% done
found 3 alerts in /var/log/audit/audit.log
...
SELinux is preventing /usr/sbin/sshd from name_bind access on the tcp_socket port 20002.

*****  Plugin bind_ports (92.2 confidence) suggests   ************************

If you want to allow /usr/sbin/sshd to bind to network port 20002
Then you need to modify the port type.
Do
<strong># semanage port -a -t PORT_TYPE -p tcp 20002</strong>
    where PORT_TYPE is one of the following: ssh_port_t, vnc_port_t, xserver_port_t.

*****  Plugin catchall_boolean (7.83 confidence) suggests   ******************

If you want to allow nis to enabled
Then you must tell SELinux about this by enabling the 'nis_enabled' boolean.

Do
setsebool -P nis_enabled 1

*****  Plugin catchall (1.41 confidence) suggests   **************************

If you believe that sshd should be allowed name_bind access on the port 20002 tcp_socket by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'sshd' --raw | audit2allow -M my-sshd
# semodule -i my-sshd.pp


Additional Information:
<strong>Source Context                system_u:system_r:sshd_t:s0-s0:c0.c1023</strong>
<strong>Target Context                system_u:object_r:unreserved_port_t:s0</strong>
<strong>Target Objects                port 20002 [ tcp_socket ]</strong>
Source                        sshd
Source Path                   /usr/sbin/sshd
Port                          20002
Host                          
Source RPM Packages           openssh-server-6.6.1p1-33.el7_3.x86_64
Target RPM Packages           
Policy RPM                    selinux-policy-3.13.1-102.el7_3.13.noarch
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Host Name                     server.mylab.com
Platform                      Linux server.mylab.com 3.10.0-514.6.1.el7.x86_64
                              #1 SMP Wed Jan 18 13:06:36 UTC 2017 x86_64 x86_64
Alert Count                   5
First Seen                    2017-02-26 23:43:47 WIB
Last Seen                     2017-02-26 23:44:33 WIB
Local ID                      b4e40db1-4036-4c63-b35e-6ea5f7bb01c8
...

    2.4 ssh 용 SELinux 포트를 확인하고 필요한 변경을 수행합니다.

[root@server ~]# <strong>semanage port -l | grep ssh</strong>
ssh_port_t                     tcp      22

          기본적으로 ssh 용 SELinux 포트는 포트 22에 바인드됩니다. 기본이 아닌 포트를 추가하십시오.

[root@server ~]# <strong>semanage port -a -t ssh_port_t -p tcp 20002</strong>
[root@server ~]# <strong>semanage port -l | grep ssh</strong>
ssh_port_t                     tcp      20002, 22

    2.5 sshd 서비스를 다시 시작합니다.

[root@server ~]# <strong>systemctl restart sshd</strong>
[root@server ~]# <strong>systemctl status sshd</strong>
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2017-02-26 23:46:43 WIB; 5s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 5689 ExecStart=/usr/sbin/sshd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 5690 (sshd)
   CGroup: /system.slice/sshd.service
           └─5690 /usr/sbin/sshd

Feb 26 23:46:43 server.mylab.com systemd[1]: Starting OpenSSH server daemon...
Feb 26 23:46:43 server.mylab.com systemd[1]: PID file /var/run/sshd.pid not readable (yet?) after start.
Feb 26 23:46:43 server.mylab.com sshd[5690]: <strong>Server listening on 0.0.0.0 port 20002.</strong>
Feb 26 23:46:43 server.mylab.com sshd[5690]: Server listening on :: port 20002.
Feb 26 23:46:43 server.mylab.com systemd[1]: <strong>Started OpenSSH server daemon</strong>.

4. 시스템이 이제 포트 20002에서 수신하는지 확인합니다.

[root@server ~]# <strong>ss -tulpn | grep sshd</strong>
tcp    LISTEN     0      128       <strong>*:20002</strong>                 *:*              users:(("sshd",pid=5690,fd=3))
tcp    LISTEN     0      128      :::20002                :::*              users:(("sshd",pid=5690,fd=4))

5. 다른 시스템이 포트 20002 / TCP에서이 시스템에 액세스 할 수 있도록 방화벽 규칙을 추가합니다.

    5.1 현재 방화벽 규칙을 확인합니다.

[root@server ~]# <strong>firewall-cmd  --permanent --list-all</strong>
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client https samba <strong>ssh</strong>
  ports: 3260/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules:

          ssh 서비스가 이미 허용 된 것을 볼 수 있지만 이것은 기본 TCP 포트 (포트 22)를 사용하는 ssh에 대한 것입니다. 따라서 포트 20002를 추가해야합니다.

    5.2 방화벽에 포트 20002를 추가하고 확인합니다.

[root@server ~]# <strong>firewall-cmd --permanent --add-port=20002/tcp</strong>
success
[root@server ~]# <strong>firewall-cmd --reload</strong>
success
[root@server ~]# <strong>firewall-cmd  --permanent --list-all</strong>
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client https samba ssh
  ports: <strong>20002/tcp</strong> 3260/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules:

덧글 삭제

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다