Linuxファイルのアクセス許可とFACLファイルのアクセス制御リスト

Linuxシステムは典型的なマルチユーザーシステムであり、さまざまなユーザーにさまざまな権限を割り当てることでシステムのセキュリティを確保します。
同時に、Linuxシステムは、同じファイル(ディレクトリファイルを含む)にアクセスするためのさまざまなユーザーのアクセス許可についてもさまざまなプロビジョニングを行います。

1.ファイルのアクセス許可

(1)ファイルの基本的な権限

ファイルの基本的なアクセス許可には、主にファイルの所有者、グループ、および他のユーザー(グループ)によるファイルの読み取り(r)、書き込み(w)、および実行(x)のアクセス許可
が含まれます。所有者はファイルの所有者です。 ;ファイルが配置されているユーザーグループ内のユーザー;他のユーザー(その他)は、所有者でもグループでもない他のユーザーを指します。
ファイルの基本的なアクセス許可は、ls-lコマンドで表示できます。

[root@hollowman ~]# mkdir hollowman
[root@hollowman ~]# ls -ld hollowman
drwxr-xr-x. 2 root root 6 Dec 20 22:27 hollowman

ls -lの後、画面に文字列分析が表示されます。No。1
:ファイルタイプを示します。dはディレクトリファイルを示します。

d :目录文件;
-  :文件;
l  :链接文档(link file);
b :硬盘(分区)、光盘等存储设备;
c  :键盘、鼠标等字符设备。

ビット2〜10:所有者、グループ、およびその他の読み取り、書き込み、および実行のアクセス許可に対応する、3桁ごとに1つのグループ。
ここで、rwxr-xr-x:は、所有者が読み取りおよび書き込み実行(rwx)権限を持っていることを意味します。グループは読み取りおよび実行権限(rx)のみを持ち、他のグループも読み取りおよび実行権限(rx)のみを持ちます。

11番目のビット:facl権限を設定するかどうかを示します。設定されている場合はプラス記号(+)が表示され、設定されていない場合はドット(。)が表示されます。3番目のポイントはfaclの知識を紹介することです。 。
その他の表示手順:最初のルートは所有者がルートであることを示し、2番目のルートはグループがルートであることを示します。6はファイルのサイズが6バイトであるDec 20 22:27ことを示し、最終変更時刻を示し、hollowmanはファイル(ディレクトリ)名を示します。
ここに画像の説明を挿入します

ファイルの基本的なアクセス許可を
変更します。1.chown:ファイルの所有者(所有者)とグループ(ファイルが配置されているユーザーグループ)を変更します。
基本構文:chown [选项] [属主名][:属组名] 文件名

[root@hollowman ~]# chown -R hollowman hollowman   #-R 表示对目录进行递归设置
[root@hollowman ~]# ls -ld hollowman
drwxr-xr-x. 2 hollowman root 6 Dec 20 22:27 hollowman

2. chmod:ユーザー権限(つまり、ls -lで表示される2〜10桁)を変更します。
ファイルの基本的な権限を表すには文字表現数字表現の2つの方法があります

  • 読み方:文字はrを意味し、数字は4を意味します。
  • 書く:文字はwを意味し、数字は2を意味します。
  • 実行:文字はxを意味し、数字は1を意味します。
  • 許可なし:文字は-を意味し、数字は0を意味します。
    数字で表す場合は、rwx = 4 + 2 + 1 = 7、rx = 4 + 0 + 1 = 5など、さまざまな権限の数値表現を追加することで表すことができます。

いくつかの一般的な使用法:

chmod [-R]  [u=abc] [,g=abc] [,o=abc]  文件名  #a、b、c分别对应r(-)、w(-)、x(-)
chmod [-R]  [u {+|-} [a][b][c]] [,g {+|-} [a][b][c]] [,o {+|-} [a][b][c]]  文件名   
chmod [-R] xyz 文件名     #xyz分别对应u、g、o三中身份的数字表示的权限。

