web-dev-qa-db-ja.com

ACLを使用してumaskをオーバーライドして、特定のディレクトリで作成されたすべてのファイルを誰でも読み取り可能にすることはできますか?

私のumaskが0077であると仮定します。

特別な権限を適用したいディレクトリfooがあります。 fooに作成するすべてのファイルは誰でも読み取り可能である必要があり、すべてのディレクトリは誰でも読み取り可能で実行可能である必要があります。

現在、ファイルを作成すると、ファイルは0600になり、ディレクトリは0700になります。

$ cd foo/
$ touch file
$ mkdir directory
$ ls -l
drwx------ 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw------- 1 nfm nfm    0 2012-01-12 16:15 file

私のumaskに関係なく、ファイルを0644、ディレクトリを0755にしたいと思います。

drwxr-xr-x 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw-r--r-- 1 nfm nfm    0 2012-01-12 16:15 file

どうすればこれを達成できますか?

12
stickmangumby

はい、ACLはこれを行うことができます。

  1. ファイルシステムがaclでマウントされていることを確認します。これを確認するには、mountと入力します。他の権限の中で「acl」がリストされているはずです。

    /dev/sda1 on / type ext4 (rw,errors=remount-ro,acl)
    

    Aclでマウントされていない場合は、/ etc/fstabを開き、オプションのリストに「acl」を追加します。

    # /etc/fstab: static file system information.
    #
    # <file system> <mount point>   <type>   <options>       <dump>  <pass>
    /dev/sda1       /          ext3     noatime,errors=remount-ro,acl 0       1
    

    次に、実行中のファイルシステムを新しいオプションで再マウントします。

    mount -v -o remount /
    
  2. Aclユーティリティをインストールします。 ubuntu/debianでは、これは次のとおりです。

    Sudo apt-get install acl
    
  3. あなたの新しい友達はsetfaclgetfaclです。 setfaclを使用して、ディレクトリのデフォルトACLを変更します。

    setfacl -d -m o:r foo
    

    -dはデフォルトを設定し、-mはaclを変更し、o:rは、「その他」に読み取り権限を付与します。ディレクトリにデフォルトを設定することは、ディレクトリに setgid を設定することとほぼ同じですが、新しく作成されたファイルがグループを継承する代わりに、aclを継承します。グループにデフォルトのアクセス権を付与し、新しく作成されたファイルをそのグループに所属させることができるため、setgidとaclを組み合わせると、ディレクトリベースのディレクトリごとの効果的なumaskを実現できます。

  4. あなたの仕事をチェックしてください:ls -lは、標準のファイル許可に加えてaclの存在を示す追加の「+」を表示するはずです。

    % ls -la foo/
    drwxr--r--+
    

    getfaclを使用してACLの詳細情報を取得できます。

    % getfacl foo
    # file: foo
    # owner: you
    # group: you
    user::rwx
    group::r--
    other::r--
    default:user::rwx
    default:group::---
    default:other::r--
    
15
user67641

次のようにマスクのACLプロパティを設定して、ディレクトリのumaskを強制することもできます。

setfacl -d -m mask:07 .
3
Saustrup