一、文件基本权限
1、基本权限的修改
-rw-r--r--
-- '-' 文件类型('-' 文件 'd' 目录 'l' 软链接文件)
-- rw- r-- r--
u所有都 g所属组 o其他人
-- 'r' 读 'w' 写 'x' 执行
chmod 命令
[root@localhost ~]# chmod [选项] 模式 文件名
选项:
-- -R:递归
模式:
-- [ugoa] [+-=] [rwx]
-- [mode=421]
修改权限的方式
[root@localhost ~]# chmod u+x cangls.av
#给文件所有者加执行权限
[root@localhost ~]# chmod g+w,o+w furong.av
#给所有组及其他加写入权限
[root@localhost ~]# chmod a=rwx fengjie.av
#给所有人加读、写、执行权限
权限的数字表示
-- r --- 4
-- w --- 2
-- x --- 1
rwxr-xr-x
7 5 5
2、权限的作用
1)权限对文件的作用
r:读取文件内容(cat more head tail)
w:编辑、新增、修改文件内容(vi echo)
-- 但是不包含删除文件
x:可执行
2)权限对目录的作用
r:可以查询目录下文件名(ls)
w:具有修改目录结构的权限。如新建文件和目录,删除此目录下文件和目录,重命名此目录下文件和目录,剪切(touch rm mv cp)
x:可以进入目录(cd)
3、其他权限命令
1)修改文件的所有者
[root@localhost ~]# chown 用户名 文件名
例:
[root@localhost ~]# chown ds fengj.av
2)修改文件的所属组
[root@localhost ~]# chgrp 组名 文件名
例如:
[root@localhost ~]# chgrp group1 fengj.av
3)让用户对文件及目录拥有一定的权限
要求:
— 拥有一个test目录
— 让某用户拥有所有的权限
— 让另一用户有查看权限
— 其他所有人不许查看这个目录
二、文件默认权限
1、查看默认权限的命令
umask
#查看默认权限
0022
-- 第一位0:文件特殊权限
-- 022:文件默认权限
2、文件的默认权限
#文件默认不能建立为执行文件,必须手工赋予执行权限
#所有文件默认权限最大为666
#默认权限需要换算成字母再相减
#建立文件之后的默认权限,为666减去umask值
例如:
-- 文件默认最大权限666 umask值022
-- -rw-rw-rw- 减去 -----w--w- 等于 -rw-r--r--
例如
-- 文件默认最大权限666 umask值033
-- -rw-rw-rw- 减去 -----wx-wx 等于 -rw-r--r--
3、目录的默认权限
# 目录默认权限最大为777
# 默认权限需要换算成字母再相减
# 建立文件之后的默认权限,为777减去umask值
例如:
-- 目录默认最大权限为777 umask值022
-- -rwxrwxrwx 减去 -----w--w- 等于 -rwxr-xr-x
4、修改umask值
# 临时修改
[root@localhost ~]# umask 0002
# 永久修改
[root@localhost ~]# vi /etc/profile
三、ACL权限
1、ACL权限简介与开启
1)ACL权限简介
2)查看分区ACL权限是否开启
[root@localhost ~]# dumpe2fs -h /dev/sda5
Default mount options: user_xattr acl
#dumpe2fs命令是查询指定分区详细文件系统信息的命令
选项:
-- -h:仅显示超级块中信息,而不显示磁盘块组的详细信息
3)临时开启分区ACL权限
[root@localhost ~]# mount -o remount,acl /
#重新挂载根分区,并挂载加入acl权限
4)永久开启分区ACL权限
[root@localhost ~]# vi /etc/fstab
UUID=22029318-ae20-4bbd-b520-ce5d6fd8d4d5 / ext4 defaults 1 1
# 加入acl
UUID=22029318-ae20-4bbd-b520-ce5d6fd8d4d5 / ext4 defaults,acl 1 1
[root@localhost ~]# mount -o remount /
# 重新挂载文件系统或重启动系统,使修改生效
2、查看与设定ACL权限
1)查看ACL命令
[root@localhost ~]# getfacl 文件名
# 查看acl权限
2)设定ACL权限的命令
[root@localhost ~]# setfacl 选项 文件名
选项:
-- -m:设定ACL权限
-- -x:删除指定的ACL权限
-- -b:删除所有的ACL权限
-- -d:设定默认ACL权限
-- -k:删除默认ACL权限
-- -R:递归设定ACL权限
3)给用户设定ACL权限
例
[root@localhost ~]# useradd tony
[root@localhost ~]# groupadd stu
[root@localhost ~]# mkdir /av
[root@localhost ~]# chown tony:stu /av
[root@localhost ~]# chmod 770 /av
[root@localhost ~]# useradd lw
[root@localhost ~]# setfacl -m u:lw:rx /av
# 给用户lw赋予r-x权限,使用"u:用户名:权限"格式
4)给用户组设定ACL权限
[root@localhost ~]# groupadd tgroup2
[root@localhost ~]# setfacl -m g:tgroup2:rwx /av
# 为组tgroup2分配ACL权限。使用"g:组名:权限"格式
3、最大有效权限与删除ACL权限
1)最大有效权限mask
# mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限”相与“才能得到用户的真正权限
修改最大有效权限
[root@localhost ~]# setfacl -m m:rx 文件名
# 设定mask权限为r-x。使用“m:权限”格式
2)删除ACL权限
[root@localhost ~]# setfacl -x u:用户名 文件名
# 删除指定用户的ACL权限
[root@localhost ~]# setfacl -x g:组名 文件名
# 删除指定用户组的ACL权限
[root@localhost ~]# setfacl -b 文件名
# 会删除文件的所有的ACL权限
4、默认ACL权限和递归ACL权限
1)递归ACL权限
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。
# setfacl -m u:用户名:权限 -R 目录名
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。
# setfacl -m d:u:用户名:权限 目录名
四、sudo权限
1、sudo权限
# root把本来只能超级用户执行的命令赋予普通用户执行。
# sudo的操作对象是系统命令
2、sudo使用
[root@localhost ~]# visudo
# 实际修改的是/etc/sudoers文件
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
# %wheel ALL=(ALL) ALL
# %组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
五、文件特殊权限
1、SetUID
1)SetUID的功能
只有可以执行的二进制程序才能设定SUID权限
命令执行要对该程序拥有x(执行)权限
命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
2)设定SetUID的方法
4代表SUID
-- chmod 4755 文件名
-- chmod u+s 文件名
passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 2月 22 2012 /usr/bin/passwd
cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
[root@localhost ~]# ll /bin/cat
-rwxr-xr-x. 1 root root 45224 11月 22 2013 /bin/cat
3)取消SetUID的方法
chmod 0755 文件名
或
chmod u-s 文件名
4)危险的SetUID
# 关键目录应严格控制写权限。比如”/”、”/usr”等
# 用户的密码设置要严格遵守密码三原则
# 对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限
新建suid权限文件列表suid.log
[root@localhost ~]# find / -perm -4000 -o -perm -2000 > suid.log
suid_check.sh
#!/bin/bash
find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
#搜索系统中所有拥有SUID和SGID的文件,并保存在临时目录中
for i in $(cat /tmp/setuid.check)
#做循环,每次循环取出临时文件中的文件名
do
grep $i /root/suid.log > /dev/null
#对比这个文件名是否在模板文件中
if [ "$?" != "0" ]
#检测上一个命令的返回值,如果不为0,证明上一个命令报错
then
echo `date +"%Y-%m-%d %H:%M:%S"` "$i isn't in listfile!" >> /root/suid_log_$(date +%F)
#如果文件名不再模板文件中,则输出错误信息,并把报错记录到日志中
fi
done
rm -rf /tmp/setuid.check
#删除临时文件
2、SetGID
1)SetGID针对文件的作用
# 只有可执行的二进制程序才能设置SGID权限
# 命令执行者要对该程序拥有(执行)权限
# 命令执行在执行程序的时候,组身份升级为该程序文件属组
# SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
2)SetGID针对目录的作用
# 普通用户必须对此目录拥有r和x权限,才能进入此目录
# 普通用户在些目录中的有效组会变成此目录的属组
# 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
3、Sticky BIT
1)SBIT粘着位作用
# 粘着位目前只对目录有效
# 普通用户对该目录拥有w和x权限,即普通用户可以在些目录拥有写入权限
# 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不删除其他用户建立的文件
2)设置与取消粘着位
设置粘着位
— chmod 1755 目录名
— chmod o+t 目录名
取消粘着位
— chmod 0777 目录名
— chmod o-t 目录名
六、不可改变位权限