目录

一、文件系统权限

1.1、认识文件系统权限

1.2、管理文件系统权限

1.3、特殊权限

1.4、默认权限

二、ACL权限

2.1、ACL本质是文件系统的一个挂载选项

2.2、更改文件的ACL权限

2.3、设置文件和目录的默认ACL权限


Linux中的权限管理分为两种类型

  1. 用户自主访问控制(DAC=Discretionary Access Control),包括文件系统权限和ACL权限;
  2. 强制访问控制(MAC=Mandatory Access Control),也就是SELinux;

这篇讨论用户自主访问控制。

一、文件系统权限

1.1、认识文件系统权限

Linux对文件、目录有rwx三种权限,也就是读r、写w、执行x。对文件和目录权限的影响为

权限 对文件的影响 对目录的影响
r读取 可以读取文件的内容。 可以列出目录的内容(可以列出文件名,但不能列出其他内容)
w写入 可以更改文件的内容。 可以创建或删除目录中的任一文件
x执行 可以作为命令执行文件。 可以访问目录内容(也就是可以cd进去)

用户可以用ls -l命令来列出文件的权限,或者列出目录下所有文件的权限。如果用户想列出目录的权限需要用ls -ld。

[student@server0 ~]$ ll
total 8
drwxrwxr-x. 2 student student 4096 Mar 24 01:13 d1
drwxrwxr-x. 2 student student 4096 Mar 24 01:12 d2
drwxrwxr-x. 2 student student    6 Mar 24 01:04 d3
drwxrwxr-x. 2 student student    6 Mar 24 01:04 d4
drwxrwxr-x. 2 student student    6 Mar 24 01:04 d5
[student@server0 ~]$ ls -l 1
ls: cannot access 1: No such file or directory
[student@server0 ~]$ ls -l d1
total 0
-rw-rw-r--. 1 student student 0 Mar 24 01:05 file_TXT_10.txt
-rw-rw-r--. 1 student student 0 Mar 24 01:05 file_TXT_1.txt
-rw-rw-r--. 1 student student 0 Mar 24 01:05 file_TXT_2.txt
-rw-rw-r--. 1 student student 0 Mar 24 01:05 file_TXT_3.txt
-rw-rw-r--. 1 student student 0 Mar 24 01:05 file_TXT_4.txt
-rw-rw-r--. 1 student student 0 Mar 24 01:05 file_TXT_5.txt
-rw-rw-r--. 1 student student 0 Mar 24 01:05 file_TXT_6.txt
-rw-rw-r--. 1 student student 0 Mar 24 01:05 file_TXT_7.txt
-rw-rw-r--. 1 student student 0 Mar 24 01:05 file_TXT_8.txt
-rw-rw-r--. 1 student student 0 Mar 24 01:05 file_TXT_9.txt
-rw-rw-r--. 1 student student 0 Mar 24 01:13 TTT
[student@server0 ~]$ ls -dl d1
drwxrwxr-x. 2 student student 4096 Mar 24 01:13 d1

我们看到每个文件、目录列出的权限都由基本部分构成。从左到右依次是:10个字符代表的文件系统UGO权限、软链接数、属于哪个用户、属于哪个组、大小、最后修改日期时间、文件名。

10个字符里面第1个字符是文件的类型,常见的有-普通文件、d目录、l符号链接、b块设备(硬件)、c字符设备(硬件)等,具体的后面的博客再讨论。第2到第10个字符分成三组UGO,每组都是rwx权限。U=User是文件所属用户的权限、G=Group是文件所属组下用户的权限、O=Others其他用户的权限。比如,/d1和/d2是属于user1用户、user3组的,但是读写权限有区别。

d5所属用户是user1,但是没有任何权限。user1也不能操作d5目录。

user3对d1目录可以cd进去,创建文件;对d2目录只能cd进去,不能创建文件,因为没有写权限;对d3不能cd进去,但是可以列出d3目录下的文件名。

