Linux权限管理详解
1、Linux 的基本权限:
(1)Linux的基本权限说明
-rw-r--r-- 1 root root 08-11 01:45 aa.txt
权限位是十位
第一位:代表文件类型
- 普通文件
d 目录文件
l 链接文件
b 块设备文件
c 字符设备文件
s 套接字
p 管道
其余九位
读 写 执行 读 写 执行 读 写 执行
r w x r w x r w x
4 2 1 4 2 1 4 2 1
文件所有者(u) 文件所属组(g) 其他用户(o)
读 r(4):允许查看文件内容;允许显示目录内的文件列表
写 w(2):允许修改文件内容;允许对目录内的文件进行添加、删除、移动
执行 x(1):允许文件文件执行;允许目录的切换
(2)文件归属
所有者(属主):拥有该文件或目录的用户
所属组(属组):用户改文件或目录的组
(3)修改文件权限的命令及用法
命令名称:chmod
命令英文原意:change the permissions mode of a file
命令所在路径:/bin/chmod
功能描述:修改文件的权限
例:
chmod u+x aa 给aa文件的所有者添加x权限
chmod g+w,o+w aa 给aa文件的所属组和其他人添加w权限
chmod u=rwx aa 给aa文件的所有者赋予rwx权限
chmod 644 aa 修改aa文件的权限为644,对应为rw-r--r—
chmod -R 777 aa 递归修改aa目录及其子目录和文件权限为777
-R 递归修改目录下子选项的权限
说明:对文件有写权限,只代表可以修改这个文件;要想删除文件,需要对文件所在目录有写权限,只要对目录有写权限,目录中的文件,就算是 root 创建的,普通用户一样能删
除。目录一般都同时有 r-x 权限,如果一个目录只有 r 却没有 x,你能用 ls 查看,却
不能 cd 进去!
(4)文件或目录的所有者和所属组修改
命令名称:chown
命令英文原意:change file ownership
命令所在路径:/bin/chown
功能描述:修改文件或目录的所有者、所属组
例:
chown user1 aa 将aa文件的所有者修改为user1用户
chown user1:user1 aa 将aa文件的所有者修改为user1用户并且所属组修改为user1组
chown :user1 aa 将aa文件的所属组修改为user1组
chown -R [属主:属组] 目录 递归修改目录和文件的所有者和所属组
命令名称:chgrp
命令英文原意:change file group ownership
命令所在路径:/bin/chgrp
功能描述:改变文件或目录的所属组
语法:chgrp 用户组文件或目录
例:chgrp adm file1 改变文件file1的所属组为adm
命令名称:umask
功能描述:显示和设置默认掩码值
777
-022
--------------
755
就是创建文件的默认权限
总结:Linux的安全机制,不给新建文件x权限。
2、ACL 权限
(1)ACL权限的介绍
Linux基本的权限控制仅可以对所属用户、所属组、其他用户进行的权限控制,而不能精确地控制每个用户的权限。ACL规则就是用来解决这个问题的。使用ACL规则,我们可以针对单一账户设置文件及目录的访问权限。在centos7中xfs文件系统中默认开启了ACL权限
(2)ACL 权限的使用
格式:setfacl [选项] {-m|-x} {u:username:rwx} 文件或目录
选项:
-m :添加 ACL 权限
-x :删除某项 ACL 权限
-b :清空所有 ACL 权限
-R :实现目录上 ACL 权限的递归
d :设置默认 ACL 权限
例 1:添加 ACL 权限
setfacl –m u:u1:rwx a.txt 添加 u1 用户对 a.txt 文件的 rwx 权限
例 2:删除某项 ACL 权限
setfacl -x u:u1 a.txt 删除 u1 用户在 a.txt 文件上的 ACL 权限
例 3:清空所有 ACL 权限
setfacl -b a.txt 清空在 a.txt 文件上的所有 ACL 权限
例 4:实现目录上 ACL 权限的递归(目录)
setfacl -R –m u:u2:rwx aa 添加 u1 用户对 aa 目录以及目录内子选项的 rwx 权限
例 5:设置默认 ACL 权限(目录)
空目录:
setfacl -m d:u:u3:rwx bb
添加 u3 用户对目录 bb 的 rwx 权限,并且在 bb 目录里新建的文件 u3用户都有 rwx 权限
非空目录:
setfacl –m d:u:u3:rwx bb
setfacl -R –m u:u3:rwx bb
第一条设置默认权限,第二条递归设置 ACL 权限
注:前五个例子使用的 u 均可换成 g,然后实现特殊组对文件的 ACL 权限
例 6:设置最大有效权限 mask(目录)
setfacl -m m:rx cc 为 cc 目录添加默认最大权限为 rx,其他 ACL 权限不得超出此权限
3、sudo 授权
(1)sudo授权的介绍
在企业实践中,不是每一个系统管理员都能用 root 来管理服务器,所以需要给普通用户赋予一部分超级管理员权限。然后普通用户在使用超级管理员的命令时前面加上sudo 命令就可以正常使用超级管理员的命令了。/sbin和/usr/sbin里面的命令只有超级管理员才能执行,这个时候,就需要root来使用sudo授权普通用户使用部分超级用户才能使用的命令了。
(2)sudo授权的系统验证步骤
1. 当普通用户执行/sbin 或/usr/sbin 下的命令时,系统会查询/etc/sudoers 文件中是否有 root 给的授权
2. 当查询普通用户已拥有授权后,需要输入普通用户的密码来确认用户身份
3. 若密码输入成功后,则执行对应已经授权的命令
(3)sudo授权的方法
给普通用户授权使用超级用户命令方法一般是使用visudo命令来打开/etc/sudoers这个配置文件来给普通用户授权,普通用户使用这些被授权的超级用户命令时,只需在命令的前面添加上sudo加空格即可执行这些授权的超级用户命令。
注意:/etc/sudoers 文件内有固定语法结构,使用其它文档编辑器可能会造成配置文件出现错误,所以必须使用 visudo 命令打开该配置文件
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
a1 192.168.115.0/24=(ALL) ALL
上面的元素介绍:
root或a1:系统的哪个用户能使用 sudo 命令,即被授权者。也可以是组,组要在前面加%表示
ALL或某个网段:可以被管理的服务器的网络地址,写自己或 ALL 代表任何来源地址都可以管理本台服务器,192.168.115.0/24代表这个网段的服务器可以执行sudo授权的命令。
(ALL)或某个权限较大的用户:是以谁的身份来执行,ALL:ALL 就代表 root 可以任何人的身份来执行命令。
ALL或命令的绝对路径:可以使用什么命令,多条命令用逗号隔开(必须写绝对路径)
例 1:给 admin 用户赋予 root 所有命令权限
admin ALL=(ALL) ALL
例 2:授权 zhangsan 用户可以重启服务器
zhangsan ALL=(root) /sbin/shutdown -r now
例 3:授权 web 用户可以管理 IP:192.168.110.39 的 web 服务器
NO.1:可以使用 Apache 管理脚本
web 192.168.110.39=(root) /etc/rc.d/init.d/httpd reload,/etc/rc.d/init.d/httpd configtest
reload 重新加载配置文件使之生效;configtest 检查配置文件是否有语法错误。
NO.2:可以修改 Apache 的配置文件
web 192.168.110.39=(root) /bin/vi /etc/httpd/conf/httpd.conf
sudo 不仅仅能授权超级管理员的命令,还能授权普通命令以及详细选项和参数。
NO.3:可以更新网页文件
设置合理权限即可(w),可以通过给/var/www/html目录设置ACL权限,让 web 用户对/var/www/html 有写权限即可。
例 4:授权 add 用户可添加普通用户
add ALL=/usr/sbin/useradd 让 add 用户可以添加普通用户
add ALL=/usr/bin/passwd [A-Za-z]* , !/usr/bin/passwd“”,!/usr/bin/passwd root
让 add 用户可以给新添加用户修改密码,不允许修改 root 用户的密码
4、文件特殊权限
(1)SetUID 权限
1、当一个具有执行权限的文件设置 SetUID 权限后,用户执行这个文件时将以文件所有者的身份执行
特点:
2、只有可以执行的二进制程序才能设定 SUID 权限
3、命令执行者要对该程序拥有 x(执行)权限
4、命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
5、SetUID 权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
例:普通用户使用/usr/bin/passwd命令修改自己的密码
普通用户使用/usr/bin/passwd 的那一瞬间临时调用了 root 的身份,进行对/etc/passwd 和/etc/shadow 进行了修改,当信息修改完成后,立即释放 root 身份变回了自己普通用户的身份。
注意:如果取消了/usr/bin/passwd 的 SetUID 权限,则普通用户无法修改密码
危险的 SetUID:如果给/usr/bin/vim这个命令设置 SetUID 权限后,普通用户即可使用/usr/bin/vim命令来修改/etc/passwd等系统文件,使普通用户成为超级用户。
(2) SetGID 权限(文件和目录)
1、针对文件的作用:
(1)只有可执行的二进制程序才能设置 SGID 权限
(2)命令执行者要对该程序拥有 x(执行)权限
(3)命令执行在执行程序的时候,组身份升级为该程序文件的属组
(4)SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
2、针对目录的作用:
(1)普通用户必须对此目录拥有 r 和 x 权限,才能进入此目录
(2)普通用户在此目录中的有效组会变成此目录的属组
(3)普通用户对此目录拥有 w 权限时,新建的文件的默认属组是这个目录的属组
例:创建long目录,并给long目录SetGID权限,让普通用户有写权限。
[root@localhost ~]# mkdir /long
[root@localhost ~]# chmod g+s /long/
[root@localhost ~]# chmod 777 /long/
[root@localhost ~]# ls -ld /long/
drwxrwsrwx 2 root root 6 11月 29 15:56 /long/
[root@localhost ~]# su - a1 切换到普通用户a1
[a1@localhost ~]$ cd /long/ 让普通用户进入/long目录创建文件
[a1@localhost long]$ touch 1.txt
[a1@localhost long]$ ls -l
总用量 0
-rw-rw-r-- 1 a1 root 0 11月 29 16:04 1.txt
最后发现普通用户创建的1.txt文件的所属组不是a1,而是 root
(3)Sticky BIT 权限
Sticky BIT 粘着位,也简称为 SBIT。SBIT 目前仅针对目录有效,它的作用如下:
1、粘着位目前只对目录有效,普通用户对该目录拥有 w 和 x 权限,即普通用户可以在此目录拥有写入权限
2、如果没有粘着位,因为普通用户拥有 w 权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了 root 可以删除所有文件,普通用户就算拥有 w 权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
5、总结SetUID 权限,SetGID 权限,Sticky BIT 权限的设置
(1)各种特殊权限所对应的权限数值
权限名称 |
对应的权限数值 |
SetUID |
4 |
SetGID |
2 |
Sticky BIT |
1 |
读(r) |
4 |
写(w) |
2 |
执行(x) |
1 |
注意:权限值由4位数字组成,从左往右第一位是特殊权限值,第二位是文件或目录所有者的权限值,第三位是文件或目录的所属组的权限值,第四位是文件或目录其他人的权限值。 |
(2)SetUID 权限,SetGID 权限,Sticky BIT 权限的设置
上面知道了这些特殊权限所对应的权限值,那么我们就可以使用chmod来进行设置。
例1:给文件/long/1.txt设置SetUID权限
方法1:
[root@localhost long]# chmod u+s 1.txt 设置SetUID权限
[root@localhost long]# ls -l
总用量 0
-rwSrw-r-- 1 a1 root 0 11月 29 16:04 1.txt
[root@localhost long]# chmod u-s 1.txt 取消SetUID 权限
[root@localhost long]# ls -l
总用量 0
-rw-rw-r-- 1 a1 root 0 11月 29 16:04 1.txt
方法2:
[root@localhost long]# chmod 4755 1.txt 使用权限值设置SetUID权限
[root@localhost long]# ls -l
总用量 0
-rwsr-xr-x 1 a1 root 0 11月 29 16:04 1.txt
[root@localhost long]# touch 2.txt
[root@localhost long]# chmod 755 1.txt 使用权限值取消SetUID权限
[root@localhost long]# ls -l
总用量 0
-rwxr-xr-x 1 a1 root 0 11月 29 16:04 1.txt
例2:给/long/2.txt设置SetGID 权限。
方法1:
[root@localhost long]# chmod g+s 2.txt 设置SetGID 权限
[root@localhost long]# ls -l
总用量 0
-rw-r-Sr-- 1 root root 0 12月 1 16:27 2.txt
[root@localhost long]# chmod g-s 2.txt 取消SetGID 权限
[root@localhost long]# ls -l
总用量 0
-rw-r--r-- 1 root root 0 12月 1 16:27 2.txt
方法2:
[root@localhost long]# chmod 2744 2.txt 使用权限值设置SetGID 权限
[root@localhost long]# ls -l
总用量 0
-rwxr-Sr-- 1 root root 0 12月 1 16:27 2.txt
[root@localhost long]# chmod 744 2.txt 使用权限值取消SetGID 权限
[root@localhost long]# ls -l
总用量 0
-rwxr--r-- 1 root root 0 12月 1 16:27 2.txt
例3:给/long目录设置Sticky BIT 权限
方法1:
[root@localhost long]# chmod o+t /long/ 设置Sticky BIT 权限
[root@localhost long]# ls -ld /long/
drwxr-xr-t 2 root root 19 12月 1 16:35 /long/
[root@localhost long]# chmod o-t /long/ 取消Sticky BIT 权限
[root@localhost long]# ls -ld /long/
drwxr-xr-x 2 root root 19 12月 1 16:35 /long/
方法2:
[root@localhost long]# chmod 1755 /long/ 使用权限值设置Sticky BIT 权限
[root@localhost long]# ls -ld /long/
drwxr-xr-t 2 root root 19 12月 1 16:35 /long/
[root@localhost long]# chmod 755 /long/ 使用权限值取消Sticky BIT 权限
[root@localhost long]# ls -ld /long/
drwxr-xr-x 2 root root 19 12月 1 16:35 /long/
6、文件系统属性设置(chattr可以限制root)
格式:chattr [+-=] [选项] 文件或目录
选项:
i:如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能
添加和修改数据;如果对目录设置 i 属性,那么只能修改目录下文件的
数据,但不允许建立和删除文件
a:如果对文件设置 a 属性,那么只能在文件中增加数据,但是不能删
除也不能修改数据;如果对目录设置 a 属性,那么只允许在目录中建立
和修改文件,但是不允许删除
e:Linux 中绝大多数的文件都默认拥有 e 属性。表示该文件是使用 ext
件系统进行存储的,而且不能使用“chattr -e”命令取消 e 属性
查看文件系统属性
格式:lsattr 选项 文件名
选项:
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身属性