いくつかの例:

[root@hollowman ~]# chmod -R u=rwx,g=rwx,o=rwx hollowman/    #全权限
[root@hollowman ~]# ls -ld hollowman/
drwxrwxrwx. 2 hollowman hollowman 6 Dec 20 22:52 hollowman/  
[root@hollowman ~]# chmod -R u-x,g-w,o-r hollowman/    #u去掉x权限,g去掉w权限,o去掉r权限
[root@hollowman ~]# ls -ld
drw-r-x-wx. 16 root root 4096 Dec 20 22:27 .
[root@hollowman ~]# chmod -R 765 hollowman/   #u设置rwx权限,g设置rw-权限,o设置r-x权限。
[root@hollowman ~]# ls -ld hollowman/
drwxrw-r-x. 2 hollowman hollowman 6 Dec 20 22:52 hollowman/

(2)ファイルに対する特別なアクセス許可。

Linuxは、ファイル自体に対するユーザー(グループ)の読み取り、書き込み、および実行のアクセス許可に加えて、SUID、SGID、およびSBITの3つの特別なアクセス許可も提供します。

1.SUID

1)SUID権限は、バイナリ実行プログラム(システム内のコマンドなど)にのみ設定でき、スクリプトファイルを含む他のファイルは、SUID権限が設定されていても実用的な意味はありません。
2)SUID権限を設定した後、他のユーザーがファイルを実行する場合、ファイルの所有者(つまり所有者)としてプログラムを実行するのと同じです。したがって、所有者は最初に(x)権限を付与する必要があります。そうしないと、他のユーザーが実行権限を取得できず、SUID権限を設定しても意味がありません。
3)SUID権限を設定する目的は、所有者として他のファイルの関連操作を完了することです(ユーザーには他のファイルを操作する権限がありません)。SUID権限が付与されたファイルは、実際にはブリッジの役割を果たし、有効な場合のみです。ブリッジングプロセスで。
4)SUIDは、ファイル所有者(所有者)権限の実行許可ビット(ls -lの4番目のビット)に反映されます。ファイルがSUID許可で設定されている場合、ls-lを見て表示される4桁目は文字「x」「小文字の「s」になりました(ファイル所有者に実行権限がない場合、つまり4桁目が「-」の場合は大文字のSになり、このSUID設定は無意味です) )

最も一般的で古典的な例の1つ:
/ etc / shadowファイルはユーザーのパスワード情報を格納します。lsは、読み取り、書き込み、または実行のアクセス許可を持っているユーザーがいないことを検出しました。もちろん、スーパー管理者のルートはこれらのアクセス許可によって制限されていません。

[root@hollowman ~]# ls -l /etc/shadow
----------. 1 root root 1311 Dec 20 17:54 /etc/shadow

他のユーザーは、パスワード変更アクションを完了して、パスワードをこのファイルに保存したいと考えています。パスワードの変更と保存を完了する手順は、2つの実行可能ファイル/ bin / passwdと/ urs / bin / passwdを介して完了することができます。

