Linux UGOとACL権限管理

22756 ワード

自主アクセス制御(Discretionary Access Control,DAC)とは、プログラム、ファイル、プロセスなどのオブジェクトの所有者が任意に変更したり、そのオブジェクトに適切な権限を付与したりすることを意味します.LinuxのUGO(User,Group,Other)とACL(Access Control List)の権限管理方式が典型的な自主アクセス制御である.UGOは、ノードの権限に権限情報を格納し、ACLは、ノードの拡張属性に権限ビット情報を格納する.

1、Linux UGO権限管理


1.1一般権限


1つのファイルが作成されると、読み取り(r)、書き込み(w)、実行(x)の3つの操作方法があります.UGO権限管理方式は、ファイルにアクセスする操作者を簡単に3つに分類する:ファイル属主(u)、同グループユーザ(g)、その他のグループユーザ(o).
ファイルの3つの操作方式は3つのバイナリビットで表され、1番目は読み取り権限、2番目は書き込み権限、3番目は実行権限を表す.1つのファイルの権限属性は、3つのユーザがそのファイルに対する権限イネーブルの集合である.lsでファイルを表示すると、次の結果が表示されます.
xlzh@cmos:~$ ls -l test
-rw-rw-r-- 1 xlzh xlzh 0  3  15 15:12 test
xlzh@cmos:~$

ファイルが通常のタイプであることを示す
最初のグループの「rw-」は、ファイル所有者がファイルに対して読み取りと書き込みの権限を持っているが、実行権限がないことを示す.
第2のグループの「rw-」は、同じグループの他のユーザがファイルに対して読み取りおよび書き込み権限を持っているが、実行権限がないことを示す.
第3のグループの「r--」は、他のグループのユーザーがファイルに対して読み取り権限を持っているが、書き込みおよび実行権限がないことを示す.
上記の各グループの権限は、バイナリで表すことができ、例えば「rw-」、バイナリで表すことができるのは110であり、10進数値は6であり、「r--」、バイナリで表すことができるのは100であり、10進数値は4である.したがって、権限のセットごとに10進数で表すことができます.chmodを使用してファイル権限を変更する場合は、「rwx」の代わりに10進数を使用できます.たとえば、
xlzh@cmos:~$ ls -l test
-rw-rw-r-- 1 xlzh xlzh 0  3  15 15:12 test
xlzh@cmos:~$ chmod 766 test
xlzh@cmos:~$ ls -l test
-rwxrw-rw- 1 xlzh xlzh 0  3  15 15:12 test
xlzh@cmos:~$

もちろんchmod u+x,o+w testにより上記と同様の機能を実現することも可能である.具体的にどの方式を使うかは、個人の好みだけです.
linuxではすべてファイルで、ディレクトリも例外ではありませんが、ディレクトリの読み書き実行権限は通常のファイルの読み書き実行権限とは意味が異なります.以下に示します.
パーミッションビット
ファイル
目次
r
ファイルを読めます
ディレクトリの内容を表示できます
w
ファイルを書くことができます
ディレクトリの内容を削除できます
x
実行可能ファイル
ディレクトリにアクセス可能

1.2特殊権限


1.1節では、一般的に使用されるパーミッションビットについて説明しますが、s(suid)、s(sgid)、t(Sticky Bit)のいくつかの特殊なパーミッションビットがあります.まずlinuxの下の/usr/passwdファイルと/tmpディレクトリを見てみましょう
xlzh@cmos:~$ ls -l /usr/bin/passwd 
-rwsr-xr-x 1 root root 42824  9  13  2012 /usr/bin/passwd
xlzh@cmos:~$ ls -ld /tmp
drwxrwxrwt 16 root root 12288  3  15 15:31 /tmp
xlzh@cmos:~$

/usr/bin/passwdの最初の権限ビットのセットは、前節とは異なり、3番目のフラグビットがsになっていることがわかります.プライマリ・ユーザーがファイルにsuidビットを設定すると、他のユーザーはそのファイルを実行するときにプライマリ・ユーザーと同等の権限を有します.
それともpasswdコマンドを例にとると、一般ユーザーはpasswdで自分のパスワードを変更することができ、ユーザーパスワードのhashは/etc/shadowファイルに格納され、パスワードを変更するには必ずこのファイルを変更しなければならない.
xlzh@cmos:~$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1647  2  18 09:46 /etc/shadow
xlzh@cmos:~$

