私の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
どうすればこれを達成できますか?
はい、ACLはこれを行うことができます。
ファイルシステムが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 /
Aclユーティリティをインストールします。 ubuntu/debianでは、これは次のとおりです。
Sudo apt-get install acl
あなたの新しい友達はsetfacl
とgetfacl
です。 setfacl
を使用して、ディレクトリのデフォルトACLを変更します。
setfacl -d -m o:r foo
-d
はデフォルトを設定し、-m
はaclを変更し、o:r
は、「その他」に読み取り権限を付与します。ディレクトリにデフォルトを設定することは、ディレクトリに setgid を設定することとほぼ同じですが、新しく作成されたファイルがグループを継承する代わりに、aclを継承します。グループにデフォルトのアクセス権を付与し、新しく作成されたファイルをそのグループに所属させることができるため、setgidとaclを組み合わせると、ディレクトリベースのディレクトリごとの効果的なumaskを実現できます。
あなたの仕事をチェックしてください: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--
次のようにマスクのACLプロパティを設定して、ディレクトリのumaskを強制することもできます。
setfacl -d -m mask:07 .