这几天是国庆我久违的睡了一个大觉
目录
一、 root与普通用户的区分
二、Linux的权限管理
2.1 三种基本权限
2.2 权限的两种表示法:符号和数字
三、权限的修改与验证
四、三个关于权限的问题
4.1 进入一个目录需要哪些权限
4.2 读文件需要什么权限
4.3 写入或删除文件需要哪些权限
一、 root与普通用户的区分
书接上回,一般来说,普通用户是无法直接使用sudo命令的,因为如果所有普通用户都能提权,那么显然安全性是不够的,但是为什么在我的演示中却可以直接sudo呢?这是因为:当前用户加入了 sudo 用户组(在 sudoers 授权名单里)
验证当前用户是否在sudo用户组的方法是:直接输入groups命令
ubuntu@VM-0-4-ubuntu:~$ groups ubuntu adm dialout cdrom floppy sudo audio dip video plugdev lxd netdev #如果在用户组会显示这条 ubuntu@VM-0-4-ubuntu:~$如果说不在安全组则会显示:
root@VM-0-4-ubuntu:/home/ubuntu# su testuser $ groups testuser $ sudo ls /root [sudo] password for testuser: testuser is not in the sudoers file. This incident will be reported. $二、Linux的权限管理
2.1 三种基本权限
Linux 文件 / 目录权限分为三类角色:
- 所有者 (user,u):文件属于谁
- 所属组 (group,g):同组用户
- 其他用户 (other,o):剩下所有人
每组 3 种权限:r w x
| 字符 | 名称 | 对文件含义 | 对目录含义 |
|---|---|---|---|
| r | 读 | 可以查看文件内容 | 可以列出目录里面的文件(ls) |
| w | 写 | 修改、覆盖文件内容 | 在目录里新建 / 删除 / 重命名文件 |
| x | 执行 | 可以运行这个程序脚本 | 可以进入这个目录(cd) |
⚠️ 超级易错点: 目录没有 x 权限,就算有 r,也 ls 看不到详情,cd 进不去目录有 w 权限,可以删里面的文件,和文件本身权限无关!
目录有 w 权限,可以删里面的文件,和文件本身权限无关!
通过ls -l可以查看文件的身份
ubuntu@VM-0-4-ubuntu:~$ ls -l temp.txt -rw-rw-r-- 1 ubuntu ubuntu 20901 Sep 28 13:40 temp.txt #所有者:ubuntu 所属组ubuntu 文件大小20901 #-rw-rw-r--:权限 除第一位后九位每三位为一组,对应所有者,所属组,其他用户 rw-表示只有读写没执行,r--表示只有读 #-表示普通文件但是具有可执行权限不代表可执行,可执行还需要包括文件本身是一个二进制可执行文件
但是为什么要有所属组呢?
原因:
所属组(group)就是用来批量管理权限的,不用给每一个用户单独设置权限。
假设场景:实验室有 4 个同学,都要操作同一套代码文件
- 用户 A、B、C、D,都需要读写这个项目文件夹 如果没有组:你要对文件给 4 个人,一个个单独授权,人一多管理爆炸。 有用户组:
- 创建一个组
code_group- 把 A、B、C、D 全部加入这个组
- 文件设置:组权限 rw-只要这一条,组里所有人都拥有读写权限。 后续加人,只需要把用户加到组里;删人,直接移出组,不用改文件权限。
2.2 权限的两种表示法:符号和数字
符号表示法:适合单独增删某一项权限,不用计算。
格式:对象 + 操作符 + 权限
- 对象:
ugoa(all,全部 u+g+o) - 操作符
+:增加权限-:移除权限=:直接设置权限(覆盖原有)
chmod u+x test.txt # u(所有者) + 加上 x执行权限 chmod g-w test.txt # g(所属组) - 去掉 w写权限 chmod o=r test.txt # o(其他人) = 设置为只读,覆盖旧权限 chmod a+r test.txt # a所有人,增加读权限 chmod u=rw,g=r,o=--- test.txt # 一次性设置u g o权限chomd 作用:修改文件 / 目录的访问权限
数字表示法:
这里用到的是八进制,因为1+2+4=7,是八进制的最小数,可以刚好完全表示所有组合
规则:r=4,w=2,x=1,- = 0每组权限相加得到一个数字
每一组(u/g/o)单独求和,组合成 3 位数字:u g o
常用组合
rw-= 4+2+0 =6r-x= 4+0+1 =5rwx= 4+2+1 =7r--= 4+0+0 =4---= 0
ubuntu@VM-0-4-ubuntu:~$ chmod 600 temp.txt ubuntu@VM-0-4-ubuntu:~$ ls -l temp.txt -rw------- 1 ubuntu ubuntu 20901 Sep 28 13:40 temp.txt #权限被改成只允许拥有者读写了身份匹配:当用户访问一个文件 / 目录时,系统按顺序匹配身份,匹配到就停止判断,不会继续往下看优先级顺序:1. 是否是文件所有者 (u) → 2. 是否属于文件所属组 (g) → 3. 其他用户 (o)
三、权限的修改与验证
上文我们学习了权限的身份与表示法,接下来学习三个指令,chmod , chown , chgrp 进行权限的修改
示例:chomd 修改单个文件权限
ubuntu@VM-0-4-ubuntu:~/text_dir$ ls -l total 12 -rw-rw-r-- 1 ubuntu ubuntu 5 Sep 28 23:22 a.txt -rw-rw-r-- 1 ubuntu ubuntu 5 Sep 28 23:23 b.txt -rw-rw-r-- 1 ubuntu ubuntu 5 Sep 28 23:23 c.txt ubuntu@VM-0-4-ubuntu:~/text_dir$ chmod u+x a.txt #给user加上权限 ubuntu@VM-0-4-ubuntu:~/text_dir$ ls -l total 12 -rwxrw-r-- 1 ubuntu ubuntu 5 Sep 28 23:22 a.txt -rw-rw-r-- 1 ubuntu ubuntu 5 Sep 28 23:23 b.txt -rw-rw-r-- 1 ubuntu ubuntu 5 Sep 28 23:23 c.txt ubuntu@VM-0-4-ubuntu:~/text_dir$ chmod u-r a.txt #给user去掉r权限 ubuntu@VM-0-4-ubuntu:~/text_dir$ chmod o-r a.txt #给other加上read权限 ubuntu@VM-0-4-ubuntu:~/text_dir$ ls -l total 12 --wxrw---- 1 ubuntu ubuntu 5 Sep 28 23:22 a.txt #现在user和other都没r权限了 -rw-rw-r-- 1 ubuntu ubuntu 5 Sep 28 23:23 b.txt -rw-rw-r-- 1 ubuntu ubuntu 5 Sep 28 23:23 c.txt ubuntu@VM-0-4-ubuntu:~/text_dir$ chmod a-r a.txt #a代表all,给所有去掉r权限 ubuntu@VM-0-4-ubuntu:~/text_dir$ ls -l total 12 --wx-w---- 1 ubuntu ubuntu 5 Sep 28 23:22 a.txt -rw-rw-r-- 1 ubuntu ubuntu 5 Sep 28 23:23 b.txt -rw-rw-r-- 1 ubuntu ubuntu 5 Sep 28 23:23 c.txt ubuntu@VM-0-4-ubuntu:~/text_dir$ chmod a+r a.txt #给所有加上r权限 ubuntu@VM-0-4-ubuntu:~/text_dir$ ls -l a.txt -rwxrw-r-- 1 ubuntu ubuntu 5 Sep 28 23:22 a.txtchown与chgrp
chown 修改文件/目录的所有者
示例:这里的用户sha是我临时创建的,命令是:useradd sha
ubuntu@VM-0-4-ubuntu:~/text_dir$ chown sha a.txt chown: changing ownership of 'a.txt': Operation not permitted #普通用户不能直接改,需sudo或root ubuntu@VM-0-4-ubuntu:~/text_dir$ sudo chown sha a.txt #更改用户名 ubuntu@VM-0-4-ubuntu:~/text_dir$ ls -l a.txt -rwxrw-r-- 1 sha ubuntu 5 Sep 28 23:22 a.txt ubuntu@VM-0-4-ubuntu:~/text_dir$ sudo chown ubuntu a.txt ubuntu@VM-0-4-ubuntu:~/text_dir$ ls -l a.txt -rwxrw-r-- 1 ubuntu ubuntu 5 Sep 28 23:22 a.txt ubuntu@VM-0-4-ubuntu:~/text_dir$ sudo chown sha:sha a.txt #更改用户名及所属组,用:连接 ubuntu@VM-0-4-ubuntu:~/text_dir$ ls -l a.txt -rwxrw-r-- 1 sha sha 5 Sep 28 23:22 a.txt ubuntu@VM-0-4-ubuntu:~/text_dir$ sudo chown :ubuntu a.txt #只更改所属组 ubuntu@VM-0-4-ubuntu:~/text_dir$ ls -l a.txt -rwxrw-r-- 1 sha ubuntu 5 Sep 28 23:22 a.txt ubuntu@VM-0-4-ubuntu:~/text_dir$chgrp 修改文件/目录的所属组(需要root权限或文件所有者)
ubuntu@VM-0-4-ubuntu:~/text_dir$ sudo chgrp sha a.txt #只能修改所属组 ubuntu@VM-0-4-ubuntu:~/text_dir$ ls -l a.txt -rwxrw-r-- 1 sha sha 5 Sep 28 23:22 a.txt四、三个关于权限的问题
- x 权限(最重要)✅ 有 x:可以
cd进入目录,可以访问目录里面文件的元信息(权限、属主),可以读取里面文件内容(前提是文件本身有权限) ❌ 没有 x:完全 cd 不进去,就算给 r 也不行 - r 权限✅ 有 r:可以列出目录内文件名(
ls) ❌ 没有 r:ls看不到里面文件,但是如果知道文件名,依然可以访问文件(只要有 x) - w 权限✅ 有 w:可以在目录里新建、删除、重命名文件(不是改文件内容!是操作目录里的条目)
4.1 进入一个目录需要哪些权限
示例1:去除x权限
ubuntu@VM-0-4-ubuntu:~$ ls -ld text_dir drwxrwxr-x 2 ubuntu ubuntu 4096 Sep 28 23:23 text_dir ubuntu@VM-0-4-ubuntu:~$ chmod u-x text_dir #关掉x权限后进不去了 ubuntu@VM-0-4-ubuntu:~$ ls -ld text_dir drw-rwxr-x 2 ubuntu ubuntu 4096 Sep 28 23:23 text_dir ubuntu@VM-0-4-ubuntu:~$ cd text_dir -bash: cd: text_dir: Permission denied ubuntu@VM-0-4-ubuntu:~$ ls text_dir ls: cannot access 'text_dir/b.txt': Permission denied ls: cannot access 'text_dir/c.txt': Permission denied ls: cannot access 'text_dir/a.txt': Permission denied a.txt b.txt c.txt #没有x后可以看到文件名但是看不到属性 ubuntu@VM-0-4-ubuntu:~$ touch d.txt /text_dir touch: cannot touch '/text_dir': Permission denied #文件也无法新建4.2 读文件需要什么权限
示例2:去除r权限
ubuntu@VM-0-4-ubuntu:~$ chmod u+x text_dir ubuntu@VM-0-4-ubuntu:~$ ls -ld text_dir drwxrwxr-x 2 ubuntu ubuntu 4096 Sep 28 23:23 text_dir ubuntu@VM-0-4-ubuntu:~$ chmod u-r text_dir ubuntu@VM-0-4-ubuntu:~$ cd text_dir ubuntu@VM-0-4-ubuntu:~/text_dir$ #没有r权限可以进 ubuntu@VM-0-4-ubuntu:~$ ls text_dir ls: cannot open directory 'text_dir': Permission denied #但是不能列举目录中的文件 ubuntu@VM-0-4-ubuntu:~$4.3 写入或删除文件需要哪些权限
示例3:去除w权限
buntu@VM-0-4-ubuntu:~$ touch text_dir/e.txt ubuntu@VM-0-4-ubuntu:~$ ls -ld text_dir drwxrwxr-x 2 ubuntu ubuntu 4096 Oct 3 13:23 text_dir ubuntu@VM-0-4-ubuntu:~$ chmod u-w text_dir ubuntu@VM-0-4-ubuntu:~$ touch text_dir/f.txt touch: cannot touch 'text_dir/f.txt': Permission denied #没有w权限后不能再写入或删除文件 ubuntu@VM-0-4-ubuntu:~$上述为本期全部内容,感谢你能够看到这里~