시스템에서 실행 중 서비스의 설치 패키지(rpm) 확인

1.특정 서비스를 설치한 패키지(rpm)가 무엇인지 알아야 할 경우가 있습니다.

  • 설치는 했는데 무슨 패키지로 설치 했는지 기억 나지 않음.
  • 지우고 싶은 서비스 인데, 무슨 패키지인지 알 수 가 없음.
  • 시스템 관리자가 알지 못하는 서비스가 동작 되고 있을때, 무슨 패키지로 설치 되었는지 알고 싶습니다. 

 

2.시스템에 설치, 동작 중인 서비스의 확인 방법은 아래와 같습니다.

1. 시스템에 설치된 서비스 목록 확인

[root@localhost ~]# systemctl list-units --type=service

2. 현재 실행 중인 서비스 목록 확인

[root@localhost ~]# systemctl list-units --type=service --state=active

또는

[root@localhost ~]# systemctl -l | grep rpcbind

3. 시스템에 설치 되었으나 현재 동작 중이지 않은 비활성화 된 서비스 확인 (수동으로 시작 해주어야 함)

[root@localhost ~]# systemctl list-units --type=service --state=inactive

4. 서비스 구동에 실패한 서비스 확인 (실행에 실패한 서비스)

[root@localhost ~]# systemctl list-units --type=service --state=failed

 

3.어떤 서비스가 어떤 패키지를 통해 설치 되었는지는 아래와 같이 확인 합니다.

system를 통해 등록된 서비스 이름(UNIT) 을 rpm -qf 명령어로 확인 합니다.

 

[ 예시 - ssh 서비스 이름 확인 ]

[root@localhost ~]# systemctl list-units --type=service --state=active
UNIT                                                  LOAD   ACTIVE SUB     DESCRIPTION
auditd.service                                        loaded active running Security Auditing Service
chronyd.service                                       loaded active running NTP client/server
...
sshd.service                                          loaded active running OpenSSH server daemon

rpm -qf 커맨드를 이용하여 sshd.service 를 설치한 패키지 확인

[root@localhost ~]# rpm -qf /usr/lib/systemd/system/sshd.service
openssh-server-8.0p1-17.el8_7.x86_64

 

다른 예시로 chronyd.service 도 알아 보겠습니다.

[root@localhost ~]# rpm -qf /usr/lib/systemd/system/chronyd.service
chrony-4.2-1.el8.rocky.1.0.x86_64

 

4.systemd 방식은 /usr/lib/systemd/system 디렉토리에 서비스 유닛이 등록됩니다.

/usr/lib/systemd/system/ 디렉토리는 systemd 서비스 유닛 파일이 저장되는 위치입니다. 이 디렉토리에 있는 파일들은 시스템에서 실행되는 서비스, 소켓, 타이머, 스코프 등을 정의합니다. 

 

각 유닛 파일은 해당 서비스 또는 유닛의 설정과 관련된 정보를 포함하며, systemd가 서비스를 시작, 중지, 관리할 때 사용됩니다.

[root@localhost ~]# ls -al /usr/lib/systemd/system
total 948
drwxr-xr-x. 23 root root 12288 Sep  4 16:24 .
drwxr-xr-x. 16 root root  4096 Mar  7 08:25 ..
-rw-r--r--.  1 root root   275 Apr  7  2021 arp-ethers.service
-rw-r--r--.  1 root root  1661 Sep 30  2022 auditd.service
lrwxrwxrwx.  1 root root    14 Feb 22  2023 autovt@.service -> getty@.service
-rw-r--r--.  1 root root   956 Feb 22  2023 basic.target
drwxr-xr-x.  2 root root     6 Feb 22  2023 basic.target.wants
-r--r--r--.  1 root root   408 Oct  2  2022 blk-availability.service
-rw-r--r--.  1 root root   419 Jun 22  2018 bluetooth.target
-rw-r--r--.  1 root root   455 Feb 22  2023 boot-complete.target
-rw-r--r--.  1 root root   209 Nov 15  2022 chrony-dnssrv@.service
-rw-r--r--.  1 root root   138 Nov 15  2022 chrony-dnssrv@.timer
-rw-r--r--.  1 root root   551 Nov 15  2022 chronyd.service
-rw-r--r--.  1 root root   500 Nov 15  2022 chrony-wait.service
-rw-r--r--.  1 root root  1082 Feb 22  2023 console-getty.service
-rw-r--r--.  1 root root  1263 Feb 22  2023 container-getty@.service
-rw-r--r--.  1 root root   294 Apr  5 07:54 cpupower.service
-rw-r--r--.  1 root root   356 Oct  1  2022 crond.service
-rw-r--r--.  1 root root   465 Jun 22  2018 cryptsetup-pre.target
-rw-r--r--.  1 root root   412 Jun 22  2018 cryptsetup.target
...

 

5. 모든 설치된 패키지는 'rpm -qf /usr/lib/systemd/system/서비스 명'으로 모두 확인 할 수 있습니다.

단, 서비스가 systemd 방식으로 관리되는 경우 입니다.

 

CentOS 7 이상인 경우 대부분 systemd 방식으로 관리 되며 표준 관리 방법 입니다.

 

서비스가 systemd 로 동작 중이나 rpm 패키지로 설치 되지 않은 경우는 아래의 명령어로 확인 가능합니다.

[root@localhost ~]# systemctl status [SERVICE_NAME]

결과에서 "ExecStart" 라인에 서비스의 실행 파일 경로를 확인

 

침해 사고 대응 하시는 분도 알아 두시면 좋습니다. 쓸일이 생깁니다.