chmod [选项] 权限 文件名
-R 递归修改目录及其子目录和文件的权限
-v 显示过程
权限
u 文件的所有者
g 文件所属的组
o 其他用户
a all,所有人
- 添加权限
-撤销权限
例子:当前文件权限 rw-r–r-- (644)
需要修改成 rwxr-xr-x (755)
相对法:
chmod u+x,g+x,o+x 文件名
chmod a+x 文件名
绝对法:
chmod u=rwx,g=rx,o=rx 文件名
数值法:
chmod 755 文件名
练习:
在/tmp下创建一个空文件ugo,权限r-x-w—x
chown 修改文件所有者和所属组
chown [选项] 用户名[:组名] 文件名
-R 递归修改目录及其子目录和文件的权限
-v 显示过程
例子:
在/tmp目录下创建目录test
先修改目录的所有者adm
[root@ops14 20200714]# ll /tmp | grep test
drwxr-xr-x. 2 root root 6 Jul 14 16:27 test
[root@ops14 20200714]# chown adm /tmp/test
[root@ops14 20200714]# ll /tmp | grep test
drwxr-xr-x. 2 adm root 6 Jul 14 16:27 test
再修改目录所属的组为lp
[root@ops14 20200714]# chown :lp /tmp/test
[root@ops14 20200714]# ll /tmp | grep test
drwxr-xr-x. 2 adm lp 6 Jul 14 16:27 test
最后修改属主为root,属组为adm
[root@ops14 20200714]# chown root:adm /tmp/test
[root@ops14 20200714]# ll /tmp | grep test
drwxr-xr-x. 2 root adm 6 Jul 14 16:27 test
练习:
1、在/tmp下建目录/tmp/0903
mkdir /tmp/0903
2、在/tmp/0903下创建一个空文件ugo.txt
touch /tmp/0903/ugo.txt
3、查看ugo.txt的ugo权限
ll -d ugo.txt
4、将ugo.txt的权限改为r-x—xr–
chmod 514 ugo.txt
rw-r–r-- 644
r-x—xr-- 514
1、先查看/tmp/0903的详细信息
ll -d /tmp/0903
2、修改/tmp/0903所有者改为lp
chown lp /tmp/0903
3、修改/tmp/0903所属的组为adm
chgrp adm /tmp/0903
4、修改属主root,属组lp
chown root:lp /tmp/0903
chgrp 修改文件所属的组
chgrp [选项] 组名 文件名
-R 递归修改目录及其子目录和文件的权限
-v 显示过程
umask 权限掩码
作用是控制新建文件、目录的初始权限
查看umask
[root@ops14 20200714]# umask
0022
1、root用户的umask默认是0022,普通用户是0002
2、umask值保存在/etc/bashrc或者/etc/profile文件中
权限的定值算法
新建文件的默认权限=满权限-umask
目录的满权限是777,普通文件的满权限是666
例子:
umask=022
新建目录的权限=777-022=755
新建文件的权限=666-022=644
umask=002
新建目录的权限=777-002=775
新建文件的权限=666-002=664
ACL权限
Access Control List,访问控制列表
对传统ugo权限的补充,可以精确控制某个用户对某个文件的访问权限
注意:Linux2.6版本的内核开始,默认是开启ACL权限功能
ACL权限的管理命令
getfacl 查看ACL权限
[zhoukai@ops14 20200714]$ getfacl aaa
file: aaa
owner: zhoukai
group: zhoukai
user::rw-
group::rw-
other::r–
setfacl 设置ACL权限
语法:
setfacl [选项] [{-m|-x} acl条目] 文件或目录
-m 修改ACL规则
-x 删除某条规则
-b 删除索引规则
-d 设置目录默认的ACL规则(只对目录中新建的文件有效)
-R 递归设置
例子:
添加ACL规则,使得zhoukai对文件aaa不可读,不可写不可执行
setfacl -m u:zhoukai:— aaa
添加ACL规则,使得zhoukai组对文件aaa可读可写
setfacl -m g:zhoukai:rw aaa
删除zhoukai组的ACL
setfacl -x g:zhoukai aaa
删除zhoukai用户的ACL
setfacl -x u:zhoukai aaa
S权限
super(超级权限),是系统一种特殊权限
分为suid,sgid,sticky三种,数字代号依次为4,2,1
SUID权限:用于系统命令(suid=4)
功能:让用户以文件属主的身份去执行命令
给一个命令文件添加了SUID权限之后,所有的用户在执行这个命令的时候,都会以命令的属主的身份去执行,权限对应的x位会变成s
例子:用户zhoukai没有权限查看/etc/shadow,使用suid之后可以查看
查找cat命令的路径
#which cat
#chmod -v u+s /usr/bin/cat
#su – zhoukai
$cat /etc/shadow
$exit
#chmod -v u-s /usr/bin/cat
总结:
chmod u+s 命令文件 添加suid权限
chmod u-s 命令文件 撤销suid权限
SGID权限:目录所属组继承权限(组的强制位)sgid=2
当一个目录添加了sgid权限
那么,所有用户在这个目录下创建的文件所属组都会继承这个目录所属的组
(主要用于文件共享),如果设置SGID权限,在所属组权限的x位会变成s
添加sgid权限
chmod g+s 目录名
撤销sgid权限
chmod g-s 目录名
例子:
用root用户在当前目录创建test目录
将test目录所属组设置为adm
将目录的other权限设置为rwx
给目录添加sgid权限
切换到zhoukai用户,在test目录创建a,bc
并查看文件的权限
sticky t权限 sticky=1
功能:
当给一个目录添加t权限之后,只能删除属于自己的文件,不可以修改和删除其他人的文件
给目录设置t权限之后,other权限的x位会变成t
系统中的/tmp目录默认有t权限
ls -ld /tmp
添加t权限 chmod o+t 目录名
撤销t权限 chmod o-t 目录名
例子:
用root用户清空/tmp目录
rm -rf /tmp/*
查看/tmp目录的权限
ls -ld /tmp #发现/tmp目录有t权限
创建用户s1和s2
[root@ops14 tmp]# useradd s1
[root@ops14 tmp]# useradd s2
切换到s1,在/tmp下创建a,b
#su s1
$touch a b
退出s1
$exit
切换掉s2,尝试删除a和b
#su s2
$rm -fv a b
隐藏权限
防止root误删除或者修改文件及目录
隐藏权限用ls看不到
查看隐藏权限
lsattr
例子:
lsattr /etc/hosts #这个文件没有隐藏权限
常见的隐藏权限有2个
i权限
只可以查看,但不能删除或修改
a权限
可以查看,可以追加,但不能做其他操作
(通常用于系统的日志文件)
修改隐藏权限
chattr +i 文件名 添加i权限
chattr -i文件名 取消i权限
chattr +a文件名 添加a权限
chattr -a文件名 取消a权限
例子:
[root@ops14 20200714]# cp -v /etc/hosts ./
‘/etc/hosts’ -> ‘./hosts’
[root@ops14 20200714]# chattr +i hosts
[root@ops14 20200714]# lsattr hosts
----i----------- hosts
[root@ops14 20200714]# echo hello >> hosts ##权限不够
-bash: hosts: Permission denied
[root@ops14 20200714]# rm -fv hosts ##不允许的操作
rm: cannot remove ‘hosts’: Operation not permitted
[root@ops14 20200714]# chattr -i hosts ##撤销i权限
[root@ops14 20200714]# chattr +a hosts ##添加a权限
[root@ops14 20200714]# lsattr hosts
-----a---------- hosts
[root@ops14 20200714]# echo hello >> hosts ##可以追加
[root@ops14 20200714]# rm -fv hosts ##不允许的操作
rm: cannot remove ‘hosts’: Operation not permitted
[root@ops14 20200714]# echo hello.txt > hosts ##不允许的操作
-bash: hosts: Operation not permitted
[root@ops14 20200714]# chattr -a hosts ##撤销a权限
[root@ops14 20200714]# rm -fv hosts ##成功删除
removed ‘hosts’
总结:
隐藏权限的功能是防止root用户操作失误导致重要的文件被删除
隐藏权限对所有用户生效(包括root用户)