[root@server0 d3]# ll -d /d?
drwxrwx---. 2 user1 user3 4096 Jun 21 10:10 /d1
drwxr-x---. 2 user1 user3 4096 Mar 24 01:12 /d2
drwxr-----. 2 user1 user3   71 Jun 21 10:11 /d3
drwx------. 2 user1 user3    6 Jun 21 10:08 /d4
d---------. 2 user1 user3    6 Jun 21 10:09 /d5
[root@server0 d3]#
[root@server0 d3]# su - user1
Last login: Sun Jun 21 10:10:00 CST 2020 on pts/0
[user1@server0 ~]$ cd /d5
-bash: cd: /d5: Permission denied
[user1@server0 ~]$ ll /d5
ls: cannot open directory /d5: Permission denied
[user1@server0 ~]$
[user1@server0 ~]$
[user1@server0 ~]$ exit
logout
[root@server0 d3]# su - user3
Last login: Sun Jun 21 10:10:17 CST 2020 on pts/0
[user3@server0 ~]$ cd /d1
[user3@server0 d1]$ touch user3_{1..5}
[user3@server0 d1]$
[user3@server0 d1]$ cd /d2
[user3@server0 d2]$ touch user3_{1..5}
touch: cannot touch ‘user3_1’: Permission denied
touch: cannot touch ‘user3_2’: Permission denied
touch: cannot touch ‘user3_3’: Permission denied
touch: cannot touch ‘user3_4’: Permission denied
touch: cannot touch ‘user3_5’: Permission denied
[user3@server0 d2]$
[user3@server0 d2]$ cd /d3
-bash: cd: /d3: Permission denied
[user3@server0 d2]$ ll /d3
ls: cannot access /d3/test_1: Permission denied
ls: cannot access /d3/test_5: Permission denied
ls: cannot access /d3/test_2: Permission denied
ls: cannot access /d3/test_3: Permission denied
ls: cannot access /d3/test_4: Permission denied
total 0
?????????? ? ? ? ?            ? test_1
?????????? ? ? ? ?            ? test_2
?????????? ? ? ? ?            ? test_3
?????????? ? ? ? ?            ? test_4
?????????? ? ? ? ?            ? test_5

1.2、管理文件系统权限

更改文件、目录的权限,命令为chmod,意思是Change Mode更改模式。使用chmod的方式有两种:符号关键字、数值法。

符号关键字就是 chmod WhoWhatWhich file|dir,其中Who就是u、g、o、a(代表文件或目录的所属用户、所属组、其他、全部),What就是+、-、=(代表增加、删除、精确设置),Which就是r、w、x(代表读、写、执行)。比如 chmod  u+r,g-w,o+x。

数值法就是chmod ### file|dir,每个数值代表一个访问级别u、g、o,#是r=4、w=2、x=1。

644:   rw-   r--  r--

700:   rwx   ---  ---

比如chmod 755   chmod 644。

注意,chmod -R以递归方式对整个目录中的文件设置权限。在使用-R选项时,使用大写的X以符号形式设置权限不会改写文件的执行权限,已经有执行权限的还有执行权限,没有执行权限的也不会添加执行权限。这会非常有用,非常安全。

[root@server0 ~]# ll
total 12
-rw-------. 1 root root 8619 May  7  2014 anaconda-ks.cfg
drwx------. 2 root root   34 Jun 21 10:31 demodir
[root@server0 ~]# ll demodir/
total 4
-rw-r--r--. 1 root root 119 Jun 21 10:30 hello.c
-rwxr--r--. 1 root root   0 Jun 21 10:31 test.sh
[root@server0 ~]#
[root@server0 ~]# chmod -R g+rwX demodir/
[root@server0 ~]#
[root@server0 ~]# ll
total 12
-rw-------. 1 root root 8619 May  7  2014 anaconda-ks.cfg
drwxrwx---. 2 root root   34 Jun 21 10:31 demodir
[root@server0 ~]# ll demodir/
total 4
-rw-rw-r--. 1 root root 119 Jun 21 10:30 hello.c
-rwxrwxr--. 1 root root   0 Jun 21 10:31 test.sh

更改文件、目录的用户或组所有权。用命令chown。

