systemd 서비스 관리 마스터하기

systemd 서비스 관리 마스터하기

systemd란 무엇이며 왜 중요할까요?

systemd는 현대 리눅스 시스템의 핵심 구성 요소 중 하나입니다. 간단히 말해, systemd는 시스템 부팅 과정과 서비스 관리를 담당하는 시스템 및 서비스 관리자입니다. 이전에는 init 시스템이 이 역할을 수행했지만, systemd는 더 많은 기능과 효율성을 제공하며, 오늘날 대부분의 주요 리눅스 배포판에서 기본 시스템 관리자로 사용되고 있습니다.

systemd가 중요한 이유는 다음과 같습니다.

systemd의 기본적인 사용법

systemd를 사용하는 가장 기본적인 명령어는 systemctl입니다. 이 명령어를 통해 서비스를 시작, 중지, 재시작, 상태 확인 등을 할 수 있습니다.

자주 사용하는 systemctl 명령어

예를 들어, Apache 웹 서버를 재시작하려면 다음 명령어를 사용합니다.

sudo systemctl restart apache2

MySQL 데이터베이스 서비스의 상태를 확인하려면 다음 명령어를 사용합니다.

sudo systemctl status mysql

systemd 서비스 파일 이해하기

systemd 서비스는 서비스 파일이라는 텍스트 파일에 정의됩니다. 이 파일은 서비스의 동작 방식, 의존성, 시작/중지 스크립트 등을 정의합니다. 서비스 파일은 일반적으로 /lib/systemd/system/ 또는 /etc/systemd/system/ 디렉토리에 위치합니다. /etc/systemd/system/에 있는 파일이 /lib/systemd/system/에 있는 파일보다 우선순위가 높습니다.

서비스 파일의 주요 섹션

서비스 파일은 주로 다음과 같은 섹션으로 구성됩니다.

다음은 간단한 서비스 파일의 예시입니다.

[Unit]

Description=My Custom Service

After=network.target


[Service]

User=myuser

WorkingDirectory=/home/myuser/myapp

ExecStart=/usr/bin/python3 /home/myuser/myapp/main.py

Restart=on-failure


[Install]

WantedBy=multi-user.target

이 예시에서:

서비스 파일 생성 및 수정하기

새로운 서비스를 생성하거나 기존 서비스를 수정하려면 다음 단계를 따릅니다.

    • /etc/systemd/system/ 디렉토리에 새로운 서비스 파일을 생성합니다 (예: myservice.service).
    • 원하는 설정을 서비스 파일에 작성합니다.
    • sudo systemctl daemon-reload 명령어를 실행하여 systemd 데몬을 다시 로드합니다.
    • sudo systemctl enable myservice 명령어를 실행하여 서비스를 활성화합니다.
    • sudo systemctl start myservice 명령어를 실행하여 서비스를 시작합니다.
    • sudo systemctl status myservice 명령어를 실행하여 서비스 상태를 확인합니다.

기존 서비스 파일을 수정하는 경우, 위의 단계를 반복하되, systemctl daemon-reload 명령어를 실행하는 것을 잊지 마십시오.

systemd journald를 사용한 로그 관리

systemd는 journald라는 강력한 로그 관리 시스템을 제공합니다. journald는 시스템 로그를 중앙 집중식으로 저장하고 관리하며, 다양한 필터를 사용하여 특정 로그 메시지를 검색할 수 있습니다.

journalctl 명령어

journald 로그를 확인하려면 journalctl 명령어를 사용합니다. 몇 가지 유용한 옵션은 다음과 같습니다.

예를 들어, Apache 웹 서버의 오류 로그를 확인하려면 다음 명령어를 사용합니다.

sudo journalctl -u apache2 -p err

systemd 타이머 사용하기

systemd 타이머는 cron과 유사한 기능을 제공하며, 특정 시간에 또는 주기적으로 작업을 실행하는 데 사용할 수 있습니다. systemd 타이머는 서비스 파일과 함께 사용되며, 서비스 파일을 실행할 시점을 정의합니다.

타이머 파일 생성하기

타이머 파일은 /etc/systemd/system/ 디렉토리에 위치하며, .timer 확장자를 가집니다. 타이머 파일은 다음과 같은 섹션으로 구성됩니다.

다음은 매일 자정에 스크립트를 실행하는 타이머 파일의 예시입니다.

[Unit]

Description=My Daily Script Timer


[Timer]

OnCalendar=-- 00:00:00

Persistent=true


[Install]

WantedBy=timers.target

이 예시에서:

타이머와 서비스 연결하기

타이머를 특정 서비스와 연결하려면, 타이머 파일에서 [Timer] 섹션에 Unit= 옵션을 사용하여 서비스 파일의 이름을 지정합니다. 예를 들어, myscript.service 서비스를 실행하는 타이머 파일은 다음과 같습니다.

[Unit]

Description=My Daily Script Timer


[Timer]

OnCalendar=--* 00:00:00

Persistent=true

Unit=myscript.service


[Install]

WantedBy=timers.target

타이머 활성화 및 시작하기

타이머를 활성화하고 시작하려면 다음 명령어를 사용합니다.

sudo systemctl enable mytimer.timer

sudo systemctl start mytimer.timer

타이머의 상태를 확인하려면 다음 명령어를 사용합니다.

sudo systemctl status mytimer.timer

systemd를 활용한 서비스 보안 강화

systemd는 서비스 보안을 강화하기 위한 다양한 기능을 제공합니다. 이러한 기능을 활용하여 서비스가 시스템에 미치는 영향을 최소화하고, 잠재적인 보안 취약점을 줄일 수 있습니다.

User/Group 설정

서비스를 특정 사용자 및 그룹 권한으로 실행하여, 서비스가 root 권한을 남용하는 것을 방지할 수 있습니다. 서비스 파일의 UserGroup 옵션을 사용하여 설정할 수 있습니다.

CapabilityBoundingSet 설정

서비스가 사용할 수 있는 Linux capabilities를 제한하여, 서비스가 시스템에 미치는 영향을 최소화할 수 있습니다. 서비스 파일의 CapabilityBoundingSet 옵션을 사용하여 설정할 수 있습니다.

ReadWritePaths/ReadOnlyPaths 설정

서비스가 읽고 쓸 수 있는 파일 시스템 경로를 제한하여, 서비스가 시스템의 중요한 파일을 수정하는 것을 방지할 수 있습니다. 서비스 파일의 ReadWritePathsReadOnlyPaths 옵션을 사용하여 설정할 수 있습니다.

PrivateTmp 설정

서비스에 전용 /tmp 디렉토리를 제공하여, 다른 서비스와 임시 파일을 공유하는 것을 방지할 수 있습니다. 서비스 파일의 PrivateTmp=true 옵션을 사용하여 설정할 수 있습니다.

NoNewPrivileges 설정

서비스가 새로운 권한을 획득하는 것을 방지하여, 서비스가 권한 상승 공격에 악용되는 것을 방지할 수 있습니다. 서비스 파일의 NoNewPrivileges=true 옵션을 사용하여 설정할 수 있습니다.

흔한 오해와 사실

systemd는 복잡하고 어렵다는 오해가 있지만, 기본적인 개념과 사용법을 이해하면 매우 강력하고 유용한 도구입니다. 몇 가지 흔한 오해와 사실은 다음과 같습니다.

유용한 팁과 조언

자주 묻는 질문

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다