설명
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"으로 소유자만 읽고 쓰도록 지정합니다. 다른 계정이 파일을 읽어야 한다면 해당 서비스에 필요한 권한을 별도로 설계하세요.