[root@server0 ~]# ll demodir/
total 4
-rw-rw-r--. 1 root root 119 Jun 21 10:30 hello.c
-rwxrwxr--. 1 root root   0 Jun 21 10:31 test.sh
[root@server0 ~]# cd demodir/
[root@server0 demodir]# chown user1: hello.c
[root@server0 demodir]# chown user1:user3 test.sh
[root@server0 demodir]# ll
total 4
-rw-rw-r--. 1 user1 user1 119 Jun 21 10:30 hello.c
-rwxrwxr--. 1 user1 user3   0 Jun 21 10:31 test.sh

1.3、特殊权限

文件系统权限中有三个特殊的权限:suid、sgid、sticky(粘滞位)。特殊权限对文件和目录的影响如下。

特殊权限 对文件的影响 对目录的影响
u+s(suid) 以拥有文件的用户身份,而不是以运行文件的用户身份执行文件。 无影响。
g+s(sgid) 以拥有文件的组身份执行文件。 在目录中最新创建的文件将其组所有者设置为与目录的所有者相匹配。
o+t(sticky) 无影响。 对目录具有write权限的用户可以删除其所拥有的文件,而无法删除或强制保存到其他用户所拥有的文件。

设置特殊权限用符号表示u+s、g+s、o+t。用数值表示第四位suid=4、sgid=2、sticky=1,比如chmod 2770中的2就是设置了sgid。

对于suid我们以passwd命令为例,可以看到passwd命令设置了suid,虽然任何用户都可以执行,但是都是以root的身份执行的。

对于sgid还没找到什么好的例子。

对于sticky我们以/tmp目录为例,出了root和文件的所属用户可以删除/tmp下的文件以外,其他用户不能删除/tmp下的文件。

