Linux의 .d 폴더 이해

소개

Linux 시스템을 사용해 본 적이 있다면 다음과 같은 이름의 디렉터리를 본 적이 있을 것입니다 /etc/logrotate.d/ 또는 /etc/cron.d/. 이러한 .d 폴더 는 MariaDB부터 SSH까지, 커널부터 PAM까지 많은 서비스에서 사용하는 관례를 따릅니다. 그 목적을 이해하면 모든 곳에서 보이기 시작할 것입니다. 예를 들면 mariadb.conf.d, sshd_config.d, modprobe.d, 그리고 pam.d.

하지만 시스템에 다음과 같은 디렉터리가 필요한 이유는 무엇인가요 /etc/logrotate.d/ 에 구성 파일을 배치하기 위한 디렉터리가 필요한 이유는 무엇이며, 단일 구성 파일(예: /etc/logrotate.conf)가 이미 존재하는데 왜 필요할까요? 이 문서에서는 .d 폴더의 목적과 Linux 시스템 관리에 필수적인 이유를 설명합니다.


.d 폴더란 무엇인가요?

목적: .d 폴더

 .d 폴더 관례는 복잡하거나 모듈식 구성이 필요한 서비스의 구성 파일 관리를 단순화하기 위해 존재합니다. 단일 모놀리식 구성 파일을 유지하는 대신, .d 폴더를 사용하면 구성을 더 작고 관리하기 쉬운 부분으로 나눌 수 있습니다.

 .d 폴더가 유용한 이유는 다음과 같습니다:

  • 모듈식 구성: 서비스는 .d 디렉터리에서 여러 구성 파일을 로드할 수 있어, 사용자와 패키지가 기본 구성 파일을 변경하지 않고 설정을 추가하거나 수정할 수 있습니다.
  • 패키지 관리: 패키지를 설치하거나 업데이트할 때 자체 구성 파일을 .d 디렉터리에 추가할 수 있으며 기존 설정을 덮어쓰지 않습니다.
  • 유연성: 관리자는 Ansible 또는 스크립트와 같은 도구를 사용하여 특정 구성 파일의 추가나 제거를 자동화할 수 있습니다.

예: /etc/logrotate.d/

/etc/logrotate.d/를 사용하는 이유는?

 logrotate, logrotate.conf,는 기본 구성 파일로서 로그 파일을 관리하기 위한 일반적인 규칙을 정의합니다. 그러나 새 서비스(Apache 또는 MySQL 등)를 설치하면 추가 로그 순환 규칙이 필요할 수 있습니다. 기본 logrotate.conf 파일을 수정하는 대신 새 서비스는 자체 구성 파일을 /etc/logrotate.d/.

예를 들어:

  • /etc/logrotate.d/apache2 에는 Apache 로그에 특화된 로그 순환 규칙이 포함될 수 있습니다.
  • /etc/logrotate.d/mysql 에는 MySQL 로그에 대한 순환 규칙이 정의될 수 있습니다.

이러한 모듈식 접근 방식은 다음을 보장합니다:

  • 관심사 분리: 각 서비스마다 자체 구성 파일이 있습니다.
  • 유지 관리 용이성: 구성 파일을 다른 서비스에 영향을 주지 않고 추가하거나 제거할 수 있습니다.

.d 폴더 작동 방식

파일 포함

서비스가 시작되거나 구성을 다시 로드하면 해당 서비스의 .d 디렉터리의 모든 파일을 자동으로 포함합니다. 이러한 파일의 확장자는 일반적으로 다음과 같습니다 .conf.

예를 들어:

  • Logrotate 는 실행될 때 /etc/logrotate.d/ 의 모든 파일을 읽습니다.
  • Systemd 은(는) .d 디렉터리에서 구성 재정의(override)를 로드합니다. 예를 들면 /etc/systemd/system/ 또는 /etc/systemd/system.conf.d/.

만약 .d 폴더 내부의 파일이 제거되면 서비스는 해당 구성을 제외하므로 시스템이 오류 없이 계속 동작합니다.

자동화 및 보안

 .d 폴더를 사용하면 자동화 작업이 간소화됩니다. 예를 들어:

  • 자동화 도구: Ansible 같은 도구는 .d 디렉터리를 관리하여 특정 구성 파일을 추가하거나 제거할 수 있습니다.
  • 위임된 구성: 보안 팀은 특정 구성 파일에 대한 액세스를 제한하기 위해 해당 파일을 .d 디렉터리에 배치할 수 있으며, 이를 통해 전체 구성 파일을 노출하지 않고 부분 업데이트를 수행할 수 있습니다.

변형: .d 폴더

Apache HTTPD 구성

Debian/Ubuntu에서 Apache는 conf-available 와 mods-available 등의 디렉터리를 사용하여 구성을 관리합니다. 관리자는 다음과 같은 명령을 사용하여 특정 모듈이나 구성을 활성화하거나 비활성화할 수 있습니다: a2enmod 또는 a2dismod.

Systemd 구성

Systemd는 .d 디렉터리를 사용하여 유닛 파일에 대한 재정의(override)를 정의합니다. 예를 들어:

  • /etc/systemd/system.conf.d/ 에는 시스템 전체 구성 재정의가 포함되어 있습니다.
  • /etc/systemd/system/<service>.d/ 을 사용하면 관리자가 서비스별 재정의(override)를 정의할 수 있습니다.

이러한 디렉터리는 구성의 우선순위를 단순화하여 활성 설정이 명확하고 모듈식으로 유지되도록 합니다.


이점: .d 폴더

1. 구성 관리 단순화

크고 복잡한 구성 파일을 유지하는 대신, .d 폴더를 사용하면 구성을 더 작고 모듈식 파일로 나눌 수 있습니다.

2. 유연성 향상

구성 파일을 서비스를 중단하거나 기본 파일을 대대적으로 편집할 필요 없이 동적으로 추가하거나 제거할 수 있습니다.

3. 자동화 지원

다음과 같은 도구를 사용하면 Ansible, Puppet, 또는 Chef 을(를) 통해 .d 디렉터리를 쉽게 관리하여 여러 시스템에 구성을 배포하거나 업데이트할 수 있습니다.

4. 보안 향상

구성 파일을 .d 디렉터리에 위임함으로써 관리자는 전체 구성을 노출하지 않고 특정 파일에 대한 액세스를 제어할 수 있습니다.


결론

 .d 폴더 관례는 Linux에서 구성을 모듈식이고 유연하며 자동화된 방식으로 관리하기 위한 강력한 도구입니다. 로그 순환 규칙, Apache 모듈, Systemd 재정의(override) 중 무엇을 다루든, .d 디렉터리를 이해하면 시스템 관리 작업을 크게 단순화할 수 있습니다.

댓글 남기기