- 1. 设置权限方式一: u(属主)g(属组)o(其他用户)
- 2. 设置权限方式二、number
- 3. 特殊权限
- 1.建立测试目录
- 2.给测试目录赋予SetGID权限,检查SetGID是否生效 chmod 2755 = 2 表示SGID
- 3.给测试目录赋予777权限,让普通用户可以写
- 4.切换成普通用户lamp,并进入该目录
- 5.普通用户创建测试文件,检查文件的信息
- 选项: + 增加权限
- a:让文件或目录仅可追加内容 a属性一般作用于日志类文件,特别是 sudo 记录下来的日志
- i:不得任意更动文件或目录,给默写特定的目录是可以实现不同的功能
- 1.配置一个文件,让其只能追加内容,不允许手动修改,也不允许删除 ( sudo —>日志—>设置为只能追加,不能修改,不能删除 )
- 3.不能删除
- 2.假设umask值为:045(其他用户组位为奇数)
#计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组位再加1。
6 6 6 - 0 4 5 = 6 2 1 + 1 = 622
7 7 7 - 0 4 5 = 7 3 2
1.什么是权限?
权限就是约束用户对系统的操作
2.为什么要使用权限?
保证每个用户的登录隐私和环境
验证权限rwx对文件和对目录的含义?
r读 4
w写 2
x执行 1
-无 0
==如何变更一个文件至其他用户? ==
chown
权限与用户之间的关系?
当一个用户访问文件流程如下:
1) 判断用户是否为文件所有者,如果是则按所有者的权限进行访问
2) 判断用户是否为文件所有组成员,如果是则按组的权限进行访问
3) 如果不是所有者,也不是该文件所属组,则按匿名权限进行访问
1. 设置权限方式一: u(属主)g(属组)o(其他用户)
root@web ~]# touch file #创建文件
[root@web ~]# chmod a=rwx file #给所有人添加读写执行权限
[root@web ~]# chmod a=-rwx file #取消所有的权限
[root@web ~]# chmod u=rwx,g=rw,o=- file #属主读写执行,属组读写,其他人无权限
[root@web ~]# chmod ug=rwx,o=r file #属主属组读写执行,其他人读权限
[root@web ~]# ll file
-rwxrw-r-- 1 root root 0 Apr 13 03:29 file
2. 设置权限方式二、number
数字代表的权限是什么 ?
3个身份 user=7(r+w+x) group=4(r) other=1(x)
chmod命令用来变更文件或目录的权限。
#选项: -R递归修改
[root@web ~]# touch file
[root@web ~]# chmod 644 file user(rw-) group(r--) other(r--)
[root@web ~]# chmod 600 file user(rw-) group(---) other(---)
[root@web ~]# ll file
-rw------- 1 root root 0 Apr 13 03:29 file
#针对目录设定权限 (-R 递归处理)
[root@web ~]# mkdir dir
[root@web ~]# chmod 777 dir/ #修改目录允许所有人访问
[root@web ~]# chmod -R 755 dir/ #修改目录及子目录权限
[root@web ~]# ll -d dir/
drwxr-xr-x 2 root root 6 Apr 13 03:34 dir/
chown命令改变某个文件或目录的所有者和所属的组,
该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。
#选项: -R 递归
chgrp命令用来改变文件或目录所属的用户组
#选项: -R 递归
**1.变更文件的属主和数组
[root@oldboy ~]# chown oldxu.oldxu access-2020-03-12.log
[root@oldboy ~]# ll access-2020-03-12.log
-rw-r--r--. 1 oldxu oldxu 58112885 3月 13 09:25 access-2020-03-12.log**
2.仅变更文件的属组
[root@oldboy ~]# chown .root access-2020-03-12.log
[root@oldboy ~]# ll access-2020-03-12.log
-rw-r--r--. 1 oldxu root 58112885 3月 13 09:25 access-2020-03-12.log
3.使用chgrp直接变更文件的属组(只能是属组,不能是其他)
[root@oldboy ~]# chgrp oldxu access-2020-03-12.log
[root@oldboy ~]# ll access-2020-03-12.log
-rw-r--r--. 1 oldxu oldxu 58112885 3月 13 09:25 access-2020-03-12.log
权限中的rwx对文件的影响:
读取权限(r)具有读取\阅读文件内容权限 1.只能使用查看类命令cat、head、tail、less、more
写入权限(w)具有新增、修改文件内容的权限 1.使用vim编辑会提示权限拒绝, 但可强制保存,会覆盖文件的所有内容 2.使用echo命令重定向的方式可以往文件内写入数据, >>可以进行追加 3.不能删除文件,因为删除文件看的不是文件的属性, 需要看上级目录是否有w的权限
执行权限(x)具有执行文件的权限 1.执行权限什么用都没有 2.如果普通用户需要执行文件,需要配合r权限 rx (命令) rw(配
置文件) r(单纯的普通只看不改不执行) rx (进入文件,查看文件) 删除文件相关看上级目录即使rwx也不能直接删除,移动文件
总结rwx对目录的影响
权 限 | 文件 | 目录 |
---|---|---|
r | read读取文件内容 | read,是否能查看目录的内容,需要x配 合 |
w | write编辑文件内容需要r配合 | write, 能否在目录中,创建,删除,修改,移动、改名,需要x配合 |
x | execute执行 (脚 本,命令),需要r配合 | execute,是否能进入目录,(是否能查 看目录下文件(目录)属性信息) |
目录rx权限, 允许浏览目录内文件以及子目录, 不允许在该目录下创建文件、删除文件
目录rw权限, 能查看目录,能往目录写入文件,但无法进入目录——->(使用的情况太少)
PS: 文件的 x 权限小心给予,目录的 w 权限小心给予。
PS: 文件通常设定的权限是644,目录设定的权限是755。
3. 特殊权限
1.由于passwd命令拥有suid特殊权限(在命令属主权限位有一个s),
2.那么在整个命令执行的过程中,会以命令的属主身份去运行该命令。
/etc/shadow 这个文本本身是谁都无法修改的,但是root除外。
此时oldxu执行passwd 通过 特殊权限 借助的是root身份运行该命令
所以最终是由root去更新了/etc/shadow 文件,完成的密码修改。
suid使用
需求:默认情况下,所有的普通用户,都无法查看/etc/shadow,
有没有办法能够让所有的普通用户都能查看/etc/shadow???
方式1: chmod 004 /etc/shadow
方式2: 为cat命令赋予一个 suid权限即可
设定suid:u+s 或 4755 (4表示的特殊权限中的suid)
[root@oldboy ~]# chmod u+s /usr/bin/cat
[root@oldboy ~]# chmod 4755 /usr/bin/cat
结论:
当为cat命令赋予了特殊权限后,此时所有的普通用户通过cat去查看文件时,其实都是通过cat的属主身份查看的该文件
sgid的使用
文件:
oldxu用户—>执行—>passwd命令时。
1.由于passwd命令拥有SGID特殊权限 (在命令属组权限位有一个s),
2.那么在整个命令执行的过程中,会以命令的 “属组” 身份去运行该命令。 <— root组
oldxu —> passwd —-> 该命令属组身份 root 在运行 —-> 依托root组 身份 —> 变更 /etc/shadow 密码信息
表现形式: 在文件的 属组权限上有显示一个s(执行权限) S(没有执行权限)
suid 借助 ” 属主 “ 身份运行该命令程序
sgid 借助 “ 属组 ” 身份运行该命令程序
oldxu-->file oldxu oldxu
root -->file_root root root
PS:( 属组,和替他人都提前 给与了权限,可以修改文件。)
sgid作用
使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单
目录:将目录设置为sgid后,
如果在该目录下创建文件,都将与该目录的所属组保持一致,演示如下
1.建立测试目录
[root@bgx ~]# cd /tmp/ && mkdir dtest
2.给测试目录赋予SetGID权限,检查SetGID是否生效 chmod 2755 = 2 表示SGID
[root@bgx tmp]# chmod g+s dtest/ && ll -d dtest/
drwxr-sr-x 2 root root 6 Apr 13 05:21 dtest/
3.给测试目录赋予777权限,让普通用户可以写
[root@bgx tmp]# chmod 777 dtest/
4.切换成普通用户lamp,并进入该目录
[root@bgx tmp]# su - lamp
[lamp@bgx ~]$ cd /tmp/dtest/
5.普通用户创建测试文件,检查文件的信息
[lamp@bgx dtest]$ touch lamp_test
[lamp@bgx dtest]$ ll
-rw-rw-r-- 1 lamp root 0 Apr 13 05:21 lamp_tes
特殊权限SBIT:
针对的是目录:
目录一旦被赋予了粘滞位,
除了 root 可以删除所有文件,普通用户对该目录就算拥有 w 权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件。
[root@oldboy dtest]# ll -d /tmp/
drwxrwxrwt. 9 root root 202 3月 17 10:52 /tmp/ #o 有执行权限x是系显示为t 没有时显示为T
后面学习MySQL的时,当我们要初始化MySQL时,他会创建一些临时文件 /tmp目录下,当初始化完毕后,自己会清理掉里面的数据,别人无法清理。(如果这个目录不是粘滞位,那么初始化MySQL就会报错。)
chmod o+t /tmp chmod 1777 /tmp
特殊的属性:权限有关
比如说:
1.我希望创建一个文件,不允许被删除。包括root都不行。
2.我希望这个文件只能往里面追加数据。
chatrr 只有 root 用户可以使用,用来修改文件系统的权限属性,建立凌驾于 rwx 基础权限之上的授权。
chattr [+-=] [选项] 文件或目录名
选项: + 增加权限
1.配置一个文件,让其只能追加内容,不允许手动修改,也不允许删除 ( sudo —>日志—>设置为只能追加,不能修改,不能删除 )
[root@oldboy tmp]# touch /mnt/file_a
[root@oldboy tmp]# chattr +a /mnt/file_a
2.可以追加
3.不能删除
[root@oldboy tmp]# rm -f /mnt/file_a
rm: 无法删除”/mnt/file_a”: 不允许的操作
[root@oldboy tmp]# chattr -a /mnt/file_a
默认权限UMASK:
1.为什么系统中默认创建的文件权限是 644 目录是 755
2.为什么默认创建一个普通用户,他的家目录权限是 700
原因:
默认系统规定的权限, 目录 777 文件 666 那么为什么创建出来的文件和目录都不是777 也不是 666呢?
由于UMASK控制了, 比如UMASK 设置为 0022
那么最终创建出来的文件和目录分别就是
目录: 755
文件: 644
————————UMASK表示要减掉的权限———————————————-
目录: 777 - 022 = 755 最终创建出来的目录权限
文件: 666 - 022 = 644 最终创建出来的文件权限
默认情况下 root用户创建的文件权限,和普通用户创建的文件权限是不一样的?为什么?
那么他们的UMASK又是在哪个文件中控制的呢?
当一个用户登陆系统时,会去加载一些环境变量,来初始化我们的工作目录。
/etc/profile <--umask就在这里面给控制了
#通过查看/etc/profile发现了如下公式:
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
root: 0 既然你的UID没有大于199,那么就将你的 UMASK 初始化为 022
oldxu: 1000 UID大于199,并且,组名称和用户名称一致,所以条件成立,那么就讲你的UMASK初始化为 002
文件和目录的默认权限都是授UMASK控制,而UMASK是用户在登陆系统时,通过 /etc/profile 中的一个公式来进行的分别设定。
这里的UMASK可以改,但是我们基本不动他。(这是系统默认的机制,了解就可以,不要动!!!!!!!!!!!)
UMASK扩展:如何去临时修改UMASK,来验证我们的权限的说法:
2.假设umask值为:045(其他用户组位为奇数)
#计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组位再加1。
6 6 6 - 0 4 5 = 6 2 1 + 1 = 622
7 7 7 - 0 4 5 = 7 3 2
总结
1.特殊权限SUID4000、SGID2000、SBIT1000
2.特殊的属性 chattr + -( 免死金牌 )
只能追加 a sudo审计日志
不能动 i /etc/passwd
3.UMASK默认权限
特殊权限SUID
[root@oldboy ~]# ps aux | grep passwd
过滤一下passwd这个命令是由哪个身份运行起来的 (该进程运行的身份是该命令的属主,而不是oldxu
oldxu用户—>执行—>passwd命令时