Linux最优秀的地方之一就是在于它的多人多任务环境。而为了让各个用户具有保密的文件数据,因此文件权限管理就变得很重要了。Linux一般将文件可读可写的身份分为三个类别,分别是 拥有者(owner)、所属群组(group)、其他人(other),且三种身份各有读(read)、写(write)、执行(execute)等权限。
1、查看/etc/passwd文件的属性
[root@localhost ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 2395 4月 27 21:38 /etc/passwd
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁能通过何种方式对文件和目录进行访问和操作
1、Linux 权限可以给三类文件系统对象赋予权限 —— 它们分别为:
u:文件所有者
g:文件所属组
o:其他用户
2、三种基本权限:
r:读 ; w:写; x:执行
3、文件的权限与归属
chmod命令
chmod
命令用于更改文件对于某类用户的操作权限
用chmod命令修改权限有两种操作方法:
方法一:chmod [ {ugoa} {±=} {rwx} ] [ 文件或目录 ]
注:
u:所有者 g:所属组 o:其他人 a:所有人
+:为用户增加权限 -:为用户减少权限 =:为用户赋予权限
r:读权限 w:写权限 x:执行权限
方法二:使用数字表示权限
使用数字表示权限可以轻松的进行权限的设定,如下图所示,读的权限为数字4,写的权限为数字2,执行的权限为数字1,那么三种权限分配的用户最高权限就是777。
语法格式
:chmod [mode=777] [文件或目录]
注:
-R :递归修改(就是将嵌套在很多文件夹中的文件权限修改)
示例:
#将当前目录下的a1文件权限改为 rwxr-x-w-
[root@localhost ~]# chmod 752 a1
要想改变一个文件对某些用户的权限,除了可以修改它的权限之外,还有一个方案就是修改文件的属主(所属用户)和属组(所属组)
chown命令
chown
命令可以用来改变文件(或目录)的 属主 和 属组
语法格式
:chown user:group filename
案例:
chown user:group filename 实例:chown hr:san a.txt 把文件的属主和属组改为hr和san
chown user filename 实例:chown san a.txt 把文件的属主改为san用户
chown :group filename 实例:chown :miao a.txt 把文件的属组改为miao这个组
chown user: filename 实例:chown san: a.txt 自动继承这个用户所有的组
注:
1、如果你要对目录进行操作,加 -R : 递归(目录下的所有内容都更改,否则只修改目录)
2、只有 文件属主 或者 root用户 才能够对修改文件使用 chown
3、属主 只能修改文件的 属组,并且修改后的 属组 必须是属主所在的用户组(无论主属组还是附加属组,root例外)
示例:
#将普通文件test的属主改为u1,属组改为u2
[root@localhost ~]# chown u1:u2 test
用普通的身份创建一个目录a1,然后修改a1的属组为u1,且a1下的所有文件属组也改为u1
[young@localhost ~]$ mkdir a1
[root@localhost ~]# chown :u1 -R /home/young/a1
在复杂多变的环境中,单纯设置文件的rwx权限无法满足我们对安全和灵活性的需求,因此便有了SUID、SGID和SBIT(Sticky Bit)的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。
1、SUID
限定
:只能设置在文件上面。一般用于可执行文件,对目录设置无效
功能
:程序运行时的权限从执行者变更成程序所有者的权限(一般在设置s权限时需设置相应的x权限)
生效特征
:当s
这个标志出现在文件属主
的x
权限上时
2、SGID
限定
:主要作用于目录设置,也可以用于二进制文件,使得执行者临时拥有该文件的属组权限
功能
:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的所属组
生效特征
:当s
这个标志出现在属组
的x
权限上时
3、SBIT(Stickybit)
功能
:粘滞位权限是 针对目录 的,对文件无效,也叫 防删除位
生效特征
:当t
这个标志出现在其他用户
的x
权限上时
chmod 命令可以设置文件的特殊权限,数字位为4位,X(特殊权限)X(属主权限)X(属组权限) X(其他权限)
如:chmod 4777 [文件名/目录名]
这3个特殊权限对应的权限数值为:
SUID | SGID | SBIT |
---|---|---|
u+s 或 u =4 | g+s 或 g=2 | o+t 或 o=1 |
示例:
# 问:普通用户没有对shadow文件写入的权限, 但是普通用户使用passwd命令修改自己密码时,可以修改shadow文件中的内容,这是什么原因?
答:因为passwd命令拥有SUID特殊权限位,可以让普通用户在使用passwd命令时暂时拥有root身份权限,同时把变更的密码信息写入到shadow文件中
# 在根目录下用root创建一个文件b1,设置权限为:
# 1、文件所有者对文件具有读写执行的权限,用户组和其他用户没有任何权限
# 2、修改cat命令的权限,使得普通用户可以用cat命令去查看文件b1的内容
[root@localhost ~]# touch /b1
[root@localhost /]# chmod 700 b1
[root@localhost ~]# chmod u+s /bin/cat
ACL
ACL
是Access Control List
的英文缩写,中文译为访问控制列表
,主要目的是提供传统的属主、属组和其他用户的读、写、执行权限之外的详细权限设置。ACL可以针对单一用户、单一文件或目录来进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有帮助。
查看:getfacl [选项] 文件名
设置:setfacl [选项] 权限 文件名
setfacl 的常用选项:
选项 | 说明 |
---|---|
-m | 修改或添加acl权限 |
-x | 删除指定的acl权限 |
-b | 删除【所有的】acl权限 |
-k | 删除【默认的】acl权限 |
-R | 递归 设置目录及其子目录中的文件的acl权限 |
示例:
# 设置用户chen对用户u1的家目录拥有的rwx权限
[root@localhost ~]# setfacl -m u:chen:rwx /home/u1
Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。
有用户曾经在生产环境中碰到过明明权限充足但却无法删除某个文件的情况,或者仅能在日志文件中追加内容而不能修改或删除内容,这在一定程度上阻止了黑客篡改系统日志的图谋,因此这种 “奇怪” 的文件也保障了Linux系统的安全性。
1、chattr
chattr
命令用于设置文件的隐藏权限
命令格式
:chattr [选项] 文件
常用选项:
选项 | 说明 |
---|---|
+a | 只能追加内容,无法覆盖 / 删除内容 |
+i | 即 immutable,不允许对文件进行任何的修改。若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 |
-i | 移除i参数 |
-a | 移除a参数 |
2、lsattr
lsattr
命令用于显示文件的隐藏权限。在Linux系统中,文件的隐藏权限必须使用lsattr命令来查看,平时使用的ls之类的命令则看不出端倪。
命令格式:lsattr [选项] 文件
示例:
# 创建一个b.txt文件,此文件只能追加内容,连root用户都不能删除
[root@localhost ~]# chattr +a b.txt
# 查看b.txt文件的隐藏权限
[root@localhost ~]# lsattr b.txt