Ansible에서 파일 권한이 위험하게 생성될 수 있는 경우

파일의 용도에 맞는 권한을 명시하고 소유자와 실제 적용 결과를 확인하세요.

설명

Ansible 작업이 새 파일이나 디렉터리를 만들 때 mode를 명확히 지정하지 않으면 권한이 너무 넓거나 예측하기 어려울 수 있습니다. 실행 환경의 기본 umask나 모듈 동작에 따라 실제 권한이 달라질 수 있기 때문입니다.

설정 파일이나 개인 키처럼 민감한 파일이 의도보다 넓은 권한으로 만들어지면 다른 사용자나 프로세스가 읽거나 수정할 수 있습니다. 기존 파일의 권한이 유지되는 경우도 있으므로 실제 상태를 함께 확인해야 합니다.

잠재적 영향

  • 민감한 파일의 읽기 권한이 넓어 정보가 노출될 수 있습니다.
  • 환경마다 파일 권한이 달라져 배포 결과가 일관되지 않을 수 있습니다.
  • 설정 파일을 다른 사용자가 수정해 장애나 보안 문제를 일으킬 수 있습니다.

해결 방법

  • 생성 작업에 용도에 맞는 mode를 명시하세요. 8진수 권한은 "0600"처럼 따옴표로 감싸세요.
  • 민감한 파일에는 소유자에게 필요한 최소 권한을 부여하고 소유자·그룹도 확인하세요. 디렉터리는 접근에 실행 권한이 필요하므로 파일 권한을 그대로 적용하지 마세요.
  • create: true, state: touch, state: directory, get_url 같은 생성 작업과 배포 후 실제 권한을 확인하세요.

예시

일반 파일의 권한을 비교합니다. 다운로드 URL과 경로를 실제 환경에 맞추고, 소유자와 서비스의 읽기 권한 요구도 확인하세요.

변경 전

yaml
- name: create config file without explicit permissions
  ansible.builtin.lineinfile:
    path: /etc/sample.conf
    create: true
    line: sample=true

- name: download file without explicit permissions
  ansible.builtin.get_url:
    url: https://example.com/file.txt
    dest: /tmp/file.txt

파일을 생성하지만 권한을 명시하지 않아 실제 권한이 환경이나 기존 상태에 따라 달라질 수 있습니다.

변경 후

yaml
- name: create config file with explicit permissions
  ansible.builtin.lineinfile:
    path: /etc/sample.conf
    create: true
    line: sample=true
    mode: "0600"

- name: download file with explicit permissions
  ansible.builtin.get_url:
    url: https://example.com/file.txt
    dest: /tmp/file.txt
    mode: "0600"

mode: "0600"으로 소유자만 읽고 쓰도록 지정합니다. 다른 계정이 파일을 읽어야 한다면 해당 서비스에 필요한 권한을 별도로 설계하세요.

참조