rootユーザのみがこのファイルを変更できることが分かった.すなわち、一般ユーザがpasswdコマンドを実行すると、その権限がrootの権限になるため、/etc/shadowファイルを変更することができる.
guid類似
一方、tについては、粘着ビットとも呼ばれ、ディレクトリにのみ有効です.tビットを有するディレクトリの下で、ユーザがそのディレクトリの下でwおよびxの権限を有する場合、ユーザがそのディレクトリの下でファイルまたはディレクトリを確立する場合、ファイル所有者とrootのみが削除する権利がある./tmpディレクトリは最良の例であり、各アプリケーションはtmpディレクトリの下で自分のファイルを新規に削除することができるが、アプリケーションが作成したファイルを削除することはできない.
では、ファイルのsst権限をどのように変更しますか?やはりchmodコマンドを使うか、第1節ではUGOのファイルへのアクセス権を10進数で設定できることを知っています.同様に特殊な権限ビットでも使用できます.元の数値の前にsstの10進数を加えるだけです.実行可能ビットが0であるため、大文字として表示される場合もあります.たとえば、
xlzh@cmos:~$ ls -l test
-rw-rw-r-- 1 xlzh xlzh 0  3  15 15:52 test
/*     sst,    ,   t       */
xlzh@cmos:~$ chmod 7777 test
/*      suid, sgid, Sticky Bit */
xlzh@cmos:~$ ls -l test
-rwsrwsrwt 1 xlzh xlzh 0  3  15 15:52 test
/*         */
xlzh@cmos:~$ chmod 7666 test
/*     */
xlzh@cmos:~$ ls -l test
-rwSrwSrwT 1 xlzh xlzh 0  3  15 15:52 test
xlzh@cmos:~$

1.3マスク


まず実験をして、linuxの下でそれぞれ1つのディレクトリと1つのファイルを創立して、その権限ビットを表示します
xlzh@cmos:~$ mkdir dir
xlzh@cmos:~$ touch test
xlzh@cmos:~$ ls -ld dir
drwxrwxr-x 2 xlzh xlzh 4096  3  15 15:57 dir
xlzh@cmos:~$ ls -l test
-rw-rw-r-- 1 xlzh xlzh 0  3  15 15:57 test
xlzh@cmos:~$

新しいディレクトリはすべて775を表示して、新しいファイルは664で、どうして新しいファイルとディレクトリの権限は777ではありませんか?マスクの存在により、ユーザがディレクトリを新規作成すると777がマスクと操作し、ユーザがファイルを新規作成すると666がマスクと操作する.umaskコマンドで現在のシステムマスクを表示できます
xlzh@cmos:~$ umask
0002
xlzh@cmos:~$

新規ディレクトリは777と007でマスクされ、結果は775、新規ファイルは666と002でマスクされ、結果は664です.
もちろん、umaskコマンドでシステムマスクを変更したり、新しいファイルの権限ビットを変更したりすることもできます.

2、Linux ACL権限管理


UGO権限管理方式では,所有者,同グループユーザ,その他グループユーザのみの権限管理が可能であり,各ユーザやユーザグループごとの権限管理が困難である.ACLはこのような限界のために生まれた.
ACL(Access Control List、アクセス制御リスト)は、UGO権限管理方式を拡張し、任意のユーザ/グループに対して読み取り、書き込み、実行権限を割り当てることができる.
よく使われるコマンドはgetfaclとsetfaclです.

2.1 ACLの設定


