学习笔记–权限管理

文件系统的权限管理

1、Linux系统下每个目录或文件的权限对象主要分为:属主(u)、属组(g)、其他用户(o),针对每类访问对象都定义了三种权限:读(r)、写(w)、执行(x),这三种权限针对目录和文件的作用各不相同,以下将做详细说明:

对于文件来说:

读(r)权限:可以使用文本查看类工具读取文件内容

写(w)权限:可以修改文件内容,但不能删除文件本身

执行(x)权限:主要针对二进制程序或脚本,可以将其提交给内核并启动一个进程(即运行程序)

对于目录来说:

读(r)权限:只能读取目录中的文件列表,不能访问、不能进入目录、不能查看元数据

写(w)权限:可以在目录中创建、删除文件,但不能使用cd命令进入目录中

执行(x)权限:可以使用cd命令进入目录,但不能查看目录中的文件列表

权限的表示方法可以使用字符表示,也可以使用八进制数字表示,对应关系如下表:

权限位 –x -w- -wx r– r-x rw- rwx
二进制表示 000 001 010 011 100 101 110 111
八进制表示 0 1 2 3 4 5 6 7

一个文件的权限位通常分为9位,前三位表示属主的权限,中间三位表示属组的权限,后三位表示其他用户的权限。

2、文件权限修改命令chmod

用法:chmod [选项]… 模式[,模式]… 文件…

或:chmod [选项]… 八进制模式 文件…

或:chmod [选项]… –reference=参考文件 文件…

常用选项:

-R:以递归方式更改所有的文件及子目录

模式:

u= 表示修改属主的所有r、w、x权限

g= 表示修改属组的所有r、w、x权限

o= 表示修改除了属主、属组的其他用户所有r、w、x权限

ug= 表示同时修改属组和属组的所有r、w、x权限

a= 表示修改所有对象的r、w、x权限(即属主、属组和其他用户)

u+ 表示在原来属主权限的基础上增加某位或某些位的权限

u- 表示在原来属主权限的基础上减去某位或某些位的权限

注意:X(大写)表示只给目录x权限,不给文件x权限

应用实例:

[root@liang testdir]# ll
总用量 4
drwxr-xr-x. 3 root root 4096 8月   4 05:46 bbb
[root@liang testdir]# chmod u=r,o-x bbb/
[root@liang testdir]# ll
总用量 4
dr--r-xr--. 3 root root 4096 8月   4 05:46 bbb
[root@liang testdir]# chown 765 bbb/
[root@liang testdir]# ll
总用量 4
drwxr-xr--. 3 765 root 4096 8月   4 05:46 bbb
[root@liang testdir]# ll /etc/shadow
----------. 1 root root 2268 8月   4 05:07 /etc/shadow
[root@liang testdir]# chmod --reference=/etc/shadow bbb/
[root@liang testdir]# ll
总用量 4
d---------. 3 root root 4096 8月   4 05:46 bbb

3、文件属主修改命令chown

用法:chown [选项]… [所有者][:[组]] 文件…

或:chown [选项]… –reference=参考文件 文件…

常用选项:

-R:递归处理所有的文件及子目录

应用实例:

[root@liang testdir]# ll
总用量 4
drwxrw-r-x. 3 root root 4096 8月   4 05:46 bbb
[root@liang testdir]# chown zsan bbb/
[root@liang testdir]# ll
总用量 4
drwxrw-r-x. 3 zsan root 4096 8月   4 05:46 bbb
[root@liang testdir]# chown lsi:sysadmins bbb/
[root@liang testdir]# ll
总用量 4
drwxrw-r-x. 3 lsi sysadmins 4096 8月   4 05:46 bbb
[root@liang testdir]# chown --reference=/root/ bbb/
[root@liang testdir]# ll
总用量 4
drwxrw-r-x. 3 root root 4096 8月   4 06:28 bbb

4、文件属组修改命令chgrp

用法:chgrp [选项]… 用户组 文件…

或:chgrp [选项]… –reference=参考文件 文件…

常用选项:

-R:递归处理所有的文件及子目录

应用实例:

[root@liang testdir]# ll
总用量 4
drwxrw-r-x. 3 root root 4096 8月   4 06:28 bbb
[root@liang testdir]# chgrp sysadmins bbb/
[root@liang testdir]# ll
总用量 4
drwxrw-r-x. 3 root sysadmins 4096 8月   4 06:28 bbb
[root@liang testdir]# chgrp --reference=/root/ bbb/
[root@liang testdir]# ll
总用量 4
drwxrw-r-x. 3 root root 4096 8月   4 06:28 bbb

