1、概念
我们首先了解一下用户的权限的概念
权限有三类对象,分别是
属主 u、属组 g、其他 o
但是还有特殊的对像,如:所有人:a(u+g+o)
权限有三种类型,分别是
读:r=4、写:w=2、执行:x=1
但是还有特殊权限,如rws、rwS和rwt、rwT和其他特殊权限
2、基本权限设定
2.1 设定或者更改权限
我们在设置权限的时候普遍使用符号或者数字
2.1.1 使用符号
使用符号设置权限语法如下:
chmod 对象(u/g/o/a)赋值符(+/-/=)权限类型(r/w/x) 文件目录
以下是一些设置权限的例子
[root@test ~]# touch /1.txt
[root@test ~]# cd /
[root@test /]# ll 1.txt
-rw-r--r--. 1 root root 0 3月 13 01:13 1.t
#给用户授权1.txt文件执行的权限
[root@test /]# chmod u+x /1.txt
[root@test /]# ll 1.txt
-rwxr--r--. 1 root root 0 3月 13 01:13 1.txt
#给其他授予对文件1.txt读写执行的权限
[root@test /]# ll 1.txt
-rwxr--rwx. 1 root root 0 3月 13 01:13 1.txt
#给其他取消对文件1.txt读写执行的权限
[root@test /]# chmod o-rwx /1.txt
[root@test /]# ll 1.txt
-rwxr-----. 1 root root 0 3月 13 01:13 1.txt
#给其他授予对文件1.txt读和执行的权限,由于没有w权限,x权限是增加不上的
[root@test /]# ll 1.txt
-r--r--r--. 1 root root 0 3月 13 01:13 1.txt
#以下就不一一展示了
#递归给文件夹下所有文件授予读写执行的权限
[root@test /]# chmod -R o+rwx /1
#取消1.txt所有权限
[root@test /]# chmod a=--- /1.txt
#授予属主属组读写的权限
[root@test /]# chmod ug=rw /file.txt
#等于 chmod a+x 授权所有人执行的权限
[root@test /]# chmod +x
2.1.2 使用数字
使用数字设置权限语法如下:
chmod 权限数字 文件目录
以下是一些设置权限的例子
#设置所有权限
[root@test /]#chmod 777 /1.txt
#取消所有权限
[root@test /]#chmod 000 /1.txt
chmod -R 文件 给文件里所有的文件授权
4=r 5=rx 6=rw 7=rwx
2.2 更改属主/属组
2.2.1 chown
设置一个文件属于谁,属主。以下是一些例子
#修改文件的属主和属组
[root@test /]#chown mysql:mysql file1.txt
#修改属组
[root@test /]#chown .mysql file1.txt
#修改属主
[root@test /]#chown mysql file1.txt
- R 递归操作文件和目录
2.2.2 chogrp
只修改文件的属组,例子如下
#修改属组
[root@test /]#chogrp zixiang.liang /file1.txt
3、基本权限ACL access control list 访问控制列表
往往在工作中我们会遇到一个文件多个属主属组都可以操作吗?这个时候我们就会用到使用访问控制列表
3.1 概念
限制用户对文件的访问,ACL是对UGO的补充。它和UGO的区别是
ACL文件权限管理可以设置不同的用户,不同的基本权限(r,w,x)。对象数量不同
UGO设置基本权限只能一个用户,一个组,其他人
3.2 语法
3.2.1 增加 setfacl -m
#给属主jacK添加对test.txt文件的读写执行
[root@test /]# setfacl -m u:jack:rwx /test.txt
#给属组hr添加对test.txt文件的读写执行
[root@test /]# setfacl -m g:hr:rwx /file1.txt
#修改其他人的权限 修改other对文件的权限 类似 chomd o=rw /file.txt
[root@test /]# setfacl -m o::rw /file.txt
3.2.2 删除 setfacl -x
#删除alic用户对test.txt权限
[root@test /]# setfacl -x u:alic /tmp/test.txt
#删除属组hr对test.txt权限
[root@test /]# setfacl -x g:hr /tmp/test.txt
3.2.3移除到所有的扩展权限 setfacl -b
#移除所有的扩展权限
[root@test /]# setfacl -b /tmp/test.txt
3.2.4 查询权限 getfacl
#查询文件的特殊权限
[root@test /]# getfacl /tmp/text.txt
4、特殊权限
我们带着问题来学习特殊权限,
我们用ll命令查看一个文件的时候,rwsrwxrwx 那么s 代表着什么?
如果有一个文件很重要,被超管删除了怎么办?
文件初始化权限为什么是644 ? 文件夹为什么是755?
4.1 特殊位 rws rwS权限(setuid)
以下就是我们第一个问题的答案
setuid:该位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。
s:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行,具备临时的提升的权限。在设置s权限时文件属主、属组必须先设置相应的x权限,否则s权限并不能正真生效
如Linux cat和passwd就是设置了SUID的程序
# 禁止使用
[root@test /]# chmod u-s /usr/bin/cat
#可以使用
[root@test /]# chmod u+s /usr/bin/cat
rws 和rwS的区别是:大写的S是代表这个文件没有X执行的权限,s的权限并不能正真生效
4.2 粘滞位 rwt rwT(t)
设置粘着位,一个文件可读写的用户并一定想让他有删除此文件的权限,如果文件设置了t权限则只能用属主和root有删除文件的权限,通过chmod +t filename 来设置t权限。
同样的,当没有x权限的时候,为大写T
设置粘滞位的文件,只能由以下账户删除
超级管理员
该目录的所有者
该文件的所有者
粘滞位的设置方法如下
[root@test /]# chmod u+t /1.txt
4.3 特殊权限 chattr
文件属性chattr
用途:操作符'+'用来在文件已有属性的基础上增加选定的属性; '-'用来去掉文件上的选定的属性;而'='用来指定该文件的唯一属性
字符'ASacdisu'用作文件新属性的选项,用法如下 chattr + i /1.txt
这里刚好解决我们第二个问题
[root@test /]# chattr + i /1.txt
#lsattr 1.txt' 列出文件的属性,展示特别位
[root@test /]# lsattr /1.txt
字符'ASacdisu'代表意义如下
A 这个属性不允许更新文件的访问时间
a 文件只能追加内容
c 文件在磁盘上自动更新
d 不能使用dump命令备份文件
D 更改会同步保存在磁盘上
e 该文件使用磁盘上块的映射扩展
i 文件不能进行修改:你既不能删除它, 也不能给它重新命名,你不能对该文件创建链接, 而且也不能对该文件写入任何数据.
s 保密性删除文件或目录。
S 即时更新文件或目录。
u 预防意外删除
4.4 进程掩码 umask
新建文件、目录的默认权限会受到umask的影响,umask表示要减到的权限,我们观察系统umask
[root@test /]# umask
0022
创建文件夹权限 0777-0022 =755
创建文件权限 0777-0111=644
临时修改umask如下,但是不建议操作
[root@test /]# umask 0000
小知识
watch -n1 'ls -l test.txt' 每隔1s打印test.txt的详细信息
watch -n1 'lsattr test.txt' 列出文件的属性,展示特别位