[root@hollowman ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 34512 Aug 13  2018 /bin/passwd
[root@hollowman ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 34512 Aug 13  2018 /usr/bin/passwd

上で見られるように/bin/passwd/usr/bin/passwdビット4は小文字のs、つまり値セットSUIDです。このようにして、他のユーザーを使用してこのプログラムを実行し、パスワード変更アクションを完了することができます。

SUID権限を設定する方法は?
SUIDのアクセス許可は基本的なアクセス許可に似ており、文字と数字の2つのアクセス許可の表現もあります。
文字表現は文字「s」です。例:chmod u+s 可执行文件名
数値表記は数値4です。例:chmod 4777 可执行程序名
注:ここでは、ファイルのアクセス許可を設定するために4桁が使用されます。最初のアクセス許可は特別なアクセス許可で、最後の3桁は基本的なアクセス許可です。

2.GUID

SGIDの特別なアクセス許可には2つの状況があります。

  1. バイナリプログラムにGUIDが設定されている場合、ユーザーはファイル所属グループのアクセス許可を一時的に取得できます(SUIDと同様ですが、ここでは所属グループメンバーシップを取得します)。
  2. ディレクトリにGUIDが設定されている場合、ディレクトリに新しく作成されたファイル属性の属性グループは、ディレクトリの属性グループを自動的に継承できます。
  3. SGIDは、ファイル/ディレクトリ所属グループ権限の実行ビットに反映されます(ls -l 7th)。ファイル/ディレクトリにSGID権限が設定されている場合、ls-lを見て表示される7桁目が文字「x」から変わります。小文字の「s」(ファイルが実行許可なしにグループに属している場合、つまり7桁目が「-」の場合、文字は大文字のSになります)

SGIDパーミッション設定も2つのパーミッション表現です。
文字表現は文字「s」です。たとえば、chmod g+s 文件/目录名
数値表現は数値2です。例:chmod 2777 文件/目录名
注:番号を使用してファイルのアクセス許可を設定する場合、SUIDとSGIDの両方を設定する場合(バイナリプログラムのみが使用できます)、chmod6777ファイル名などの4+ 2 = 6と同等です。

デモ:
rootユーザーのホームディレクトリにテストディレクトリを作成します。グループがrootであることがわかります。

[root@hollowman ~]# mkdir test
[root@hollowman ~]# ls -ld test
drwxr-xr-x. 2 root root 6 Dec 22 23:11 test

テストディレクトリにファイルファイルを作成します。ファイルがグループに属しているのかルートに属しているのかを確認できます。

[root@hollowman ~]# touch test/file
[root@hollowman ~]# ls -l test
total 0
-rw-r--r--. 1 root root      0 Dec 22 23:12 file

テストディレクトリグループをhollowmanに設定し、GUID権限を設定します

[root@hollowman ~]# chown :hollowman test
[root@hollowman ~]# chmod g+s test
[root@hollowman ~]# ls -ld test
drwxr-sr-x. 2 root hollowman 6 Dec 22 23:13 test

テストディレクトリにnewfileファイルを作成し、属グループがテストディレクトリから属hollowmanを継承していることを確認します。

[root@hollowman ~]# touch test/newfile
[root@hollowman ~]# ls -l test/
total 0
-rw-r--r--. 1 root root      0 Dec 22 23:12 file
-rw-r--r--. 1 root hollowman 0 Dec 22 23:14 newfile
3.SBIT(スティッキービット許可またはファイル保護許可)
  1. SBITは、カタログファイルに対してのみ有効です。
  2. SBITの役割:ディレクトリがグループによって書き込み可能(またはグローバルに書き込み可能)の場合、グループ内のすべてのユーザー(または他のすべてのユーザー)が新しいファイルを作成し、ディレクトリ内のすべてのファイルを削除できます。この種の権限は致命的です。 SBIT権限が設定されている場合、グループ内の各ユーザー(または他のすべてのユーザー)は、新しいファイルを作成して自分のファイルを削除することはできますが、他のユーザーのファイルを削除することはできません。
  3. SBITは、ディレクトリの他のユーザー権限の実行位置に反映されます(ls -l 10番目の位置)。ディレクトリにSBIT権限が設定されている場合、ls-lで表示される10番目の位置は文字「x」から変更されます。 「から小文字へ」t」(ディレクトリの他のユーザーに実行権限がない場合、つまり10桁目が「-」の場合、その文字は大文字のTになります)
  4. Linuxシステムの/ tmpディレクトリにSBIT権限が設定されています。つまり、このディレクトリで削除できるのは自分のファイルのみです。

SBIT権限設定は、依然として2つの権限表現です。
文字表現は文字「t」です。たとえば、chmod o+t 目录名
数値表現は数値1です。例:chmod 1777 目录名
numberメソッドの概要:SUIDは4、SGIDは2、SBITは1 3種類の権限の一部を設定する必要がある場合は、これらの種類の権限を表す番号を追加するだけで済みます( rwxデジタル権限設定)、chmod 7777ディレクトリの名前は、特別な権限が完全に開いていることを示します(もちろん、一部の権限を完全に開いても意味がありません)
アルファベット順の特権設定コマンド:chmod [u+s],[g+s],[o+t] 文件名
アルファベットは特権削除コマンドを送信します:chmod [u-s],[g-s],[o-t] 文件名

(3)ファイルの非表示のアクセス許可

一般的なアクセス許可と特別なアクセス許可に加えて、Linuxシステムのファイルには非表示のアクセス許可もあり、デフォルトではユーザーが直接検出することはできません。
非表示の権限は通常のlsコマンドでは表示できません。専用の設定コマンドは、、chattr専用の表示コマンドはlsattrです。

[root@hollowman ~]# lsattr
------------------ ./hollowman
[root@hollowman ~]# chattr +i hollowman    
[root@hollowman ~]# lsattr
----i------------- ./hollowman

上記の例では、iの非表示のアクセス許可をhollowmanディレクトリに設定しています(つまり、hollowmanディレクトリ内のサブファイルの内容のみを変更でき、作成または削除できません)。
関連オプション:

i	无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
a	仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S	文件内容在变更后立即同步到硬盘(sync)
s	彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
A	不再修改这个文件或目录的最后访问时间(atime)
b	不再修改文件或目录的存取时间
D	检查压缩文件中的错误
d	使用dump命令备份时忽略本文件/目录
c	默认将文件或目录进行压缩
u	当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t	让文件系统支持尾部合并(tail-merging)
x	可以直接访问压缩文件中的内容

例:

[root@hollowman ~]# touch ./hollowman/newfile
touch: setting times of './hollowman/newfile': No such file or directory
[root@hollowman ~]# chattr -i hollowman
[root@hollowman ~]# touch ./hollowman/newfile

上記の例では、iの非表示のアクセス許可が設定されているhollowmanディレクトリにnewfileファイルを作成し、オプション関数と同じようにエラープロンプトを表示しました。次に、iのアクセス許可を削除し、新しいファイルを再度作成すると、ファイルは次のようになります。正常に作成されました。

2.ファイルアクセス制御リストFACL(ファイルアクセス制御リスト)

特定のユーザーおよびユーザーグループに追加のアクセス許可を設定する必要がある場合がありますが、これらのアクセス許可はファイルにアクセス許可を付与しても解決できません。現時点では、FACLが必要です。
つまり、ファイルのアクセス許可は共通(ユーザー、グループ、その他)のアクセス許可設定の問題を解決でき、FACLはパーソナリティ(グループ内の個々のユーザー、個々のユーザー、その他のグループなど)のアクセス許可設定の問題を解決できます。

1.getfacl

ファイルを読み取るためのACL権限

[root@hollowman ~]# getfacl hollowman/       
# file: hollowman/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

上記の例は、/ root / hollowmanディレクトリのfaclの読み取りを示しています。

2.setfacl

ファイルのACL権限を設定します。構文は次のとおりです。setfacl [-bkndRLPvh] [{-m|-x} acl权限] [{-M|-X} acl文件] 文件 ...

-m,       --modify-acl 更改文件的访问控制列表
-M,       --modify-file=file 从文件读取访问控制列表条目更改
-x,       --remove=acl 根据文件中访问控制列表移除条目
-X,       --remove-file=file 从文件读取访问控制列表条目并删除
-b,       --remove-all 删除所有扩展访问控制列表条目
-k,       --remove-default 移除默认访问控制列表
          --set=acl 设定替换当前的文件访问控制列表
          --set-file=file 从文件中读取访问控制列表条目设定
          --mask 重新计算有效权限掩码
-n,       --no-mask 不重新计算有效权限掩码
-d,       --default 应用到默认访问控制列表的操作
-R,       --recursive 递归操作子目录
-L,       --logical 依照系统逻辑,跟随符号链接
-P,       --phollowmansical 依照自然逻辑,不跟随符号链接
          --restore=file 恢复访问控制列表,和“getfacl -R”作用相反
          --test 测试模式,并不真正修改访问控制列表权限
-v,       --version           显示版本并退出
-h,       --help              显示本帮助信息

例:

[root@hollowman ~]# setfacl -Rm u:hollowman:rwx hollowman/  #目录设置facl要加R选项,表示递归操作
[root@hollowman ~]# getfacl hollowman/    
# file: hollowman/
# owner: root
# group: root
user::rwx
user:hollowman:rwx       #这里增加了刚添加的对hollowman用户的facl权限
group::r-x
mask::rwx    #奇怪吧,这里也新增了一个的mask权限
other::r-x

マスク権限とは、ユーザーまたはグループが持つことができる最大のACL権限を指します。つまり、ユーザーまたはグループに設定されたACL権限は、マスクで指定された権限範囲を超えることはできず、超過した部分は無効になります。
通常、マスクのアクセス許可は、setfaclコマンドの使用後に再計算されます。デフォルトでは、すべてのアクセス許可から最高のアクセス許可が自動的に取得されます(rwxアクセス許可が1つしかない場合、マスクはrwxに設定されます。最高のアクセス許可がrwの場合、マスクも通常はrwになります。デフォルト設定はrwです。-nオプションを使用してマスクのアクセス許可を計算しないか、マスクのアクセス許可を変更することもできます。

[root@hollowman ~]# setfacl -Rm g:hollowman:rwx hollowman/
[root@hollowman ~]# getfacl hollowman/
# file: hollowman/
# owner: root
# group: root
user::rwx
user:hollowman:rwx
group::r-x
group:hollowman:rwx  #这里增加了刚添加的对hollowman用户组的facl权限
mask::rwx
other::r-x

また、getfaclコマンドを使用して、ファイルにfacl権限があるかどうかどのよう知ることができますか?
ls -lコマンド、11番目の位置が表示されます。プラス記号(+)があります。これは、ファイルがfacl権限で設定されているが、facl権限が設定されていないことを意味します。ここにドット(。)があります。

[root@hollowman ~]# ls -ld hollowman
drwxrwxr-x+ 2 root root 6 Dec 20 20:20 hollowman

3.FACL権限のバックアップ

FACL権限の設定は、即座に永続的に有効になり、構成ファイルを編集する必要はありません。ただし、誤って設定しなかった場合はどうすればよいですか?最初にFACLアクセス許可をバックアップしてから、-restoreオプションを使用してFACLアクセス許可を復元できます。
1)hollowmanディレクトリのfaclパーミッションをバックアップします

[root@hollowman ~]# groupadd hy   #新建一个用户组hy,以便接下来的实验
[root@hollowman ~]# getfacl -R hollowman >back.acl

2)hyユーザーグループにfacl権限を追加します。

[root@hollowman ~]# setfacl -Rm g:hy:rwx hollowman/  #添加对hy用户组的facl权限
[root@hollowman ~]# getfacl hollowman/
# file: hollowman/
# owner: root
# group: root
user::rwx
user:hollowman:rwx
group::r-x
group:hollowman:rwx 
group:hy:rwx
mask::rwx
other::r-x

3)faclパーミッションのバックアップを復元した後、hollowmanディレクトリのfaclパーミッションを再度読み取り、追加したhyユーザーグループのパーミッションが消えていることを確認しました。

[root@hollowman ~]# setfacl --restore back.acl    
[root@hollowman ~]# getfacl hollowman/    
# file: hollowman/
# owner: root
# group: root
user::rwx
user:hollowman:rwx
group::r-x
group:hollowman:rwx
mask::rwx
other::r-x

おすすめ

転載: blog.csdn.net/ymz641/article/details/111569712