Unixでは、昔からchmod
について学んでいました。Unixで(およびsetuid、setgidを使用してプログラムが特権を取得できるようにするための)伝統的な方法です。
最近、GNU/Linuxでいくつかの新しいコマンドを発見しました。
setfacl
は、従来のugo:rwx
ビットとt
のchmod
ビットを拡張します。setcap
は、chmod
のug:s
ビットよりも細かく制御できます。chattr
ファイルの他のいくつかの制御(混合のビット)を許可します。他にありますか?
chmod
:ファイルモードビットを変更使用法(8進モード):
chmod <octal-mode> files...
使用法(シンボリックモード):
chmod <references><operator><modes> files..
references
はugoa
の文字の組み合わせで、files
へのユーザーのアクセスを指定します変更されます:
u
所有者g
のグループの他のユーザーfile
o
ファイルのグループに含まれない他のユーザーa
すべてのユーザー
省略した場合、デフォルトですべてのユーザーになりますが、umask
で許可されている権限のみが変更されます。
operator
は、文字+-=
の1つです:
+
指定されたファイルモードビットを各file
の既存のファイルモードビットに追加します-
は、指定されたファイルモードビットを各file
の既存のファイルモードビットに削除します。=
は、明示的に指定されていない限り、ディレクトリに設定されているsetuid
およびsetgid
ビットを除いて、指定されたビットを追加し、指定されていないビットを削除します。mode
は、変更するパーミッションビットを指定するrwxXst
の文字の組み合わせで構成されます。
r
読み取りw
書き込みx
実行(またはディレクトリを検索)X
実行/検索は、ファイルがディレクトリであるか、すでに一部のユーザーに対して実行ビットが設定されている場合にのみ行われます。s
setuidまたはsetgid(指定されたreferences
に応じて)t
制限付き削除フラグまたはスティッキービットまたは、mode
はugo
のいずれかの文字で構成できます。この場合、モードは、所有者(u
)のメンバーの現在許可されている権限に対応します。 file
のグループ(g
)または上記のカテゴリのいずれにも属さないユーザーの権限(o
)。
chmod
のさまざまなビットについて説明しました:setfacl
も参照)rwx
—読み取り(r)、書き込み(w)、実行/相互(x)権限。#!
を参照)、およびその他の実行可能ファイルに影響します。s
およびt
—スティッキービット(t)、およびディレクトリのsetgid(s)s
—実行可能ファイルのsetuid、setgid。setcap
を参照してください。chown
chgrp
:chattr
:ファイル属性を変更使用法:
chattr <operator><attribute> files...
operator
は文字+-=
の1つです:* +
は選択した属性を既存の属性に追加しますattributes
のfiles
* -
は、選択したattributes
を削除します=
は、指定したattributes
。
attribute
は、属性に対応するacdeijstuADST
の文字の組み合わせです。
a
追加のみc
圧縮d
ダンプなしe
エクステント形式i
不変j
データジャーナリングs
安全な削除t
末尾マージなしu
削除できませんA
いいえatime
更新なしD
同期ディレクトリ更新S
同期更新T
ディレクトリ階層の最上位setfattr
:変更 拡張ファイル属性使用法(属性の設定):
setfattr -n <name> -v <value> files...
使用法(削除):
setfattr -x <name> files...
name
は、設定または削除する拡張属性の名前です
value
は、拡張属性の新しい値です
setfacl
:ファイルアクセス制御リストを変更使用法:
setfacl <option> [default:][<target>:][<param>][:<perms>] files...
option
には、次のいずれかを含める必要があります。
--set
ファイルまたはディレクトリのACLを設定し、以前のACLを置き換えます-m
| --modify
ファイルまたはディレクトリのACLを変更します-x
| --remove
ファイルまたはディレクトリのACLエントリを削除します
target
はugmo
(または以下に示す長い形式)のいずれかです。
u
、users
param
で識別される名前付きユーザーの権限、省略した場合はデフォルトでファイル所有者uid
g
、group
param
で識別される名前付きグループの権限、省略した場合はデフォルトで所有グループuid
m
、mask
有効な権限マスクo
、other
他のユーザーの権限
perms
は、権限に対応するrwxX
の文字の組み合わせです。
r
読み取り
w
書き込みx
実行X
ファイルがディレクトリであるか、一部のユーザーの実行権限をすでに持っている場合にのみ実行します
または、perms
は、権限のセットを示す8進数(0
-7
)の場合があります。
setcap
:変更 ファイル機能使用法:
setcap <capability-clause> file
capability-clause
は、カンマで区切られた capability の名前のリストと、その後に続く演算子とフラグのペアのリストで構成されます。
使用可能な演算子は、=
、+
、および-
です。使用可能なフラグはe
、i
およびp
で、Effective、Inheritableに対応しますおよび許可機能セット。
=
演算子は、指定された機能セットを発生させ、その他をリセットします。 =
演算子と共にフラグが指定されていない場合、すべての機能セットがリセットされます。 +
演算子と-
演算子は、それぞれ1つ以上の指定された機能セットを上げたり下げたりします。
chcon
:ファイルを変更 SELinuxセキュリティコンテキスト使用法:
chcon [-u <user>] [-r <role>] [-t <type>] files...
userは、user_u
、system_u
、root
などのSELinuxユーザーです。
roleはSELinuxロールです(ファイルの場合は常にobject_r
)
typeはSELinuxサブジェクトタイプです
chsmack
:変更 [〜#〜] smack [〜#〜] 拡張属性使用法:
chsmack -a <value> file
value
は、SMACK64
拡張ファイル属性に設定されるSMACKラベルです
richacl sは、より高度なACLを追加する機能です。
現在作業中のため、あまりお伝えできません。私はそれらを使用していません。
この質問も参照してください 従来の 'rwx'およびPOSIX ACLを超える高度なファイルシステムACLはありますか? および man page
高レベルから:
-rwxrwxrwx
はchmod
によって処理されます、およびchown
とchgrp
によって処理されるファイルシステム上のすべてのファイルまたはフォルダーに関連付けられた所有者とグループの識別子誰もが基本的にこの作品を知っています。その他の重要なポイント:
user_xattr
のfstabマウントオプションを覚えており、インストール時にルートファイルシステムでxattrを使用できないように選択できました。 RHEL/CentOS 7では、デフォルトでxattrが存在し、それを使用できないと思います。ls
を実行しているときに-rwxrwxrwx+
が表示された場合、その+
は、そのobjectに拡張ファイル属性が存在することを示します。tar
を使用する場合は注意してください。システムに問題がなければ、xattrが重要な場合(つまり、sambaとwin10 ntfsとlinux ext3/4、btrfs、xfs間のコピー)、またはネットワークに接続されたストレージデバイス間を行き来する)xattr
sで定義されているものによってACLを強制するselinuxまたは他のメカニズムがない場合、xattr
sは理論的には何も意味せず、その時点では余分な手荷物であるため、削除または削除できます。RHEL/CentOS 7では基本的なSamba共有が機能しない...デフォルトではselinuxがenforcingに設定されているため。許可するまで、selinuxはすべてを拒否したので、selinuxを無効にする(不良)か、permissiveに設定します。 selinuxをenforcingのままにする場合は、sambaで共有するフォルダーに拡張属性でラベルを付ける必要があります。これにより、selinuxは共有を認識して許可します。したがって、selinuxを強制したままにすると、すべてのselinuxコマンド(必要なxattr
sが設定されます)を使用します。
# from centos 7.6 /etc/samba/smb.conf.example
# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:
# this is an selinux command, not
setsebool -P samba_domain_controller on
# If you create a new directory, such as a new top-level directory, label it with samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.
# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the rule in selinux (when enforced) will prevent access via samba to the folder.
chcon -t samba_share_t /mydatashare
さらに、このsamba共有を備えたLinuxシステムでselinuxを使用して、このsamba共有の下のファイル/フォルダーに制限を適用します(拡張属性を使用)。これらのファイル/フォルダーは共有されているため、ユーザーは一部をwin10 pcに正当にコピーしてからコピーして戻し、拡張属性を失います。今、その前後のコピーの後、そのLinuxシステムでは、必要なxattrが存在しないため、そのLinuxシステムでselinuxが上記のファイルへのアクセスを制限し、ユーザー/管理者がそこにぶつかって、なぜ今はうまくいかないのか疑問に思っています... selinuxを設定します監査ログに表示される失われたxattr
sの問題を寛容に認識して認識しますが、それは、前後のコピーがxattrを失った結果であったことを直接示すものではありません。また、データのバックアップと復元、および正しいxattr
sに基づいてセキュリティを適用する場合は、uid/gidに加えてxattr
sを覚えておくために必要な作業についても検討してください。