5、设置文件或目录新建时的默认权限命令umask

umask命令的作用是新建目录或文件时屏蔽掉最大权限相应的位,从而得出默认权限。

对于普通文件来说,一般情况下,新建文件的默认八进制权限值等于666减去umask的值,但如果某类对象的权限值结果中存在x权限,则将其权限位加1。

对于目录文件来说,新建目录的默认八进制权限值等于777减去umask的值。

设定umask值:umask 八进制权限模式  或:umask 模式[,模式]…

显示umask值:umask  或 umask -S 或 umask -p

[root@fengl etc]# umask u=r,g=r,o=r
[root@fengl etc]# umask
0333
[root@fengl etc]# umask -p
umask 0333
[root@fengl etc]# umask -S  #显示的是新建文件或目录的默认权限,如果新建的是文件且有x权限时,则自动减去x权限
u=r,g=r,o=r
[root@fengl etc]# umask 234
[root@fengl etc]# umask
0234

可以在环境变量中直接添加umask的值实现控制新建目录或文件的默认权限效果。umask的全局配置在文件/etc/bashrc中,umask的用户环境变量可以在~/.bashrc中设置。

应用实例:

[root@liang6 testdir]# umask 
0022
[root@liang6 testdir]# touch file1
[root@liang6 testdir]# mkdir dir1
[root@liang6 testdir]# ll
total 4
drwxr-xr-x. 2 root root 4096 Aug  4 08:18 dir1
-rw-r--r--. 1 root root    0 Aug  4 08:18 file1
[root@liang6 testdir]# umask 111
[root@liang6 testdir]# touch file2
[root@liang6 testdir]# mkdir dir2
[root@liang6 testdir]# ll
total 8
drwxr-xr-x. 2 root root 4096 Aug  4 08:18 dir1
drw-rw-rw-. 2 root root 4096 Aug  4 08:18 dir2
-rw-r--r--. 1 root root    0 Aug  4 08:18 file1
-rw-rw-rw-. 1 root root    0 Aug  4 08:18 file2

6、Linux文件系统上的特殊权限

在Linux系统上的三个特殊权限为:SUID、SGID、Sticky

Linux系统中任何一个可执行程序文件都有其属主和属组,程序运行时的进程也有属主和属组。一个可执行程序能否启动为进程,取决于发起者对程序文件是否拥有可执行权限,当可执行程序启动为进程时,其进程的属主为发起者,进程的属组为发起者所属的组。而进程访问文件时的权限取决于进程的发起者,如果进程的发起者为程序文件的属主,则该进程所拥有的权限和程序文件的属主权限一样,如果进程的发起者为程序文件的属组,则该进程拥有的权限和程序文件的属组权限一样,同样,如果进程的发起者为程序文件的“其他位”用户,则该进程所拥有的权限和程序文件的“其他位”权限一样。

(1)、SUID的作用就是保证程序运行时的进程属主为原有文件的属主,即进程的有效身份不是发起者,而是程序文件自身的属主,这样可以避免不同用户启动可执行程序时的权限问题(如paswd命令,执行passwd命令的过程其实就是访问并修改/etc/shadow文件,而普通用户对该文件是没有任何访问权限的)。因此,SUID权限一般作用在有可执行权限的二进制文件(可执行程序或命令)上。

SUID权限的设置方法为:chmod u+s FILE…  或  chmod u-s FILE…

SUID的权限位(s)和文件的属主执行权限位(x)相同,此s可能显示为大写或小写,大写表示该文件的属主本身没有可执行权限,小写表示该文件的属主本身具有可执行权限。

应用实例:

[root@liang6 testdir]# ll
total 0
-rw-r--r--. 1 root root 0 Aug  4 08:18 file1
[root@liang6 testdir]# chmod u+s file1 
[root@liang6 testdir]# ll
total 0
-rwSr--r--. 1 root root 0 Aug  4 08:18 file1
[root@liang6 testdir]# chmod u-s file1 
[root@liang6 testdir]# ll
total 0
-rw-r--r--. 1 root root 0 Aug  4 08:18 file1
[root@liang6 testdir]# chmod u+sx file1 
[root@liang6 testdir]# ll
total 0
-rwsr--r--. 1 root root 0 Aug  4 08:18 file1