まずいくつかのタイプを見てみましょう
を選択します.
定義#テイギ#
ACL_USER_OBJ
ファイル所有者の権限
ACL_USER
追加ユーザーの権限
ACL_GROUP_OBJ
ファイルがグループに属する権限
ACL_GROUP
追加グループの権限
ACL_MASK
ACL_USER、ACL_GROUP_OBJ,ACL_GROUPの最大権限
ACL_OTHER
その他のグループの権限
ACLを設定するコマンドはsetfacl、-mオプションはaclルールの変更を表し、使用方法はsetfacl-m{u|g}:{user|group}:rwx;
u表示設定ACL_USERの権限、gはACLを修正することを表します_GROUPの権限
例は以下の通り
/*    ,        ACL  */
root@cmos:/home/xlzh# touch test
root@cmos:/home/xlzh# ls -l test
-rw-r--r-- 1 root root 0  3  15 16:39 test
root@cmos:/home/xlzh# getfacl test
# file: test
# owner: root
# group: root
user::rw-
group::r--
other::r--
/* xlzh   test   rwx   ,         ACL  */
root@cmos:/home/xlzh# setfacl -m u:xlzh:rwx test
root@cmos:/home/xlzh# ls -l test
-rw-rwxr--+ 1 root root 0  3  15 16:39 test
root@cmos:/home/xlzh# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:xlzh:rwx
group::r--
mask::rwx
other::r--
/* dhcpd  test   rwx   ,         ACL  */
root@cmos:/home/xlzh# setfacl -m g:dhcpd:rwx test
root@cmos:/home/xlzh# ls -l test
-rw-rwxr--+ 1 root root 0  3  15 16:39 test
root@cmos:/home/xlzh# getfacl test
# file: test
# owner: root
# group: root
user::rw-                      //ACL_USER_OBJ
user:xlzh:rwx               //ACL_USER
group::r--                     //ACL_GROUP_OBJ
group:dhcpd:rwx        //ACL_GROUP
mask::rwx                   //ACL_MASK
other::r--                     //ACL_OTHER

root@cmos:/home/xlzh#

ACLルールを設定するとlsはパーミッションビットを表示し、パーミッションビットの後に'+'番号が追加されることがわかります.
上記の例では、指定したユーザと指定したグループにrwx権限を追加する方法を示しています.もちろん、rwx権限はUGO権限と同様に、任意に変更できます.
設定が完了すると、xlzhユーザーとdhcpdグループのユーザーは、ファイルの読み取り、書き込み、実行の権限を有します.

2.2 ACLマスク


定義を見て、ACLマスクはACL_を定義しました.USER、ACL_GROUP_OBJ,ACL_GROUPの最大権限.例として
/*    */
root@cmos:/home/xlzh# touch test
root@cmos:/home/xlzh# ls -l test
-rw-rw-r-- 1 root root 0  3  15 16:50 test
/*  acl  , xlzh   dhcpd       rwx   */
root@cmos:/home/xlzh# setfacl -m u:xlzh:rwx test
root@cmos:/home/xlzh# setfacl -m g:dhcpd:rwx test
root@cmos:/home/xlzh# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:xlzh:rwx
group::rw-
group:dhcpd:rwx
mask::rwx
other::r--
/**/
root@cmos:/home/xlzh# ls -l test
-rw-rwxr--+ 1 root root 0  3  15 16:53 test
/*    ,      acl  */
root@cmos:/home/xlzh# setfacl -m m:r test
root@cmos:/home/xlzh# ls -l test
-rw-r--r--+ 1 root root 0  3  15 16:50 test
root@cmos:/home/xlzh# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:xlzh:rwx              #effective:r--
group::rw-                 #effective:r--
group:dhcpd:rwx            #effective:r--
mask::r--
other::r--

root@cmos:/home/xlzh#

上記の例から2点がわかります.
1.ファイルがACLルールを設定すると、権限ビットの2番目のグループに表示されるのは、同一グループに属するファイルへのアクセス権限ではなく、ACLのマスクである.したがってlsがパーミッションビットの後ろに「+」番号があるのを見た場合、getfaclを使用してファイルが所有するグループのパーミッションを表示する必要があります.
2、ACLのマスクを修正した後、例えば、マスクをr--に修正すると、ACL_が見えるUSER,ACL_GROUP_OBJとACL_GROUP 3行の後ろにeffective:r—が追加されました.この3つのタイプが実際に有効になった権限は読み取り権限しかありません.なぜですか.ACLを見てMASKの定義:ACL_USER、ACL_GROUP_OBJ,ACL_GROUPの最大権限.すなわち、マスクをr--に変更すると、マスクよりも小さく、マスクよりも大きくできない3つのタイプの最大権限範囲が制限される.

