ansible의 win_acl에서 "적용 대상 :이 폴더 만"을 실현하는 방법

7218 단어 AnsibleWindows

소개



ansible에서 Windows 설정을 시도했습니다.
폴더 권한 설정에서 아무래도 하고 싶었던 적이 없었다.
여러가지 시도해 보니, 공식 문서에 기재되어 있지 않은 방법을 사용할 수 있었다.
그런 이야기입니다.

전제



환경



  • 관리 대상
  • Windows 2012R2


  • ansible 실행자
  • Ubuntu 20.04 LTS (Windows10pro의 wsl2에서 작동)
  • ansible 2.9.13
  • 파이썬 3.8.2


  • 설명하지 않는 것



    ansible 설치, 기본적인 사용 방법 등은 생략합니다.
    그리고 「왜 그런 설정하고 싶어?」도 신경쓰지 않는 방향으로.

    주제



    하고 싶은 일


  • 새 폴더 만들기: T:\Share\test
  • Administrators 및 System으로 전체 제어
  • 사용자에게 읽기 및 실행 권한 (단, 적용 대상은 "이 폴더 전용")
  • 상위 폴더에서 상속 제거

  • 완성형



    폴더 프로퍼티의 보안의 상세 설정, 또는,icacls의 출력 결과가 그림과 같이 되면 완성.



    ansible로 실현하는 방법



    win_file, win_acl, win_acl_inheritance로 실현됩니다.
    우선 이틀 정도 걸쳐 도착한 완성형은 다음과 같다.

    hosts
    [windows]
    192.168.0.2
    
    [windows:vars]
    ansible_user=※ユーザ名※
    ansible_password=※パスワード※
    ansible_port=5986
    ansible_connection=winrm
    ansible_winrm_server_cert_validation=ignore
    

    playbook.yml
    - hosts: windows
      tasks:
        - name: フォルダ作成
          win_file:
            path: T:\Shares\test
            state: directory
    
        - name: 許可:フルコントロール:このフォルダー、サブフォルダ―およびファイル(Administrators, SYSTEM)
          win_acl:
            path:   T:\Shares\test
            rights: "{{ item.rights }}"
            user:   "{{ item.user }}"
            type:   allow
            # inherit のデフォルトは以下
            inherit: ObjectInherit,ContainerInherit
          with_items:
            - { rights: FullControl, user: BUILTIN\Administrators }
            - { rights: FullControl, user: SYSTEM }
    
        - name: 許可:読み取りと実行:このフォルダのみ(Users)
          win_acl:
            path: T:\Shares\test
            rights: "{{ item.rights }}"
            user: "{{ item.user }}"
            type: allow
            # win_aclドキュメントには明示されていないが、Noneの指定も可能
            inherit: None
          with_items:
            - { rights: ReadAndExec, user: BUILTIN\Users }
    
        - name: 継承無効化
          win_acl_inheritance:
            path: T:\Shares\test
            state: absent
    

    실행 방법
    % ansible-playbook -i hosts playbook.yml
    

    win_acl에서 '적용 대상'을 변경하는 방법



    win_acl에서 사용 권한 항목의 "적용 대상"은 inherit 매개 변수로 지정됩니다.
    win_acl – Set file/directory/registry permissions for a system user or group 」에 이하와 같이 기재되어 있습니다.


    실제로 시도해 보면 이런 느낌.


    inherit의 설정치
    적용 대상 표시


    ObjectInherit
    이 폴더와 파일

    ContainerInherit
    이 폴더와 하위 폴더

    ContainerInherit,ObjectInherit
    이 폴더, 하위 폴더 및 파일

    ※inherit 파라미터 생략시
    이 폴더, 하위 폴더 및 파일 (디렉토리 기본값 적용)



    어라? 이 폴더만 지정할 수 없습니까?

    실은 「inherit: None」을 사용할 수 있다



    뭐 위의 yml 파일로 대답해 버리는 것입니다만.
    Comments 링크 를 따라가면 ContainerInherit, ObjectInherit 이외에
    None 을 지정할 수 있을 것 같아서, 해 보면 할 수 있었다고 하는 이야기였습니다.


    inherit의 설정치
    적용 대상 표시


    None
    이 폴더만


    결론



    vscode에서 작업을 별도의 파일로 만들고 inherit: None를 지정하면 "그런 값은 허용되지 않습니다."라고 화가납니다.
    실행에는 문제 없기 때문에 상관없습니다만, 이 에러만 무시하는 것 같은 설정은 할 수 없는 것인가…



    win_acl은 권한 추가 명령이므로 여러 가지 실험을 원할 때마다 폴더를 삭제하는 것이 좋습니다.
    그렇게 하지 않으면 과거의 설정이 겹쳐져, 예상한 결과가 되지 않는 경우가 있습니다.

    좋은 웹페이지 즐겨찾기