(2)、默认情况下用户创建文件时,其属组为此用户所属的主组,而一旦某目录被设定了SGID权限,则对该目录有写权限的用户,在此目录下所创建的文件或目录所属组为此目录的属组。

SGID的设置方法为:chmod g+s DIR…   或  chmod g-s DIR…

SUGD的权限位(s)和目录的属组执行权限位(x)相同,此s可能显示为大写或小写,大写表示该目录的属组本身没有可执行权限,小写表示该目录的属组本身具有可执行权限。

应用实例:

[root@liang6 testdir]# ll
total 4
drwxr-xr-x. 2 root root 4096 Aug  4 10:41 dir1
[root@liang6 testdir]# chmod g+s dir1/
[root@liang6 testdir]# ll
total 4
drwxr-sr-x. 2 root root 4096 Aug  4 10:41 dir1
[root@liang6 testdir]# chmod o+w dir1/
[root@liang6 testdir]# ll
total 4
drwxr-srwx. 2 root root 4096 Aug  4 10:41 dir1
[root@liang6 testdir]# su user5
[user5@liang6 testdir]$ touch dir1/file1
[user5@liang6 testdir]$ exit
[root@liang6 testdir]# su user3
[user3@liang6 testdir]$ touch dir1/file2
[user3@liang6 testdir]$ exit
[root@liang6 testdir]# ll dir1/
total 0
-rw-rw-r--. 1 user5 root 0 Aug  4 10:44 file1
-rw-rw-r--. 1 user3 root 0 Aug  4 10:44 file2

(3)、Sticky 称作为粘滞位,一般作用在目录上,实现的效果是对于一个多人可写的目录,每个用户仅能删除自己的文件(GID为0的管理员用户除外),如系统上的/tmp和/var/tmp目录默认都具有Sticky权限。

Sticky的设置方法为:chmod o+t DIR…   或  chmod o-t DIR…

Sticky的权限位(t)和目录的“其他位”执行权限位(x)相同,此t可能显示为大写或小写,大写表示该目录的“其他位”本身没有可执行权限,小写表示该目录的“其他位”本身具有可执行权限。

应用实例:

