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


11

私の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

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


「ディレクトリごとのumask」をグーグルで試しませんでしたか?私が権限を持っていた場合は第三のヒットは、あなたが(。、唯一のあなたのためではなく、他のユーザに付与)したい正確に何を行うには、bashのハックですので、私は、このためにあなたをdownvoteしたい
ブレットDikeman

3
@BeeDee私はそれを見ました。私はそれを行うために他の方法で興味深いです、できればACLを使用しています。私はむしろ、すべてのcdでumaskをチェック/変更したり、bash関数をオーバーライドしたりしません。
stickmangumby

回答:


14

はい、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. あなたの新しい友達がいるsetfaclgetfaclsetfaclディレクトリのデフォルトACLを変更するために使用します。

    setfacl -d -m o:r foo
    

    -dデフォルトを設定し、-maclを変更し、o:r「その他」に読み取り権限を付与します。ディレクトリにデフォルトを設定することは、ディレクトリにsetgidを設定することとほぼ同等ですが、グループを継承する新しく作成されたファイルの代わりに、aclを継承します。setgidとaclは強力です。グループにデフォルトのパーミッションを付与し、新しく作成されたファイルをそのグループに所属させると、グループごとの効果的なディレクトリごとのumaskが得られるためです。

  4. 作業を確認してください:ls -l標準のファイル許可に加えて、aclの存在を示す追加の「+」が表示されるはずです。

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

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

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

1
これは私のために働いていないようです。setfaclそしてgetfacl、彼らは世界の読みでない場合は、予想される出力を返すされているが、(親ディレクトリ内のディレクトリだけが(ファイルではない)のACLを継承しており、その後も私のumaskがデフォルトに優先を取っているdefault:other::r--別のユーザーを聞かせていませんそれらにアクセスします)。明らかな何かを見逃していませんか?
stickmangumby

私が見つけた1つのこと(おそらくこれが問題です):faclは現在のユーザーが一致する最初の(ユーザー、グループ、その他)を使用しているようです。つまり、ファイルのグループに属している場合、グループのACLは処理されますが、その他のACLは処理されません。ただし、ディレクトリに-dを適用した場合、aclは引き続き継承されます
。...-user67641

うーん、もう一度試してみたところ、すべてうまくいきました。申し訳ありませんが、私が初めて何を間違えたかわかりません!ありがとう:)
stickmangumby

2

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

setfacl -d -m mask:07 .

-4

OnDirをインストールし、必要に応じて適切に構成するだけです。ここにある同様の問題に答えました。


この質問では、ターミナルでディレクトリを移動することについては何も言及していません。これがOnDirの目的です。
ヤリン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.