2.3デフォルトACL


デフォルトACLはディレクトリにのみ有効です.1つのディレクトリにデフォルトACLルールが設定されている場合、そのディレクトリの下に作成されたすべてのファイルは、このディレクトリのACLルールを継承します.例は次のとおりです.
/*    ,  ACL  */
root@cmos:/home/xlzh# mkdir dir
root@cmos:/home/xlzh# getfacl dir
# file: dir
# owner: root
# group: root
user::rwx
group::rwx
other::r-x
/*    ACL  , xlzh dhcpd            rwx  */
root@cmos:/home/xlzh# setfacl -d -m u:xlzh:rwx dir
root@cmos:/home/xlzh# setfacl -d -m g:dhcpd:rwx dir
root@cmos:/home/xlzh# ls -ld dir
drwxrwxr-x+ 2 root root 4096  3  15 17:05 dir
root@cmos:/home/xlzh# getfacl dir
# file: dir
# owner: root
# group: root
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:xlzh:rwx
default:group::rwx
default:group:dhcpd:rwx
default:mask::rwx
default:other::r-x
/*    ,       ,  acl  */
root@cmos:/home/xlzh# cd dir
root@cmos:/home/xlzh/dir# touch file
root@cmos:/home/xlzh/dir# mkdir dir
/*xlzh dhcpd     rwx  */
root@cmos:/home/xlzh/dir# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:xlzh:rwx            #effective:rw-
group::rwx            #effective:rw-
group:dhcpd:rwx            #effective:rw-
mask::rw-
other::r--
/*xlzh dhcpd     rwx  ,        dir     */
root@cmos:/home/xlzh/dir# getfacl dir
# file: dir
# owner: root
# group: root
user::rwx
user:xlzh:rwx
group::rwx
group:dhcpd:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:xlzh:rwx
default:group::rwx
default:group:dhcpd:rwx
default:mask::rwx
default:other::r-x

root@cmos:/home/xlzh/dir#

上記の例では、次の点に注意してください.
1、dirにデフォルトAClルールを設定した後、dirディレクトリの下のすべてのファイルがそのディレクトリのすべてのACLルールを継承しているだけで、そのディレクトリがすでにACLルールを備えているわけではない.例えば上記dirのAClルールを設定した後.xlzhとdhcpグループ内のユーザーもdirディレクトリの下でファイルを新規削除する権限がありません.以下のコマンドを実行しない限り、ディレクトリ自体のACLルールを設定します.
root@cmos:/home/xlzh# getfacl dir
# file: dir
# owner: root
# group: root
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:xlzh:rwx
default:group::rwx
default:group:dhcpd:rwx
default:mask::rwx
default:other::r-x

/*  ACL            ACL  ,         ACL  */
root@cmos:/home/xlzh# setfacl -m u:xlzh:rwx dir
root@cmos:/home/xlzh# setfacl -m g:dhcpd:rwx dir
root@cmos:/home/xlzh# getfacl dir
# file: dir
# owner: root
# group: root
user::rwx
user:xlzh:rwx
group::rwx
group:dhcpd:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:xlzh:rwx
default:group::rwx
default:group:dhcpd:rwx
default:mask::rwx
default:other::r-x

root@cmos:/home/xlzh#

2.4まとめ


1、普通ACLルールは普通ファイルとディレクトリファイルを設定することができ、UGOファイルに対する権限方式の補充である
2、デフォルトACLルールはディレクトリに対してのみ有効であり、そのディレクトリの下のファイルによって継承され、そのディレクトリ自体に対する権限は、通常のACLルールを使用する必要がある
3、AClルールを設定すると、ファイルがグループに属する権限ビットに表示されるaclルールのマスクは、元の意味ではなくなります
4、ACLルールのマスクはACL_を制限したUSER、ACL_GROUP、ACL_GROUP_OBJの最大権限