Linux中权限的种类较多,可以划分为用户对文件的权限、用户对系统命令的权限和文件特殊权限三类。下面详细阐述。
阐述设置权限的意义和作用
一、用户对文件的权限
用户对文件的权限是指用户拥有的对文件的增删改查操作。又可以细分为基本权限(ugo)、umask权限和ACL权限。
1、基本权限
1)、权限位
Linux文件的权限为一共是10位。第一位标示文件类型,之后每三位标示所有者、所属组和其他人的权限。
所有者、所属组和其他人都有rwx(读写执行)权限,分别用数字4、2、1表示。
第一位:表示文件类型。常见的文件类型有
- 普通文本文件
d 目录
l 软链接
b 块设备文件
c 字符设备文件
s 套接字
p 管道
之后九位每三位为一组分别是所有者、所属组、其他人的权限
至于权限位最后的点,有人认为是结束符,有人认为是SELinux的安全标签。在这里不做区分。
2)、权限含义
权限限制了用户对文件的操作,但是对于目录和文件,权限的含义是不同的。
①权限对文件的含义
注明:因为在Linux中一切皆文件,而此处的文件不再是广义上的文件,就是指基本的包含了数据内容的文件。
☆ r:表示能读取文件的数据
☆ w:表示能编辑修改文件中数据内容
☆ x:表示文件可执行。无论该文件能否正确执行。
②权限对目录的含义
对于目录而言,目录中的"数据内容"就是文件名。
☆ r:能够查询目录中包含了哪些文件
☆ w:编辑和删除目录中的文件
☆ x:表示可以进入到目录
3)、相关命令
★ chown -- 既可以修改所属组也可以修改所有者
chown user1:user aa % 将文件aa的所有者,所属组同时修改为user1
★ chgrp -- 修改文件所属组
chgrp user1 aa % 将文件aa的所属组修改为user1
★ chmod -- 修改文件权限
chmod 755 aa % 将文件aa的权限设置为755(rwxr-xr-x)
2、umask权限
1)、umask是设置文件默认权限的命令。用法如下:
[root@localhost /]# umask -S % 以rwx形式显示新建文件的缺省权限
[root@localhost /]# umask 022 %设置文件或目录的默认缺省权限
注意:此处的修改都是临时生效的,关机重启之后就会失效,若想永久生效,需要修改配置文件/etc/profile,文件中有关umask的部分剪切如下:
文件内容是:如果用户的UID大于199,并且UID的组名与用户名相同,那么默认权限是002;否则是022。通俗讲就是普通用户的umask权限是002,root用户的umask权限是022。因为默认root用户的UID是0.(002与022的含义下面讲)
2)、权限设置
合理的权限设置是保证系统安全的重要手段。对于文件来说,执行权限是最高权限,因为有的病毒,木马就是可执行文件,若是直接赋予执行权限,后果不堪设想;对于目录来说则没有限制。所以文件的默认权限最高设置为666,目录的默认权限最高设置为777。
系统中新建文件或目录的权限是拿最高权限与umask值相减得到的。所以默认文件和目录的权限整理如下:
文件 | 目录 | |
root | 644 | 755 |
普通用户 | 664 | 775 |
另外在权限设置时,ugo的权限应该是递减的,不允许其他人的权限大于所有者的权限;像一些111,751,654等权限都是不合理的,合理的权限除了满足ugo权限缩小的原则外,只能是0、5、7的结合。
3、ACL权限
1)、ACL权限的含义和作用
ACL权限的出现是满足用户对文件身份不足的情况的。当需要限定某一个用户对文件拥有不同于ugo的权限,就考虑加ACL权限。用户只对添加了ACL权限的文件生效,对于其他文件,仍是按照ugo的方式执行。
2)、ACL权限设置相关命令
☆ 查看ACL
[root@localhost ~]# getfacl 文件名
☆ 设定ACL
[root@localhost ~]# setfacl 选项 文件名
选项:
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限
例:
setfacl -m u:user1:rx aa % 对用户user1在文件aa上设置ACL权限值为读和执行权限
setfacl -m u:user1:rx -R /perm % 对用户user1在目录perm上递归创建ACL权限值为读和执行
setfacl -x u:user1 aa % 删除用户user1对文件aa的ACL权限
setfacl -b aa % 删除文件aa上所有的ACL权限
setfacl -m d:user1:rx /perm % 对用户user1在目录perm上创建默认ACL权限
注:递归ACL权限指的是对目录和目录中文件拥有指定的相同权限;默认ACL权限指的是用户对目录中新建的文件或目录执行指定权限
对文件创建了ACL权限后,文件权限位最后变成了+,如上图所示。
二、用户对系统命令的权限
用户对系统命令的权限主要介绍sudo。sudo是授予普通用户部分管理员功能的命令,经过授权后,普通用户可以执行管理员指定的命令。sudo用法如下:
执行命令visudo打开sudo的配置文件:
ALL ALL=(ALL)ALL
用户名 被管理的主机地址 =(用户身份) 授权命令
例:
授权普通用户user1可以重启服务器
......
user1 ALL=/bin/shutdown -r now
......
登录到普通用户user1,执行
[user1@localhost ~]$ sudo shutdown -r now
三、文件特殊权限(SetUID 、SetGID、SetBIT)
文件特殊权限由三种:SetUID、SetGID和SBIT分别用数字4、2、1表示,若是算上基本权限,权限位一共有四位。
1、SetUID
赋予条件:
☆可执行的文件;
☆命令执行者在执行程序时获得文件属主的身份;
☆用户身份改变只在执行过程有效
设置与取消SetUID:
chmod 4755 /bin/cat 或 chmod u+s /bin/cat % 设置SetUID权限
查看cat命令
此处有图SUID
可以看到加上SUID权限后,命令属组权限的x变成了s
chmod u-s /bin/cat 或 chmod 755 /bin/cat % 取消SetUID权限
2、SetGID
赋予条件:
☆可执行的文件
☆命令执行者在执行过程中变成程序的属组
☆用户身份改变只在执行过程有效
设置与取消SetGID:
chmod 2755 文件名 或 chmod g+s 文件名 % 设置SetGID权限
chmod 755 文件名 或 chmod g-s 文件名 % 取消SetGID权限
3、SBIT
SBIT也叫做粘着位,只能对目录有效;普通用户对目录拥有w和x权限;赋予了粘着位之后,普通用户即使有写权限,也不能删除目录中文件,普通用户只能删除自己建立的文件。但是设置粘着位必须把目录的权限设置为777,但是这样做违反了权限的赋予原则,权限设置带来的安全隐患要大于利处。
设置与取消SBIT:
chmod 1777 目录名 或 chmod o+t 目录名 % 设置SBIT
chmod 777 目录名 或 chmod o-t 目录名 % 取消SBIT
注意:无论是SetUID、SetGID还是SBIT都不建议使用,手工赋予文件或目录特殊权限,一旦出现服务器问题时,很难想到是文件或目录权限的问题,另外设置文件特殊权限存在一定的安全隐患。
四、文件系统属性(chattr)
通过chattr可以直接给目录或权限设置属性,命令各如下:
#chattr [+-=][选项] 文件或目录名
+: 增加权限
-: 删除权限
=: 等于某权限
选项:
i:i属性
对文件不允许对文件进行删除、改名,也不能添加和修改数据;
对目录,只能修改目录下文件的数据,但不允许建立和删除文件。
a:a属性
对文件,能增加数据,但是不能删除也不能修改数据;
对目录,允许在目录中建立和修改文件,但是不允许删除
e:e属性
linux系统的大多数文件默认的属性。表示该文件是利用ext文件系统进行存储,而且不能使用chattr -e命令取消e属性。
查看文件系统属性
[root@localhost]#lsattr 选项 文件或目录名%查看文件或目录的属性
选项:
-a--显示所有文件和目录
-d--显示目录属性
五、SELinux权限
待续