LinuxのSetfaclコマンド
set faclコマンドは、コマンドラインにACL(アクセス制御リスト)を設定するために使用されます。命令行では、一連の命令が一連のファイル名で続いています。
オプションオプション オプション オプション オプション -Mを使用して-Xオプションがファイルから規則を読み込むと、SEtfaclはgetfaclコマンドの出力を受け付けるフォーマットです。行ごとに少なくとも一つの規則があり、注釈として扱われる。
ACLsをサポートしていないファイルシステムでsetfaclコマンドを使用すると、setfaclはファイルの権限ビットを変更します。aclルールがファイルの権限ビットに完全に一致していない場合、setfaclはファイルの権限ビットを変更し、できるだけaclルールに反応させ、0より大きい状態で、standar errorにエラーメッセージを送信します。
パーミッション
ファイルの所有者および
ACLルール
set faclコマンドは、以下の規則フォーマットを識別することができる。
自動作成のルール
最初のファイルディレクトリには3つの基本的なaclルールしか含まれていません。規則を正常に実行するためには、以下の規則を満たす必要があります。の3つの基本ルールは削除されません。 のいずれかのルールは、指定されたユーザ名またはグループ名を含む有効な権限の組み合わせを含む必要があります。 のいずれかにデフォルト規則が含まれている規則は、使用時にデフォルト規則が存在しなければならない。 ACLの名詞定義
まずACLの中の名詞の定義を見てみます。これらの名詞は大体マン pageから取ってきます。ちょっと味気ないですが、下の内容を理解するのに役に立ちます。
ACLは一連のAccess Entryからなり、それぞれのAccess Entryは特定のカテゴリがファイルに対して持つことができる操作権限を定義しています。Access Entryには三つの構成部分があります。Entry、qualifer、permission。
まず一番重要なEntryを見に行きます。次のタイプがあります。
ACLファイルの設定方法
まず、ACLファイルを設定するフォーマットについて説明します。上記の例から、それぞれのAccess Entryは三つのコードで区切られたフィールドからなります。一番目はEntryです。
これから、test.txtというファイルをどのように設定するかを見てみます。ACLはこれを私達の上の要求に達成させます。
最初のファイルにはACLの追加属性がありません。
次に私達はdevグループを設置してread permissionを持ちます。
ACL_MASKとEffective permission
ここでは、
この例を見てみましょう。
ですから、ここから分かります。もしファイルの後ろに+マークがあるなら、私たちはgetfaclでそのpermissionを確認します。混淆が起こらないようにします。
次にもう一つの例を見てみます。もし今test.shのmarkをread onlyに設定したら、adminグループのユーザーはまたwrite permissionがありますか?
この時にtest.shのLinux file permissionを見に来ました。そのgroup permissionにもmaskの値が表示されます。
上に述べたのは全部Access ACLです。つまり文書にとってです。以下は簡単にDefault ACLについて説明します。Default ACLとは、一つのディレクトリに対してDefault ACL設定を行い、このディレクトリで作成したファイルはすべてこのディレクトリのACLを引き継ぎます。
同様に、私たちはテストの説明を行います。例えば、rootユーザーがdirディレクトリを作成しました。
ACL関連コマンド
前の例では、getfaclコマンドはファイルを読み込むためのACLであり、setfaclはファイルを設定するためのAcess ACLであることに注目しています。もう一つのchaclはファイルとディレクトリを変更するためのAccess ACLとDefault ACLです。その具体的なパラメータは皆さんがman pageを見に行くことができます。私は
cpコマンドは、デフォルトでファイルのACL属性を移動します。同様に、動作が許可されていない場合には警告を与えます。
注意すべき点
もしあなたのファイルシステムがACLをサポートしていないなら、あなたはもう一度mvあなたのfile systemを必要とするかもしれません。
締め括りをつける
以上は、LinuxのSetfacl命令を紹介しました。皆さんの助けになりたいです。もし何か質問があれば、メッセージをください。編集はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
オプション
-b,--remove-all: acl , acl ( , , ) 。
-k,--remove-default: acl 。 , 。
-n,--no-mask: 。setfacl ACL mask, mask 。
--mask: , ACL mask 。
-d,--default: acl 。
--restore=file: acl ( getfacl -R )。 acl 。 --test 。
--test: , acl , acl 。
-R,--recursive: 。
-L,--logical: , , 。
-P,--physical: , 。
--version: setfacl 。
--help: 。
--: ,
-: -, setfacl 。
-m
および-x
は、後にaclルールで続く。複数のaclルールはカンマ(,)で区切られている。オプション-M
および-X
は、ファイルまたは標準入力からaclルールを読み取るために使用される。--セット
および--set-file
は、ファイルまたはディレクトリのaclルールを設定するために使用され、以前の設定は上書きされます。-m(--modify)
および-M(--modify-file)
は、ファイルまたはディレクトリのaclルールを変更するオプションを選択します。-x(--remove)
および-X(--remove-file)
オプションでaclルールを削除します。ACLsをサポートしていないファイルシステムでsetfaclコマンドを使用すると、setfaclはファイルの権限ビットを変更します。aclルールがファイルの権限ビットに完全に一致していない場合、setfaclはファイルの権限ビットを変更し、できるだけaclルールに反応させ、0より大きい状態で、standar errorにエラーメッセージを送信します。
パーミッション
ファイルの所有者および
CAP_FOWNER
のユーザプロセスは、ファイルのaclを設定することができます。現在のlinuxシステムでは、rootユーザは唯一のCAP_FOWNER
能力を持つユーザである)ACLルール
set faclコマンドは、以下の規則フォーマットを識別することができる。
[d[efault]:] [u[ser]:]uid [:perms] , ( uid )。
[d[efault]:] g[roup]:gid [:perms] , ( gid )
[d[efault]:] m[ask][:] [:perms]
[d[efault]:] o[ther] [:perms]
適切なaclルールは修正と設定の操作に用いられ、uidとgidに対しては数字を指定したり、名前を指定したりすることができます。permsドメインは、様々なパーミッションを表すアルファベットの組み合わせである。-r
を読み、-w
を書き込み、-x
を実行し、ディレクトリと実行可能なファイルの一部だけを実行する。persドメインは、8進数の書式に設定することもできます。自動作成のルール
最初のファイルディレクトリには3つの基本的なaclルールしか含まれていません。規則を正常に実行するためには、以下の規則を満たす必要があります。
まずACLの中の名詞の定義を見てみます。これらの名詞は大体マン pageから取ってきます。ちょっと味気ないですが、下の内容を理解するのに役に立ちます。
ACLは一連のAccess Entryからなり、それぞれのAccess Entryは特定のカテゴリがファイルに対して持つことができる操作権限を定義しています。Access Entryには三つの構成部分があります。Entry、qualifer、permission。
まず一番重要なEntryを見に行きます。次のタイプがあります。
ACL_USER_OBJ: Linux file_owner permission
ACL_USER: permission
ACL_GROUP_OBJ: Linux group permission
ACL_GROUP: permission
ACL_MASK: ACL_USER, ACL_GROUP_OBJ ACL_GROUP ( )
ACL_OTHER: Linux other permission
例によって説明します。ここではgetfaclコマンドで定義されたACLファイルを確認します。
[root@localhost ~]# getfacl ./test.txt
# file: test.txt
# owner: root
# group: admin
user::rw-
user:john:rw-
group::rw-
group:dev:r--
mask::rw- other::r--
前の3つは嗳頭でファイル名、file owner、groupを定義しました。これらの情報はあまり効果がありません。これからは--omit-header
を使って省略します。
user::rw- ACL_USER_OBJ, file owner read and write permission
user:john:rw- ACL_USER, john ,
group::rw- ACL_GROUP_OBJ, group read and write permission
group:dev:r-- ACL_GROUP, dev read permission
mask::rw- ACL_MASK read and write
other::r-- ACL_OTHER read
ここからACLは特定のユーザーとユーザーグループを定義できる機能を提供していることが分かります。次にファイルを設定するACLを見てみます。ACLファイルの設定方法
まず、ACLファイルを設定するフォーマットについて説明します。上記の例から、それぞれのAccess Entryは三つのコードで区切られたフィールドからなります。一番目はEntryです。
user ACL_USER_OBJ ACL_USER
group ACL_GROUP_OBJ ACL_GROUP
mask ACL_MASK
other ACL_OTHER
第二のフィールドをqualiferと呼び、つまり上記の例のjohnとdevグループは、特定のユーザとサポートグループのファイルに対する権限を定義しています。ここでは、userとgroupだけがqualifeerを持っています。他は全部空です。第三のフィールドは私たちがよく知っているpermissionです。Linuxのpermissionと同じように定義されています。ここでは多くの話をしません。これから、test.txtというファイルをどのように設定するかを見てみます。ACLはこれを私達の上の要求に達成させます。
最初のファイルにはACLの追加属性がありません。
[root@localhost ~]# ls -l
-rw-rw-r-- 1 root admin 0 Jul 3 22:06 test.txt
[root@localhost ~]# getfacl --omit-header ./test.txt
user::rw- group::rw- other::r--
まずユーザーjohnにtest.txtファイルの読み書き権限を持たせます。
[root@localhost ~]# setfacl -m user:john:rw- ./test.txt
[root@localhost ~]# getfacl --omit-header ./test.txt
user::rw-
user:john:rw-
group::rw-
mask::rw-
other::r--
この時、私達はjohnユーザーがACLで文書の読み書き権を持っているのを見ることができます。この時linuxのpermissionを調べたらまた違ったところを見つけます。
[root@localhost ~]# ls -l ./test.txt
-rw-rw-r--+ 1 root admin 0 Jul 3 22:06 ./test.txt
ファイルのpermissionの最後に一つの+号が多くなりました。どのファイルもACL_を持っています。USERまたはACL_GROUTPの値をACLファイルと呼ぶことができます。この+号は私たちにヒントを与えるものです。また、1つのファイルがACL_USER
またはACL_GROUP
の値を持っている場合にはACL_MASK
も同時に定義されることを発見することができる。次に私達はdevグループを設置してread permissionを持ちます。
[root@localhost ~]# setfacl -m group:dev:r-- ./test.txt
[root@localhost ~]# getfacl --omit-header ./test.txt
user::rw-
user:john:rw-
group::rw-
group:dev:r--
mask::rw-
other::r--
ここで上述の要求を完成しました。簡単ですか?ACL_MASKとEffective permission
ここでは、
ACL_MASK
はACLを掌握するもう一つの鍵であるため、Linux file permissionでは、rw-rw-r--
にとって、そのrw-
はファイルグループのpermissionを指すということをみんなが知っていますが、ACLではこのような状況はACL_MASK
が存在しない場合にのみ成立します。ファイルにACL_があればMASK値は、rw-
の中で代表されているのがmark値であり、group permissionではありません。この例を見てみましょう。
[root@localhost ~]# ls -l
-rwxrw-r-- 1 root admin 0 Jul 3 23:10 test.sh
ここでtest.shファイルはfile owner:rootのみread、write、execute/search permissionを持っています。adminグループはread and write permissionだけあります。今はユーザーjohnもtest.shに対してrootと同じpermissionを持っています。
[root@localhost ~]# setfacl -m user:john:rwx ./test.sh
[root@localhost ~]# getfacl --omit-header ./test.sh
user::rwx user:john:rwx
group::rw-
mask::rwx
other::r--
ここで、johnがrwxのpermissionを持っていることを見ました。mark値もrwxに設定されています。それはACL_USER
、ACL_GROUP
、ACL_GROUP_OBJ
の最大値を規定しています。今はtest.shのLinux permissionを見に来ます。
[root@localhost ~]# ls -l
-rwxrwxr--+ 1 root admin 0 Jul 3 23:10 test.sh
今adminグループのユーザーがtest.shのプログラムを実行したいと思ったら、どうなりますか?それはpermission denyにされます。なぜなら、実際にadminグループのユーザはread and write permissionだけであり、ここに表示されるrwxはACL_MASK
の値であり、groupのpermissionではないからである。ですから、ここから分かります。もしファイルの後ろに+マークがあるなら、私たちはgetfaclでそのpermissionを確認します。混淆が起こらないようにします。
次にもう一つの例を見てみます。もし今test.shのmarkをread onlyに設定したら、adminグループのユーザーはまたwrite permissionがありますか?
[root@localhost ~]# setfacl -m mask::r-- ./test.sh
[root@localhost ~]# getfacl --omit-header ./test.sh
user::rwx
user:john:rwx #effective:r--
group::rw- #effective:r--
mask::r--
other::r--
この時ACL_を見ることができます。USERとACL_GROUT_OBJの隣にもう一つ増えました。これはどういう意味ですか?ACL_MASK
の定義を振り返ってみましょう。ACL_USER
、ACL_GROUP_OBJ
、ACL_GROUP
、ACL_USER
の最大権限を規定しています。この例では彼らの最大の権限はread onlyです。ここでACL_GROUP_OBJ
とchacl -B
に他の権限を設定しましたが、本当に効果があるのはread権限だけです。この時にtest.shのLinux file permissionを見に来ました。そのgroup permissionにもmaskの値が表示されます。
[root@localhost ~]# ls -l
-rwxr--r--+ 1 root admin 0 Jul 3 23:10 test.sh
Default ACL上に述べたのは全部Access ACLです。つまり文書にとってです。以下は簡単にDefault ACLについて説明します。Default ACLとは、一つのディレクトリに対してDefault ACL設定を行い、このディレクトリで作成したファイルはすべてこのディレクトリのACLを引き継ぎます。
同様に、私たちはテストの説明を行います。例えば、rootユーザーがdirディレクトリを作成しました。
[root@localhost ~]# mkdir dir
彼はこのディレクトリで作成したファイルをすべてjohnユーザーにアクセスしてもらいたいです。私たちはdirディレクトリにDefault ACLを設定するべきです。
[root@localhost ~]# setfacl -d -m user:john:rw ./dir
[root@localhost ~]# getfacl --omit-header ./dir
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:john:rwx
default:group::rwx
default:mask::rwx
default: other::r-x
ここでACLはdefaultオプションを定義しています。johnユーザーはdefaultのread、write、excute/search permissionを持っています。定義されていないdefaultは全部file permissionのcopyから来ます。今rootユーザーはdirの下でtest.txtファイルを作成します。
[root@localhost ~]# touch ./dir/test.txt
[root@localhost ~]# ls -l ./dir/test.txt
-rw-rw-r--+ 1 root root 0 Jul 3 23:46 ./dir/test.txt
[root@localhost ~]# getfacl --omit-header ./dir/test.txt
user::rw-
user:john:rw-
group::rwx #effective:rw-
mask::rw-
other::r--
ここで私達はdirの下で作成されたファイルjohnユーザーが自動的にread and write permissionを持っているのを見ました。ACL関連コマンド
前の例では、getfaclコマンドはファイルを読み込むためのACLであり、setfaclはファイルを設定するためのAcess ACLであることに注目しています。もう一つのchaclはファイルとディレクトリを変更するためのAccess ACLとDefault ACLです。その具体的なパラメータは皆さんがman pageを見に行くことができます。私は
setfacl -x
について話したいだけです。ファイルまたはディレクトリのACL属性(Default ACLを含む)を徹底的に削除できます。例えばchacl -B
を使ってすべてのファイルのACL属性を削除しました。その+番号はやはりファイルの最後に現れます。正しい削除方法はタイプを使ってファイルをコピーする時に私達は今-p
オプションを追加できます。このように、ファイルをコピーする際にも、ファイルをコピーするACL属性は、コピーできないACL属性に対して警告を与えます。cpコマンドは、デフォルトでファイルのACL属性を移動します。同様に、動作が許可されていない場合には警告を与えます。
注意すべき点
もしあなたのファイルシステムがACLをサポートしていないなら、あなたはもう一度mvあなたのfile systemを必要とするかもしれません。
mount -o remount, acl [mount point]
mountコマンドでLinux file permissionを変更すると、対応するACL値も変化し、逆にACLの値を変更すると、対応するfile permissionも変化します。締め括りをつける
以上は、LinuxのSetfacl命令を紹介しました。皆さんの助けになりたいです。もし何か質問があれば、メッセージをください。編集はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。