[root@liang6 testdir]# chmod o+t dir1/
[root@liang6 testdir]# ll
total 4
drwxr-xrwt. 2 root root 4096 Aug  4 10:44 dir1
[root@liang6 testdir]# cd dir1/
[root@liang6 dir1]# su user5
[user5@liang6 dir1]$ ll
total 0
-rw-rw-r--. 1 user5 root 0 Aug  4 10:44 file1
-rw-rw-r--. 1 user3 root 0 Aug  4 10:44 file2
[user5@liang6 dir1]$ rm -f file2
rm: cannot remove `file2': Operation not permitted
[user5@liang6 dir1]$ rm -f file1
[user5@liang6 dir1]$ ll
total 0
-rw-rw-r--. 1 user3 root 0 Aug  4 10:44 file2

(4)、这三个特殊权限也可以组成一组权限,并用八进制表示法表示,这三个权限位分别为:sgid-suid-sticky,

              000    001    010    011    100    101    110    111

八进制    0        1        2            3        4        5        6        7

特殊权限的八进制表达法,可于默认的三位八进制数字左侧再加一位八进制数字,如:

[root@liang testdir]# chmod 2555 dir1/
[root@liang testdir]# ll
总用量 4
dr-xr-sr-x. 2 root root 4096 8月   5 03:32 dir1

7、改变文件属性的命令chattr和查看属性命令lsattr

chattr命令只有超级权限的用户才能使用,该命令可改变存放在ext2、ext3、ext4、xfs、ubifs、reiserfs、jfs等文件系统上的文件或目录属性。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在绝大部分的Linux系统都是2.6以上内核了。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。

用法:chattr [-RVf] [-+=AacDdeijsSu] [-v version] files…

常用选项:

-R 递归处理,将指定目录下的所有文件及子目录一并处理

-V 显示指令执行过程

-f  抑制大多数的错误信息

-v<版本编号> 设置文件或目录版本

模式说明:

+<属性> 开启文件或目录的该项属性

-<属性> 关闭文件或目录的该项属性

=<属性> 指定文件或目录的该项属性

A:即Atime,文件或目录的atime不可被修改,可以有效预防例如手提电脑磁盘I/O错误的发生

a:即Append Only,设定该参数后,只能向文件中添加数据,而不能删除。如果目录具有这个属性,系统将只允许在这个目录下创建和修改文件,而不允许删除任何文件,多用于服务器日志文件安全

c:即compresse,设定文件是否经压缩后再存储,读取时需要经过自动解压操作

i:即Immutable,设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容,如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。i参数对于文件系统的安全设置有很大帮助

s:保密性地删除文件或目录,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域

u:与s相反,当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录

lsattr命令可查看使用chattr命令改变文件的属性信息。

用法:lsattr [-RVadlv] [files…]

常用选项:

-a:显示所有文件和目录,包括“.”和“..”

-d:显示目录,而非目录内容

-R:递归处理

应用实例:

[root@liang testdir]# chattr -R +i dir1/
[root@liang testdir]# lsattr -a dir1/
----i--------e- dir1/.
-------------e- dir1/..
----i--------e- dir1/file1
[root@liang testdir]# ll
总用量 4
drwxr-xr-x. 2 root root 4096 8月   5 04:20 dir1
[root@liang testdir]# cd dir1/
[root@liang dir1]# touch file2
touch: 无法创建"file2": 权限不够
[root@liang dir1]# ll
总用量 4
-rw-r--r--. 1 root root 5 8月   5 04:20 file1
[root@liang dir1]# cat file1 
aaaa
[root@liang dir1]# echo bbbbbbbbbb > file1 
-bash: file1: 权限不够

8、设置文件的访问控制列表命令setfacl

chmod命令可以修改文件或目录的所有者、所属组和其他人的权限,而setfacl命令可以实现更灵活的权限管理,除了对文件或目录的所有者、所属组和其他人的权限管理外,还可以对更多的用户设置权限。

文件设置了访问控制列表后的权限执行顺序为:所有者、自定义用户、自定义组、其他人

CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需要手动增加,命令如下:

]# tune2fs -o acl /dev/sdb1

]# mount -o acl /dev/sdb1 /mnt

用法: setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file …

常用参数:

-m, –modify=acl:修改ACL

-x, –remove=acl:移除ACL

-M, –modify-file=file:修改从文件读取的ACL条目

-X, –remove-file=file:移除从文件读取的ACL条目

-b, –remove-all:清空ACL

-d, –default:通常用在目录上,效果是在该目录下新建的文件或目录会默认添加ACL

-k, –remove-default:与-d相反,作用是移除目录上添加的默认ACL

-R, –recursive:递归设置

getfacl命令可以查看设置的文件访问控制列表

用法:getfacl [-aceEsRLPtpndvh] file …

应用实例:

[root@liang testdir]# setfacl -m u:zsan:rwx dir1/  #修改ACL
[root@liang testdir]# 
[root@liang testdir]# getfacl dir1/     #查看ACL
# file: dir1/
# owner: root
# group: root
user::rwx
user:zsan:rwx
group::r-x
mask::rwx
other::r-x
[root@liang testdir]# chmod g=w dir1/    
[root@liang testdir]# getfacl                #更改属组的权限后再查看ACL
Usage: getfacl [-aceEsRLPtpndvh] file ...
Try `getfacl --help' for more information.
[root@liang testdir]# getfacl dir1/
# file: dir1/
# owner: root
# group: root
user::rwx
user:zsan:rwx            #effective:-w-
group::r-x            #effective:---
mask::-w-
other::r-x
[root@liang testdir]# setfacl -x u:zsan dir1/   #移除ACL后使用ll查看
[root@liang testdir]# ll
总用量 8
drwxr-xr-x+ 2 root root 4096 8月   5 04:20 dir1
[root@liang testdir]# setfacl -b dir1/    #清楚ACL后查看
[root@liang testdir]# ll
总用量 4
drwxr-xr-x. 2 root root 4096 8月   5 04:20 dir1
[root@liang testdir]# setfacl -m d:u:zsan:rw dir1/   #设置目录的默认ACL,只影响改目录下的新文件
[root@liang testdir]# getfacl dir1/
# file: dir1/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:zsan:rw-
default:group::r-x
default:mask::rwx
default:other::r-x

原创文章,作者:苦涩咖啡,如若转载,请注明出处:http://www.178linux.com/28313

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-05 11:36

    写的很好,思路清晰,命令常见用法都有详细示例。

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code