本节概要:
高级文件权限介绍
高级文件权限管理
环境准备:
操作系统:Centos7.2,Centos6.5。
一、高级文件权限管理
1. 高级文件权限介绍
本节所要讲的三种特殊权限是指suid、sgid、sticky-bit。
SUID
标志位大S,占据属主的x位,对应的值为: u 4,g 2,t, 1,程序运行时程序的执行者会拥有程序属主的权限,无论哪个用户执行此文件都会拥有文件属主的权限。
此标志位只能在可执行的二进制文件上设置,对目录设置无效。
SGID
标志位大S,占据group的x位,在设置了SGID权限的目录下新建的文件的所属组会继承上级目录的所属组。若一个目录设置了SGID,则所有被复制到这个目录下的文件,其所属的组都会被设置为和这个目录一样,除非在复制文件时加上-p(preserve,即保留文件属性)的参数。
此标志位可以给二进制程序设置也可以给目录设置。
Sticky-bit
标志位t,占据other的x位,目录下新建的文件只有root、文件属主、目录属主才能删除、移动。
此标志位只作用于目录。
2. 高级文件权限管理
SUID举例:
[user1@localhost ~]$ cat /etc/shadow #使用普通用户查看
cat: /etc/shadow: Permission denied #无权限
[user1@localhost ~]$ exit
logout
[root@localhost ~]# which cat
/usr/bin/cat
[root@localhost ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54048 Jun 9 2014 /usr/bin/cat
[root@localhost ~]# chmod u+s /usr/bin/cat #给cat命令加suid
[root@localhost ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54048 Jun 9 2014 /usr/bin/cat
[root@localhost ~]# su - user1
Last login: Mon Apr 2 21:31:26 PDT 2018 on pts/1
[user1@localhost ~]$ cat /etc/shadow #普通用户可以查看,相当于root在查看。
root:$1$bXTsP1J4$.X55hoWfc1/xq9X.2wypY/:17621:0:99999:7:::
bin:*:16372:0:99999:7:::
daemon:*:16372:0:99999:7:::
adm:*:16372:0:99999:7:::
lp:*:16372:0:99999:7:::
sync:*:16372:0:99999:7:::
shutdown:*:16372:0:99999:7:::
halt:*:16372:0:99999:7:::
mail:*:16372:0:99999:7:::
operator:*:16372:0:99999:7:::
games:*:16372:0:99999:7:::
ftp:*:16372:0:99999:7:::
nobody:*:16372:0:99999:7:::
SGID 举例:
[root@localhost ~]# mkdir dir1
[root@localhost ~]# ll -d dir1
drwxr-xr-x. 2 root root 6 Apr 2 21:39 dir1
[root@localhost ~]# chown root:user1 dir1 #修改dir1 group为user1
[root@localhost ~]# ll -d dir1
drwxr-xr-x. 2 root user1 6 Apr 2 21:39 dir1
[root@localhost ~]# cd dir1
[root@localhost dir1]# touch file1
[root@localhost dir1]# ll
total 0
-rw-r--r--. 1 root root 0 Apr 2 21:40 file1 #dir1加sgid前新建的文件group为root
[root@localhost dir1]# chmod g+s ../dir1 #dir1加sgid
[root@localhost dir1]# ll -d ../dir1
drwxr-sr-x. 2 root user1 18 Apr 2 21:40 ../dir1
[root@localhost dir1]# touch file2
[root@localhost dir1]# ll
total 0
-rw-r--r--. 1 root root 0 Apr 2 21:40 file1
-rw-r--r--. 1 root user1 0 Apr 2 21:40 file2 #新建的文件file2 和dir1 group一致。
[root@localhost dir1]# touch ../file3
[root@localhost dir1]# cp ../file3 .
[root@localhost dir1]# ll
total 0
-rw-r--r--. 1 root root 0 Apr 2 21:40 file1
-rw-r--r--. 1 root user1 0 Apr 2 21:40 file2
-rw-r--r--. 1 root user1 0 Apr 2 21:41 file3 #拷贝的文件也会继承dir1的group。
Sticky-bit举例:
[root@localhost ~]# cd /tmp
[root@localhost tmp]# mkdir dir2
[root@localhost tmp]# ll -d dir2
drwxr-xr-x. 2 root root 6 Apr 2 21:50 dir2
[root@localhost tmp]# chmod o+t dir2 #添加Sticky-bit权限
[root@localhost tmp]# ll -d dir2
drwxr-xr-t. 2 root root 6 Apr 2 21:50 dir2
[root@localhost tmp]# cd dir2
[root@localhost dir2]# touch file1
[root@localhost dir2]# chmod 777 file1 #给所有用户所有权限
[root@localhost dir2]# ll
total 0
-rwxrwxrwx. 1 root root 0 Apr 2 21:52 file1
[root@localhost dir2]# su - user1
Last login: Mon Apr 2 21:49:11 PDT 2018 on pts/1
[user1@localhost ~]$ rm -rf /tmp/dir2/file1
rm: cannot remove ‘/tmp/dir2/file1’: Permission denied #user1即使有权限也无法删除
3. ACL 权限管理
Linux ACL介绍:
Linux 的权限控制可以使我们完成对文件的user、group、other的控制,极大的方便了我们对Linux系统的维护,但是在很多场景下文件的读、写、执行权限需要针对某个人或者某些人进行控制,使用chmod不能达成目标,此时可以借助Linux ACL进行控制。
ACL 支持多种Linux 文件系统,包括ext2、ext3、ext4、xfs、btrfs等文件系统。
Linux ACL 使用:
命令:getfacl、setfacl
参数:
-m 设定acl权限
-x 删除指定用户、用户组的acl权限
-b 删除文件所有acl权限,针对文件
- d 设定默认的acl权限
-k 删除默认acl权限
-R 递归设置acl权限,添加或者删除。
举例:
[root@localhost ~]# touch file1
[root@localhost ~]# getfacl file1 #查看文件acl
# file: file1
# owner: root
# group: root
user::r--
group::r--
other::r--
[root@localhost ~]# setfacl -m u:user1:rwx file1 #设置用户user1可对file1权限为rwx。
[root@localhost ~]# getfacl file1
# file: file1
# owner: root
# group: root
user::r--
user:user1:rwx #user1权限已加
group::r--
mask::rwx
other::r--
[root@localhost ~]# mkdir dir1
mkdir: cannot create directory ‘dir1’: File exists
[root@localhost ~]# setfacl -R -m u:user1:rwx dir1 #设置user1对目录dir1 权限为rwx
[root@localhost ~]# getfacl dir1
# file: dir1
# owner: root
# group: root
user::rwx
user:user1:rwx #user1对dir1 权限已加
group::r-x
mask::rwx
other::r-x
[root@localhost ~]# setfacl -x u:user1 file1 #删除user1对file1权限
[root@localhost ~]# getfacl file1
# file: file1
# owner: root
# group: root
user::r--
group::r--
mask::r--
other::r--
[root@localhost ~]# setfacl -R -x u:user1 dir1 #删除user1对目录dir1权限
[root@localhost ~]# getfacl dir1
# file: dir1
# owner: root
# group: root
user::rwx
group::r-x
mask::r-x
other::r-x
[root@localhost ~]# setfacl -b file1 #删除file1上所有用户的acl
[root@localhost ~]# getfacl file1
# file: file1
# owner: root
# group: root
user::r--
group::r--
other::r--
4. 特殊文件保护
命令:chattr、lsattr
作用:chattr 防止系统中某个关键文件被修改,lsattr 查看文件属性
参数:
+: 在原有参数基础上追加参数。
-: 在原有参数基础上移出参数。
=: 更新到指定参数。
a: append,只能向文件中追加数据,不能删除,一般用于日志文件,只有root可设置。出现a位。
i: 文件不能删除、改名、设置链接,不能写入和追加数据,文件完全锁死。出现i位。
举例:
[root@localhost ~]# touch file1
[root@localhost ~]# ll file1
-r--r--r--. 1 root root 14 Apr 3 03:44 file1
[root@localhost ~]# chattr +a file1 #设置文件只能追加数据
[root@localhost ~]# ll file1
-r--r--r--. 1 root root 14 Apr 3 03:44 file1
[root@localhost ~]# lsattr file1 #查看文件属性
-----a---------- file1
[root@localhost ~]# rm -rf file1 #无法删除
rm: cannot remove ‘file1’: Operation not permitted
[root@localhost ~]# echo 11111 > file1 #无法写入
-bash: file1: Operation not permitted
[root@localhost ~]# echo 11111 >> file1 #只能追加
[root@localhost ~]# cat file1 #可以查看
this is file1
11111
[root@localhost ~]# chattr +i file1 #设置文件完全锁死,只可读
[root@localhost ~]# rm -rf file1
rm: cannot remove ‘file1’: Operation not permitted
[root@localhost ~]# echo 11111 >> file1
-bash: file1: Permission denied
[root@localhost ~]# lsattr file1
----ia---------- file1
[root@localhost ~]# chattr -a file1 #删除a属性
[root@localhost ~]# chattr -i file1 #删除属性i
[root@localhost ~]# lsattr file1
---------------- file1
[root@localhost ~]# echo 1111 > file1
生产环境问题举例:
Passwd修改用户密码时报错:passwd: Authentication token manipulation error
分析:此种报错一般可能为根分区磁盘空间用完或者账号相关文件权限被修改。
模拟:
二、扩展
查阅acl、chattr 文中列出的其他的参数,并学习使用。