[root@server0 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 30  2014 /usr/bin/passwd
[root@server0 ~]# ll -d /tmp/
drwxrwxrwt. 9 root root 4096 Jun 21 11:19 /tmp/

举个例子,mkdir /data/etc    ------->  createfile  (cp  /bin/touch  /data/etc/cf)。所有创建文件的任务都用cf来完成。要求 student能在这个目录下创建文件,创建出来的文件的用户和组必须是student:student,root 用户使用cf也只能在这个目录下创建文件,创建出来的文件的权限也必须是student:student。

[root@server0 etc]# mkdir -p /data/etc
[root@server0 etc]# cp /bin/touch /data/etc/cf
[root@server0 etc]# chown student:student /data/etc/
[root@server0 etc]# chmod g+s /data/etc/
[root@server0 etc]# chown student:student /data/etc/cf
[root@server0 etc]# chmod u+s /data/etc/cf
[root@server0 etc]# cd /data/etc/
[root@server0 etc]# ll
total 64
-rwsr-xr-x. 1 student student 62432 Jun 21 11:35 cf
[root@server0 etc]# ./cf file
[root@server0 etc]# ll
total 64
-rwsr-xr-x. 1 student student 62432 Jun 21 11:35 cf
-rw-r--r--. 1 student student     0 Jun 21 11:36 file

1.4、默认权限

创建文件、目录时,文件、目录会有一个默认的文件系统权限,这个权限是由umask的值来确定的。对于root,umask的值是0022。对于普通用户,umask的值是0002。

目录的权限是777-umask,文件的权限是777-umask再去掉所有的执行权限。因此

root创建目录的默认权限是:777-022 = 755 rwx r-x r-x  ------> root创建文件的默认权限是 rw-  r-- r-- 644。

普通用户创建目录的默认权限是:777-002 = 775 rwx rwx r-x    ----->普通用户创建文件的默认权限是rw- rw- r--  664。

umask的值在/etc/profile和/etc/bashrc文件中定义,用户可以在自己的.bash_profile和.bashrc中覆盖默认值。

二、ACL权限

2.1、ACL本质是文件系统的一个挂载选项

文件系统的Access Control List访问控制列表。ACL的本质是文件系统的一个挂载选项,可以选择是否在文件系统加载这个选项。

xfs文件系统默认已经启用ACL。
CentOS/RHEL7上ext4文件系统默认启用了ACL。
CentOS/RHEL6以前ext4文件系统默认不支持ACL,需要自己添加这个选项。有两种方法

  1. 在/etc/fstab文件中指定挂载选项 defaults,acl
  2. 使用命令 tune2fs -o acl /dev/sdb1

2.2、更改文件的ACL权限

添加或修改ACL
setfacl -m u:name:rwX file
setfacl -m g:name:rwX file
setfacl -m o::- file
setfacl -m u::rwx,g:sodor:rX,o::- file
设置ACL掩码
setfacl -m m::r file

举例
我们创建一个文件fileA。
当设置了acl权限以后,ls显示权限的时候,会看到10位权限的最后加上了加号“+”。
getfacl可以看到fileA属于root:root,但acl表示student也可以读写fileA。
再设置一个acl掩码,那么student就只能读fileA。

[root@server0 ~]# echo aclp > /tmp/fileA
[root@server0 ~]# ll /tmp/fileA
-rw-r--r--. 1 root root 5 Mar 27 11:17 /tmp/fileA[root@server0 ~]# setfacl -m u:student:rwX,g::rX,o::- /tmp/fileA
[root@server0 ~]# ll /tmp/fileA
-rw-rw----+ 1 root root 5 Mar 27 11:17 /tmp/fileA
[root@server0 ~]# getfacl /tmp/fileA
getfacl: Removing leading '/' from absolute path names
# file: tmp/fileA
# owner: root
# group: root
user::rw-
user:student:rw-
group::r--
mask::rw-
other::---[root@server0 ~]# setfacl -m m::r-- /tmp/fileA
[root@server0 ~]# getfacl /tmp/fileA
getfacl: Removing leading '/' from absolute path names
# file: tmp/fileA
# owner: root
# group: root
user::rw-
user:student:rw-        #effective:r--
group::r--
mask::r--
other::---

使用getfacl作为输入,让一个文件拥有和另一个文件一样的ACL权限。注意短划线“-”指定了stdin的使用。
getfacl fileA | setfacl --set-file=- fileB

[root@server0 ~]# echo aclpb > /tmp/fileB
[root@server0 ~]# ll /tmp/fileB
-rw-r--r--. 1 root root 6 Mar 27 11:27 /tmp/fileB[root@server0 ~]# getfacl /tmp/fileA | setfacl --set-file=- /tmp/fileB
getfacl: Removing leading '/' from absolute path names[root@server0 ~]# getfacl /tmp/fileB
getfacl: Removing leading '/' from absolute path names
# file: tmp/fileB
# owner: root
# group: root
user::rw-
user:student:rw-        #effective:r--
group::r--
mask::r--
other::---

注意设置递归方式将ACL应用于目录时,使用-R选项。
大写的X权限以递归方式使用,如果原来有执行权限x的文件保留该执行权限,目录会设置执行权限x以允许访问该目录。
非递归方式设置ACL时,最好也使用大写的X,因为可以防止意外添加执行权限。

举例目录/tmp/dir下有file1、file2。递归设置其ACL权限,注意X和x的区别。

[root@server0 ~]# mkdir /tmp/dir
[root@server0 ~]# touch /tmp/dir/file{1,2}
[root@server0 ~]# ll /tmp/dir/
total 0
-rw-r--r--. 1 root root 0 Mar 27 11:30 file1
-rw-r--r--. 1 root root 0 Mar 27 11:30 file2[root@server0 ~]# setfacl -R -m u:student:rwX /tmp/dir/
[root@server0 ~]# getfacl /tmp/dir/
getfacl: Removing leading '/' from absolute path names
# file: tmp/dir/
# owner: root
# group: root
user::rwx
user:student:rwx
group::r-x
mask::rwx
other::r-x[root@server0 ~]# getfacl /tmp/dir/file1
getfacl: Removing leading '/' from absolute path names
# file: tmp/dir/file1
# owner: root
# group: root
user::rw-
user:student:rw-
group::r--
mask::rw-
other::r--[root@server0 ~]# getfacl /tmp/dir/file2
getfacl: Removing leading '/' from absolute path names
# file: tmp/dir/file2
# owner: root
# group: root
user::rw-
user:student:rw-
group::r--
mask::rw-
other::r--[root@server0 ~]# setfacl -m u:student:rwx /tmp/dir/file2
[root@server0 ~]# getfacl /tmp/dir/file2
getfacl: Removing leading '/' from absolute path names
# file: tmp/dir/file2
# owner: root
# group: root
user::rw-
user:student:rwx
group::r--
mask::rwx
other::r--

删除ACL权限

删除指定用户、组的ACL,使用setfacl -x选项。

[root@server0 ~]# setfacl -x u:student /tmp/fileA[root@server0 ~]# ll /tmp/file*
-rw-r-----+ 1 root root 5 Mar 27 11:17 /tmp/fileA
-rw-r-----+ 1 root root 6 Mar 27 11:27 /tmp/fileB[root@server0 ~]# getfacl /tmp/fileA
getfacl: Removing leading '/' from absolute path names
# file: tmp/fileA
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::---

删除全部ACL(包括默认ACL),使用setfacl -b选项。

[root@server0 ~]# ll /tmp/file*
-rw-r-----+ 1 root root 5 Mar 27 11:17 /tmp/fileA
-rw-r-----+ 1 root root 6 Mar 27 11:27 /tmp/fileB[root@server0 ~]# setfacl -b /tmp/fileA
[root@server0 ~]# ll /tmp/file*
-rw-r-----. 1 root root 5 Mar 27 11:17 /tmp/fileA
-rw-r-----+ 1 root root 6 Mar 27 11:27 /tmp/fileB[root@server0 ~]# setfacl -R -b /tmp/dir/
[root@server0 ~]# ll /tmp/dir/
total 0
-rw-r--r--. 1 root root 0 Mar 27 11:30 file1
-rw-r--r--. 1 root root 0 Mar 27 11:30 file2[root@server0 ~]# getfacl /tmp/dir/file*
getfacl: Removing leading '/' from absolute path names
# file: tmp/dir/file1
# owner: root
# group: root
user::rw-
group::r--
other::r--# file: tmp/dir/file2
# owner: root
# group: root
user::rw-
group::r--
other::r--

2.3、设置文件和目录的默认ACL权限

目录可以设置默认的ACL权限,这些ACL会被子目录和文件自动继承(包括ACL掩码)。setfacl -m d:u:name:rx /tmp/dir。

[root@server0 ~]# setfacl -m d:u::-,d:u:student:rx /tmp/dir/
[root@server0 ~]# getfacl /tmp/dir/
getfacl: Removing leading '/' from absolute path names
# file: tmp/dir/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::---
default:user:student:r-x
default:group::r-x
default:mask::r-x
default:other::r-x[root@server0 ~]# echo 123 > /tmp/dir/file4
[root@server0 ~]# getfacl /tmp/dir/file4
getfacl: Removing leading '/' from absolute path names
# file: tmp/dir/file4
# owner: root
# group: root
user::---
user:student:r-x        #effective:r--
group::r-x          #effective:r--
mask::r--
other::r--

要删除目录某个用户、组的默认ACL,使用setfacl -x d:u:name <dir>选项。
要删除目录的所有默认ACL,使用setfacl -k <dir>选项。
要删除目录的所有ACL,使用setfacl -b <dir>选项。
注意区别

[root@server0 ~]# setfacl -k /tmp/dir/
[root@server0 ~]# getfacl /tmp/dir/
getfacl: Removing leading '/' from absolute path names
# file: tmp/dir/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

Linux04-文件系统权限与ACL权限相关推荐

  1. 23.文件特殊权限之SUID权限、SGID权限、Sticky BIT权限和ACL权限

    目录 1.SUID权限 2.SGID权限 3.Sticky BIT权限 4.ACL权限 在多用户多任务的Linux系统里,每个进程的运行都与运行的用户和组相关联.除了进程识别号(PID)以外,每个进程 ...

  2. Rhel7 设置目录权限,acl权限

    Rhel7 设置目录权限,acl权限 改变用户和组的所属 Getfacl 取得 Setfacl设置 [root@desktop0 tmp]# setfacl -m u:natasha:rw fstab ...

  3. linux文件系统权限管理(UGO权限、ACL权限、权限掩码)

    (1)权限对象: 1.文件拥有者 文件拥有者我们也成为文件的属主,由于Linux系统是一个多尔恩五用户的系统,因此会有很多人来使用这部主机,为了考虑每个人的隐私,文件所有者这个去权限就尤为重要. 2. ...

  4. linux 文件隐藏权限,linux文件基本权限、默认权限、隐藏权限和ACL权限

    基本权限 文件属性rwx 每个文件当用ls -l查看时,都会显示文件的详细属性信息,其中在排在首位的共有10位字符信息 例如 -rw-r–rw-. 1 root root --.. 共有10位,第一位 ...

  5. Linux之ACL权限控制

    ACL权限控制主要目的是提供传统的owner,group,other的read,wirte,execute权限之外的具体权限设置,可以针对单一用户或组来设置特定的权限 设置ACL权限:setfacl ...

  6. 用户身份与文件的权限(普通权限、特殊权限、隐藏权限和文件控制列表ACL)

    用户身份 root用户是存在于所有类UNIX操作系统中的超级用户,它拥有最高的系统所有权.root用户的用户身份号码UID为0,UID相当于用户的身份证号码一样,具有唯一性.管理员用户(超级用户)UI ...

  7. Linux权限管理(基本权限、默认权限、

    一.文件基本权限 1-1.基本权限的修改 -rw-r--r--   - 第一个"-"表示文件类型(- 文件,d 目录,l 软链接文件)   - rw-       r--      ...

  8. linux764权限,Linux 文件权限

    Linux文件权限 Linux系统中有句话叫做"everything is files",这当然不是戏称了,windows系统里的mp3.avi.txt.exe.word等等格式的 ...

  9. linux acl 权限 给任何用户或用户组设置任何文件/目录的访问权限

    ACL 是什么 ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表.它在UGO权限管理的基础上为文件系统提供一个额外的.更灵活的权限管理机制. ...

最新文章

  1. CV圈太卷了!继谷歌提出MLP-Mixer之后,清华、牛津等学者又发表三篇MLP相关论文...
  2. jquery中的each各种神奇遍历用法
  3. 《系统集成项目管理工程师》必背100个知识点-13项目经理是整合者
  4. 代码小结:时区的时间问题
  5. 开发接口文档_更优更稳更好,看文档驱动开发模式在AIMS中的优势
  6. eclipse中添加插件的方法
  7. 教你用 FRP 自建 Teamview 连接避开商业检测
  8. rabbitMQ第四篇:远程调用
  9. linux和unix的关系
  10. 学习了pr后的收获_pr学习心得(入门篇)
  11. 有哪些好的3D建模软件,最近对3D建模很感兴趣?
  12. [Unity]Roguelike随机地图生成(一)
  13. 绝地求生组装电脑配置推荐2021 适合玩吃鸡游戏电脑清单
  14. mysql sql 取年份_mysql – 从时间戳sql中获取年份
  15. 索骥馆-编程语言之《网络编程实用教程(第2版)》扫描版[PDF]
  16. 手机耗电统计app_Android O 新特性:精确统计 APP 电量消耗
  17. 5分钟学会撤池子 薄饼pancakeswap教程 撤销流通池图文课程
  18. FPGA调试笔记~PCIE之XDMA(一):一些概念性介绍
  19. 一个例子弄清银行承兑汇票和商业承兑汇票
  20. asciidoc_使用AsciiDoc编写文档

热门文章

  1. esp32 camera_利用Phyphox和ESP32蓝牙制作欧姆表测电阻
  2. 【js】通过js代码改变html表单中的数据
  3. Vue 增加动态路由功能 【在原有系统上增加】
  4. .NET 程序设计实验 含记事本通讯录代码
  5. Python安装及netcdf数据读写
  6. 2星|《快公司》2018年2-3期:商业人物访谈集
  7. 改善C#程序的建议3:在C#中选择正确的集合进行编码
  8. 2016/08/27 What I Learned About Going Fast at eBay and Google
  9. c# 元组Tuple
  10. 《mysql性能调优与架构设计》笔记: 一mysql 架构组成