[Ansible] 폴더는 755, 파일은 644로 mode 설정하기 (chmod)

by 스뎅(thDeng) on

Ansible에서 폴더와 파일 권한을 설정할 때 file module을 쓰면 된다.

- name: "Mode 755 for directory"
  file:
    path: "/home/leocat/tmp"
    mode: 0755

그런데, 폴더 mode755를 주고, 파일은 644를 주고 싶다면?? 사실 ansible로 깔끔히 할 수 있는 방법이 없다.

file modulemode/usr/bin/chmod 설정을 그대로 사용하기 때문에 그 방법을 이용하자. mode의 소문자 x는 폴더는 검색(리스팅) 권한을 뜻하고 파일의 경우는 실행 권한을 뜻한다. 하지만, 대문자 X는 폴더인 경우는 소문자 x와 동일하지만, 파일인 경우는 다른 사용자에게 이미 실행 권한이 있을 때만 실행 권한을 주게 된다.

execute (or search for directories) (x), execute/search only if the file is a directory or already has execute permission for some user (X) – from chmod man page

- name: "Mode 755 for directory and 644 for files"
  file:
    path: "/home/leocat/tmp"
    mode: u=rwX,g=rX,o=rX
    recurse: yes

위처럼 recurse를 주고 실행하면 /home/leocat/tmp는 폴더이기 때문에 실행 권한이 추가된다. 그리고 hello.sh처럼 이미 실행 권한이 있는 경우는 그걸 따라서 권한이 추가되고, hello.txt처럼 실행 권한이 하나도 없는 경우는 그걸 따라서 권한이 없게 된다.

$ ls -l /home/leocat
합계 0
dr-x------ 2 deploy deploy 37  2월 20 13:41 tmp
$ ls -l /home/leocat/tmp
합계 4
-rwx------ 1 deploy deploy 13  2월 20 13:11 hello.sh
-rw------- 1 deploy deploy  0  2월 20 13:41 hello.txt

$ ansible ... # ansible 스크립트 실행 시켜주면..

$ ls -l /home/leocat
합계 0
drwxr-xr-x 2 deploy deploy 37  2월 20 13:41 tmp
$ ls -l /home/leocat/tmp
합계 4
-rwxr-xr-x 1 deploy deploy 13  2월 20 13:11 hello.sh
-rw-r--r-- 1 deploy deploy  0  2월 20 13:41 hello.txt

참고

별도로 명시하지 않을 경우, 이 블로그의 포스트는 다음 라이선스에 따라 사용할 수 있습니다: Creative Commons License CC Attribution-NonCommercial-ShareAlike 4.0 International License