가능 : 디렉터리 및 파일 사용 권한을 재귀 적으로 설정하는 방법


40

무언가, 나는 이것을 할 수있다 :

file: dest=/foo/bar/somedir owner=root group=apache mode=0775 recurse=yes

그리고이 경로의 모든 디렉토리와 파일에 대해 소유자, 그룹 및 권한을 재귀 적으로 0775로 설정합니다. 하지만 디렉토리를 0775로 설정하고 파일을 0664로 설정하려고합니다. 이렇게 할 수있는 방법이 있습니까?


답변:


19
file: dest=/foo/bar/somedir owner=root group=apache mode=u=rwX,g=rX,o=rX recurse=yes

디렉토리를 755로 설정하고 파일을 644로 설정합니다.


1
테스트 됨. 완전한. 고맙습니다. :-)
Edward Ned Harvey

파일에 대해서는 작동하지 않습니다.
motto

1
@ Adam Chance 마술은 어디에 있습니까? u, g, o를 지정하면 번호와 다른 점을 어떻게 알 수 있습니까? (그리고 644는 어디에 쓰여 집니까?)
linuxbandit

3
소스 코드는 상징적 인 u.g.o 처리가 "man chmod"의 처리와 동일하다는 것을 언급합니다. 대문자 X는 dir / file 상태와 기존 실행 비트를 기반으로 특수 처리됩니다. github.com/ansible/ansible/blob/...
Marc Tamsky

다른 말로, X ~이다. x 디렉토리의 경우, 파일의 경우는 없습니다. 그리고 그것이 어떻게 chmod, 아니라 ansible 모드 문자열을 처리합니다. 나는 원한다 S 마찬가지로 취급 될 것이다.
x-yuri

19

Ansible 파일 / 복사 모듈은 다음과 같은 세분성을 제공하지 않습니다.   파일 유형에 따라 권한을 지정하면   이 줄을 따라 뭔가를함으로써 수동으로 이것을하십시오 :

- name: Ensure directories are 0755
  command: find {{ path }} -type d -exec chmod 0755 {} \;

- name: Ensure files are 0644
  command: find {{ path }} -type f -exec chmod 0644 {} \;

이것들은 {{ path }} 과   모든 파일 또는 디렉토리의 권한을 지정된 파일로 변경   사용 권한.

출처: https://stackoverflow.com/a/28782805/1306186


@luckytaxi gmangin이 제공하는 대답은 재귀 적으로 하위 디렉토리의 권한을 설정하지 않습니다.
Dejay Clayton

아 맞다! 나는 그 하나를 보았다. recurse 옵션을 사용하지만 다른 옵션은 사용하지 마십시오.
luckytaxi

9

모듈 파일을 사용할 수있게하려면 다음을 수행 할 수 있습니다.

파일 : dest = / foo / bar / somedir 소유자 = 루트 그룹 = apache 모드 = 0644 recurse = yes

file : dest = / foo / bar / somedir owner = 루트 그룹 = 아파치 모드 = 0775

이 방법을 사용하면 먼저 모든 파일 (recurse = yes)을 '644'로 설정 한 다음 / foo / bar / somedir을 '775'로 설정합니다.

플레이 북을 재생할 때마다 디렉토리 사용 권한이 변경되므로 완벽하지 않습니다. 적어도 모듈 명령과는 달리 멱등수입니다.

'변경됨'상태를 원하지 않으면 module stat를 사용할 수 있습니다. / foo / bar / somedir에있는 모든 파일과 디렉토리를 나열하여 응답을 등록한 다음 해당 파일에 대해서만 루프를 만들 수 있습니다.


6
귀하의 대답은 모든 하위 파일과 하위 디렉토리를 644로 설정하고 최상위 디렉토리 만 775로 설정합니다. 디렉토리들 서브 디렉토리를 포함하여 775가되어야합니다.
Edward Ned Harvey

5

나는 얼마나 많은 감각이 0775에 전화 번호부를 놓을 것인지에 관해 명확히하지 않는다 ( rwxrwxr-x ) 및 파일을 0644 ( rw-r--r-- ) : 그룹으로 쓸 수있는 디렉토리는 있지만 파일은 아닌가?

파일을 0664 ( rw-rw-r-- ) 디렉토리가 가로 지르는 동안 파일이 실행 가능하지 않게하려면 오직 하나만 포함하는 우아한 해결책이 있습니다 chmod 명령:

chmod -c -R ug=rw,o=r,a-x+X "{{top_dir}}"

여기에 어떻게 사용할 수 있을까요? 책임감있는 :

- name: recursive chmod example
  command: |
    chmod -c -R ug=rw,o=r,a-x+X "{{item}}"
  register: chmod_status
  changed_when: chmod_status.stdout != ""
  with_items:
    - "/home/user/sample/dir"

chmod -c "변경됨"상태를 채우기 위해 편리하게 사용할 수있는 모든 변경 사항을 인쇄합니다. 책임감있는 . 나는 그것이 의미가 있기를 바랍니다.


3

필요한 경우에만 개조 변경 :

- name: make dirs 0755   
  command: find {{ your_path }} -type d ! -perm 0755 -exec chmod 0755 {} \;

- name: make files 0644   
  command: find {{ your_path }} -type f ! -perm 0644 -exec chmod 0644 {} \;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.