1.Linux权限的概念
Linux下有两种⽤户:超级⽤户(root)、普通用户。
- 超级⽤户:可以再linux系统下做任何事情,不受限制
- 普通⽤户:在linux下做有限的事情。
- 超级⽤户的命令提⽰符是“#”,普通⽤⼾的命令提⽰符是“$”。
命令:su[⽤户名]
命令:su [⽤户名]
功能:切换⽤户
例如,要从root⽤户切换到普通⽤户user,则使⽤su user。
要从普通⽤户user切换到root⽤⼾则使⽤su root(root可以省略),此时系统会提⽰输⼊root⽤户的⼝令。
补充sudo:
sudo:用来进行指定的短暂提权的。
比如:安装软件,安装到系统中,需要超级管理员root权限,其实只按照了一份,允许大家同时使用。
whoami 显示当前登录的用户名。
在普通用户下输入sudo ls如果报错的话我们需要把这个普通用户添加到一个类型白名单里面,因为系统默认是不然你执行sudo命令的。
我们可以修改一下,前提是超级管理员vim /etc/sudoers把普通用户添加进去即可。
普通用户名字 ALL=(ALL:ALL) ALL
为什么会这样呢我们可以这样理解有一个保安他有一个本子里面记录了他认识的人凡是他认识的人无条件相信他们,他还有一个本子了记录凡是出现在这个本子上的人无条件不相信他们。
sudo第一次需要输入密码第二次有10~15分钟的时间免密码。
使用sudo输入的是普通用户的密码。
2.权限管理
2.1. 文件访问者的分类(人)
1. 文件拥有者(Owner)
文件的创建者,或者被显式指定为文件所有者的用户,文件拥有者可以设置自己对文件的权限。
文件权限中通常会有一个“拥有者”权限栏,它决定了文件拥有者可以对文件执行哪些操作,比如读取(r)、写入(w)或执行文件(x)。
特点:拥有者对文件拥有最高权限,可以自由更改文件内容、权限或将其转移给其他用户。
2. 文件所属组(Group)
文件所属组是指文件所属的用户组。每个文件都会被分配一个所属的组,可以有多个用户属于同一
个组。文件的所属组拥有权限,允许组内的用户执行对该文件的某些操作。
文件权限中的“所属组”权限栏决定了该组内的用户对文件的访问权限。
特点:同一组内的用户可以共享文件的访问权限,方便团队协作,管理员可以通过更改文件的所属组来控制访问权限。
补充:为什么要有所属组呢,如果没有所属组,假如某一天公司让你们组和别的组来写一个程序让你们组和别的组进行竞争谁做得好能让大家认可就推谁上,假如公司只有一台机器在这台机器上创建了两个工作目录分别是xxxA和xxxB,A组用A组的B组用B组的,写完之后你的组长说把你们组的代码给我看看,这个文件所属于我,别人是不能看的,那么组长要看只能公开,那就是other权限,假如我们没有所属组,那么另一个组也可以看到我们的代码了,所以这时候需要用所属者来限制我们把组长拉入这个组他就可以看到了,另一个组也不会看到我们的内容了。
3. 其他用户(Others)
其他用户指的是系统中不属于文件拥有者且不属于文件所属组的所有用户。
在文件权限中,"其他用户"(也叫做“其他人”)指的是所有没有明确权限的用户。这个类别的权限
通常比较宽松,因为它涉及的是文件权限的“公共”部分。
3.权限位解析
红色框中的三个字符是文件拥有者的权限。
中间框中的三个字符是文件所属组的权限。
粉色框中的三个字符是其他用户的权限。
一共9个字符
2.2 文件类型和访问权限(事物属性)
1.文件类型
- d:⽂件夹 :普通⽂件
- l:软链接(类似Windows的快捷⽅式)
- b:块设备⽂件(例如硬盘、光驱等)
- p:管道⽂件
- c:字符设备⽂件(例如屏幕等串⼝设备)
- s:套接口⽂件
2.基本权限
- 读(r):Read对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览该⽬录信息 的权限
- 写(w):Write对⽂件⽽⾔,具有修改⽂件内容的权限;对⽬录来说具有删除移动⽬录内 ⽂件的权限
- 执⾏(x):execute对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,具有进⼊⽬录的权限
- “—”表⽰不具有该项权限
3.文件权限值的表示方法
8进制数值表示方法
字符表示方法
2.3文件访问权限的相关设置方法
1. chmod
功能:设置⽂件的访问权限
格式:chmod [参数] 权限 ⽂件名
常⽤选项:
R -> 递归修改⽬录⽂件的权限
说明:只有⽂件的拥有者和root才可以改变⽂件的权限
2.chmod命令权限值的格式
⽤户表⽰符+/-=权限字符
+:向权限范围增加权限代号所表⽰的权限
-:向权限范围取消权限代号所表⽰的权限
=:向权限范围赋予权限代号所表⽰的权限
⽤户符号:
- u:拥有者
- g:拥有者同组⽤
- o:其它⽤户
- a:所有⽤户
实例:
chmod u+w /home/abc.txt //给文件 /home/abc.txt 的 所有者(user) 增加写权限(w)
chmod o-x /home/abc.txt //移除其他用户(others)的执行权限
chmod a=x /home/abc.txt //设置所有用户只具有执行权限,去除所有其他权限(读和写权限)
chomd g-r 文件名 //取消所属者的读权限
chomd g+r 文件名 //添加所属者的读权限
chomd o+w 文件名 //添加other的允许写权限
chomd o-r-w 文件名 //取消other只读和写权限
//用逗号隔开可以修改多个人的多个权限。如:
chmod u-rwx,g-rwx,o-rwx 文件名
三位8进制数字
实例:
chmod 664 /home/abc.txt //设置所属者和组有读写权限,其他用户只有读权限。 chmod 640 /home/abc.txt //设置所属者有读写权限,组有读权限,其他用户没有任何权限。
rw-rw-r--上面说3个字符为一段,这里用8进制表示为110 110 100
输入chomd 000 文件名 所有人都没有只读只写执行权限了。
输入chomd 444 文件名 所有人的只读权限就有了。
输入chomd 666 文件名 所有人的只读只写权限就有了。
输入chomd 777 文件名 所有人的只读只写执行权限都有了。
总结:
用户只能更改自己的文件权限。
如果没有权限系统会拒绝让我们访问。
确定权限信息的时候,系统会会先确定用户是谁?拥有者 所属组 还是other
Centos下,用户角色确定,只确定一次,顺序是:拥有者 所属者other。
root用户不受权限约束
3. chown
功能:修改⽂件的拥有者
格式:chown [参数] 用户名 ⽂件名
实例
//如sudo chown xc cmd把cmd这个文件的拥有者改成xc这个用户。
sudo chown user1 f1 // f1这个文件名的拥有者改成user1
sudo chown -R user1 filegroup1 //将filegroup1 及其所有子文件和子目录的拥有者更改为 user1
总结:
系统默认不允许我们把文件给别人是合理的,万一别人给你个有bug的程序那不就成你背锅了,所以是合理的,想给别人,必须最高权限,sudo / su(切换成为root)。
4. chgrp
功能:修改⽂件或⽬录的所属组
格式:chgrp [参数] ⽤户组名 ⽂件名
常⽤选项:-R 递归修改⽂件或⽬录的所属组
实例:
如sudo chgrp xc cmd把cmd这个文件的所属组给xc这个用户。
sudo chgrp users /abc/f2 //把 /abc/f2这个文件的所属组给users
结合如上我们就可以一起改拥有者和所属组。
5. umask
功能:查看或修改⽂件掩码
新建⽂件夹默认权限=0666
新建⽬录默认权限=0777
但实际上你所创建的⽂件和⽬录,看到的权限往往不是上⾯这个值。原因就是创建⽂件或⽬录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的⽂件权限是: mask & ~umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产⽣建⽴⽂件时预设权限。超级⽤⼾默认掩码值为 0022,普通⽤⼾默认为0002。
只关注掩码的后三位。
希望凡是在umask中出现的权限,都不应该出现在最终权限中。
umask绝对不能是减法,不要写入权限设置不为0不能使用减法。
实例:
umask 755 //更改权限掩码为755
umask //查看
umask 044 //更改权限掩码为044
总结:
为什么要有 umask?
默认权限,有OS决定,无法在创建前进行修改,系统可配置,可以灵活满足需要的一种表现。
特殊情况下,配置umask,可以控制文件的默认权限,让我们的代码都是可控。
6.目录的权限
可执⾏权限: 如果⽬录没有可执⾏权限, 则⽆法cd到⽬录中
可读权限: 如果⽬录没有可读权限, 则⽆法⽤ls等命令查看⽬录中的⽂件内容
可写权限: 如果⽬录没有可写权限, 则⽆法在⽬录中创建⽂件, 也⽆法在⽬录中删除⽂件
于是, 问题来了~~ 换句话来讲, 就是只要⽤户具有⽬录的写权限, ⽤户就可以删除⽬录中的⽂件, ⽽不论 这个⽤户是否有这个⽂件的写权限. 这好像不太科学啊, 我张三创建的⼀个⽂件, 凭什么被你李四可以删掉? 我们⽤下⾯的过程印证⼀下。
# 修改 /home/ 目录的权限为 0777
# 给 /home/ 目录设置了全员可读、可写、可执行权限。
[root@localhost ~]$ chmod 0777 /home/
[root@localhost ~]$ ls /home/ -ld
drwxrwxrwx. 3 root root 4096 9⽉ 19 15:58 /home/
# 在 /home/ 目录下创建一个名为 root.c 的文件,并赋予文件 rw-r--r-- 权限。
[root@localhost ~]$ touch /home/root.c
[root@localhost ~]$ ls -l /home/
总⽤量 4
-rw-r--r--. 1 root root 0 9⽉ 19 15:58 abc.c
drwxr-xr-x. 27 lisi lisi 4096 9⽉ 19 15:53 lisi
-rw-r--r--. 1 root root 0 9⽉ 19 15:59 root.c
# 即使 lisi 用户没有写权限(文件的 rw-r--r-- 权限),
# 它依然能删除该文件,因为 /home/ 目录的写权限允许删除目录中的文件。
[root@localhost ~]$ su - lisi
[lisi@localhost ~]$ rm /home/root.c # lisi 可以删除 root 创建的文件
rm:是否删除有写保护的普通空文件 "/home/root.c"?y
[lisi@localhost ~]$ exit
logout
结论:一个文件是否能被删除,与文件本身无关!与文件所处的目录w权限有关!
这样有问题没?
其实是没有问题的一般普通用户的目录下只有自己和root可以进入,别人是进不来的,那么要是别人来我目录创建文件,我把他删了那也没问题啊,这是我的目录。
如果两个用户之间要进行文件级别的协作呢??
不能放在一个私人账号下,我们放到 /home/xxx把权限都放开,实现共享,都可以进去这个目录下创建文件进行读写执行,那么要是张三在这个共享文件下创建了一个文件那么李四确可以删除,我们不想让他删除怎么办?
共享类文件,不想让非文件的拥有者删除对应的文件,可以使用权限标志位:t,粘滞位。
特征:只能给需要共享的目录添加粘滞位
粘滞位
[root@localhost ~]$ chmod +t /home/ # 加上粘滞位
[root@localhost ~]$ ls -ld /home/
drwxrwxrwt. 3 root root 4096 9⽉ 19 16:00 /home/
[root@localhost ~]$ su - lisi
[lisi@localhost ~]$ rm /home/abc.c #lisi不能删除别⼈的⽂件
rm:是否删除有写保护的普通空⽂件 "/home/abc.c"?y
rm: ⽆法删除"/home/abc.c": 不允许的操作
当⼀个⽬录被设置为"粘滞位"(⽤chmod +t),则该⽬录下的⽂件只能由
1. 超级管理员删除
2. 该⽬录的所有者删除
3. 该⽂件的所有者删除
关于权限的总结
⽬录的可执⾏权限是表⽰你可否在⽬录下执⾏命令。
如果⽬录没有 -x 权限,则⽆法对⽬录执⾏任何命令,甚⾄⽆法 cd 进⼊⽬, 即使⽬录仍然有 -r 读
权限(这个地⽅很容易犯错,认为有读权限就可以进⼊⽬录读取⽬录下的⽂件)⽽如果⽬录具有 -x 权限,但没有 -r 权限,则⽤⼾可以执⾏命令,可以 cd 进⼊⽬录。但由于没有
⽬录的读权限所以在⽬录下,即使可以执⾏ ls 命令,但仍然没有权限读出⽬录下的⽂档。
如上是我们对 Linux 权限的讲解,如有不妥之处,还请各位大佬指正。