Linux权限管理
1、基础rwx权限
1.chmod命令(修改文件权限)
命令基本格式:
[root@localhost ~]#chmod [-R] 权限值 文件名
-R(大写)选项表示连同子目录中的所有文件都修改为设定的权限(递归)。
2.chown命令("change owner" 的缩写,主要用于修改文件(或目录)的所有者权限,除此之外,也可以修改文件(或目录)的所属组权限。)
命令基本格式:
[root@localhost ~]#chown [-R] 所有者 文件或目录
-R(大写)选项表示连同子目录中的所有文件都修改为设定的权限(递归)。
说明:同时更改所有者和所属组命令的基本格式:
[root@localhost ~]#chown [-R] 所有者:所属组 文件或目录
注意:所有者和所属组中间也可以使用点(.)。
3.chgrp命令
命令基本格式:
[root@localhost ~]#chgrp [-R] 所属组 文件名(目录名)
-R(大写)选项表示连同子目录中的所有文件都修改为设定的权限(递归)。
注意:被改变的群组名必须真实存在,否则命令无法正确执行,会提示 "invaild group name"。
4.rwx权限对文件、目录的基础权限要求
1)目录,赋予rx权限。
2)文件,赋予r权限。
5.umask命令(令系统新建文件和目录拥有默认权限)
命令基本格式:
[root@localhost ~]#umask
0022
#root用户默认0022,普通用户默认是0002
5.1umask变量配置文件
/etc/profile
2、ACL访问控制权限(包含开启方式)
说明:在Linux中ACL可以实现单一用户设定访问文件的权限。
2.1开启ACL权限
1)临时生效
[root@localhost ~]#mount –o remount,acl /
#重新挂载根分区,并加入ACL权限
2)永久生效
[root@localhost ~]#vi /etc/fstab
UUID= c2ca6f57-b15c-43ea-bca0-f239083d8bd2 /ext4 defaults,acl 1 1
#加入ACL权限
[root@localhost ~]#mount -a
#检测、重新挂载文件系统
2.2设定ACL权限(常用setfacl命令和getfacl命令)
说明:setfacl命令用于指定文件或目录设定ACL权限,getfacl命令用于查看是否配置成功。
getfacl命令的基本格式:
[root@localhost ~]#getfacl 文件名
setfacl 命令的基本格式:
[root2localhost ~]#setfacl 选项 文件名
1)setfacl –m:给用户或群组添加ACL权限
[root@localhost ~]# setfacl -m u:st:rx /project
#给用户st赋予r-x权限
注意:查询发现,权限位后面多了一个“+”,表示此目录拥有ACL权限。
2)setfacl –R:设定递归ACL权限
[root@localhost ~]# setfacl -m u:st:rx -R /project
注意:递归 ACL 权限指的是针对父目录中已经存在的所有子文件和子目录会继承父目录的 ACL 权限。
[root@localhost ~]# setfacl -m d:u:st:rx -R /project
注意:默认 ACL 权限指的是针对父目录中后续建立的文件和目录会继承父目录的 ACL 权限;
3)setfacl –x:删除指定用户的ACL权限
[root@localhost ~]# setfacl -x u:st /project
#删除指定用户和用户组的ACL权限
4)setfacl –b:删除指定文件的所有ACL权限
[root@localhost ~]# setfacl -b /project
#会删除文件的所有ACL权限
3、SetUID(SUID)文件特殊权限
[root@localhost ~]# chmod u-s /usr/bin/passwd
#属主取消SetUID权限
3.1SUID特殊权限具有如下特点:
1)只有可执行文件才能设定 SetUID 权限,对目录设定 SUID,是无效的。
2)用户要对该文件拥有 x(执行)权限。
3)用户在执行该文件时,会以文件所有者的身份执行。
4)SetUID 权限只在文件执行过程中有效,一旦执行完毕,身份的切换也随之消失。
注意:不要轻易的设置SetUID权限。
3.2SetUID文件记录脚本
[root@localhost ~]#vi suidcheck.sh
#!/bin/bash
find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
#搜索系统中所有拥有SetUID和SetGID权限的文件,并保存到临时目录中
for i in $(cat /tmp/setuid.check)
#每次循环都读取出临时文件中的文件名
do
grep $i /root/suid.list &> /dev/null
#比对文件名是否在模板文件中
if ["$?"!="0"]
#检测测上一条命令的返回值,如果不为0,则证明上文件不存在模板文件中
then
echo "$i isn't in listfile! " >>/root/suid_log_$(date +%F)
#如果文件名不在模板文件中,则输出错误信息,并把报错写入日志中
fi
done
rm -rf/tmp/setuid.check
#删除临时文件
4、SetGID(SGID)文件特殊权限
SGID 具有如下几个特点:
1)SGID 只针对可执行文件有效,普通文件赋予 SGID 没有意义。
2)用户需要对此可执行文件有 x 权限。
3)用户在执行具有 SGID 权限的可执行文件时,用户的群组身份会变为文件所属群组。
4)SGID 权限赋予用户改变属组身份的效果,只在可执行文件运行过程中有效。
5、Stick BIT(SBIT)文件特殊权限
注意:SBIT 权限仅对目录有效,一旦目录设定了 SBIT 权限,则用户在此目录下创建的文件或目录,就只有自己和 root 才有权利修改或删除该文件。
小结:Linux文件特殊权限(SUID、SGID、SBIT)
注意:SUID、SGID、SBIT 分别对应的数字。
4àSUID
2àSGID
1àSBIT
例:[root@localhost ~]# chmod 7777 ftest
#赋予SetUID、SetGID和SBIT权限
[root@localhost ~]# ll ftest
-rwsrwsrwt. 1 root root Apr 19 23:54 ftest
6、chattr命令
说明:chattr 命令,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用。
命令基本格式:
[root@localhost ~]#chattr [+-=] [属性] 文件或目录名
chattr命令常用的属性选项及功能
属性选项 | 功能 |
i | 如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据; |
a | 如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据; |
u | 设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录。 |
s | 和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复。 |
7、lsattr命令(查看文件系统属性)
说明:lsattr 命令,用于显示文件或目录的隐藏属性。
命令基本格式:
[root@localhost ~]#lasttr 文件或目录名
8、sudo命令
说明:sudo 命令,默认只有 root 用户可以运行。
命令基本格式:
[root@localhost ~]# sudo [-b] [-u 新使用者账号] 要执行的命令
注意:赋予普通用户部分可以执行的操作。
8.1sudo命令(配置文件/etc/sudoers)
[root@localhost ~]#visudo
#模板:
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
#%wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
#user1 ALL=/sbin/shutdown -r now
#用户查询可通过sudo执行的操作
[user1@localhost ~]#sudo -l
9、结合实例分析Linux权限对指令的影响
【例子1】
问:让当前用户进入某指定目录,可以使用什么指令?需要具备何种权限?
答:用户可以使用cd指令,同时要想使此命令成功执行,需要用户对要进入的目录具有 x 权限。另外,如果用户还想要在此目录中使用ls命令,还需要对此目录具有r权限。
【例子2】
问:如果想在某目录内读取一个文件,可以使用什么指令?需要具备何种权限?
答:用户可以使用cat、more、less等指令,并且该用户对此目录至少需要具有x权限,对读取的文件需要具有r权限。
【例子3】
问:如果想修改一个文件,可以使用什么指令?需要具备何种权限?
答:可以使用vim编辑器,对于权限方面,用户至少需要对该文件所在目录具有x权限,同时对该文件具有 r、w权限。
【例子4】
问:要想让使用者 Linuxer 能够执行 cp /dir1/file1 /dir2的指令,则 Linuxer 需要对dir1、file1、dir2分别具备哪些权限。
答:执行 cp 命令时,Linuxer 要能够读取指定文件,并且能够写入目标文件,因此:
dir1:至少需要有 x 权限;
file1:至少需要有 r 权限;
dir2:至少需要有 w,x 权限。
【例子5】
问:有一个文件,其绝对路径为/home/student/www/index.html,其中各个相关文件或者目录的权限分别如下所示:
drwxr-xr-x 23 root root 4096 Sep 22 12:09 /
drwxr-xr-x 6 root root 4096 Sep 22 02:09 /home
drwx------ 6 student student 4096 Sep 22 02:10 /home/student
drwxr-xr-x 6 student student 4096 Sep 22 02:10 /home/student/www
drwxr--r-- 6 student student 369 Sep 22 02:11 /home/student/www/index.html
那么,当使用test这个账号(不属于student群组)能够成功读取index.html这个文件呢?
答:目录结构是由根目录一层一层读取的,通过分析以上各个目录和文件的权限得知,对于 vbird账号来说,它可以进入/home,不可以进入 /home/student,因此可以判定,vbird无法成功读取 index.html 文件中的内容。