在正式学习权限之前我们要首先了解为什么要有权限❓
在一个系统中可能同时存在多个用户,但系统是唯一的,为了使系统下的用户都能够规范操作也就出现了权限限制的概念,权限是指某个特定用户具有特定的系统资源使用权力,保护了系统的稳定性和安全性
在Linux下有且只有两种用户:超级用户(root)和普通用户
普通用户:可以在Linux做有限的事情。(命令行提示符“#”)
超级用户(root):可以在Linux下做任何事情,不受到权限的限制。(命令行提示符“$”)。
命令: su [用户名]
功能:切换用户。
现在我们是普通用户那么如何切换到root❓(普通用户->root)、
如果从root切换到指定用户呢❓(root->指定普通用户)
那么我们如何退回上次用户呢
1.命令行输入exit
2.使用CTRL+D键
命令补充
命令: su - [用户名]
功能:切换用户。
su和su-的区别在于su-切换用户是通过重新登陆系统进而切换用户
严格意义上来讲普通用户与普通用户之间是不允许进行切换的,但是系统给我们提供了一个类似白名单的文件(sudoers文件),在白名单上的用户是root认可的用户,此用户可以对指令提权,从而进行对应操作。
先使用su切换一下用户
这里提示输入的密码是zyc2用户的密码
我们现在有两个用户zyc和zyc2其中zyc用户在白名单中而zyc2没有。我们现在就来在两个用户之间进行切换。
命令: sudo [命令]
功能:sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。
为了方便读者继续进行操作我们先学习一下关于如何创建新的普通用户的一系列相关命令
命令:useradd [用户名]
功能:新建普通用户
命令:passwd [用户名]
功能:设置用户密码/修改用户密码
命令:id [用户名]
功能:查看是否有此用户
命令:userdel [用户名]
功能:删除指定用户(仅仅是删除指定用户,如需彻底删除该用户相关文件需删除该用户家目录下所有文件)
注:新建用户的密码千万不要与其他用户密码相同包括root用户密码,如不小心创建使用passwd修改用户密码即可
我们来创建一个新的用户
✨文件和文件目录的所有者:u (User 拥有者)
✨文件和文件目录的所有者所在的组的用户: g (Group 所属组)
✨其它用户: o(Others 非拥有者并且非所属组就是others)
首先声明Linux中的文件类型并不是像Windows一样通过后缀标识一个文件的类型。
linux文件有以下类型文件(Linux下一切皆文件)
d:文件夹(目录文件)
-:普通文件(文本,视频,源代码,库,可执行程序等等都属于普通文件)
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
带着大家简单见识一下不同类型的文件
文件夹类型
普通文件
字符设备文件
块设备文件
管道文件
创建一个管道文件
软链接文件
我们再给源文件修改为正确后缀名试一试。
✨ 结论:Linux系统层面虽然不以后缀名区分一个文件,但是类如gcc这种工具会以后缀名区分文件。
✨读(r/4): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
✨写(w/2): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
✨执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
✨“—”表示不具有该项权限
一个文件的权限通过以上四种符号相互组合共同表示
有两种表示方法
1.字符表示
2.八进制表示
权限符号 | 八进制 | 二进制 |
---|---|---|
r | 4 | 100 |
w | 2 | 010 |
x | 1 | 001 |
rw | 6 | 110 |
rx | 5 | 101 |
wx | 3 | 011 |
rwx | 7 | 111 |
— | 0 | 000 |
指令:chmod
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod使用格式
用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
字符修改方案示例
关于链接文件为什么报错,可继续阅读后面有关于目录权限的讲解。
✨ 指令:umask
功能:查看或修改文件掩码
✨新建文件夹默认权限=0666(因为文件夹无可执行属性所以默认权限是 0666)
新建目录默认权限=0777
✨但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
✨格式: umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
file文件权限计算:
我们修改后的权限掩码(umask)是0003
file文件起始权限是0666
umask二进制表示为000 000 000 011
~umask二进制表示为 111 111 111 100
file文件起始权限二进制表示为000 110 110 110
(file文件起始权限)&(~umask)为000 110 110 100
最终权限八进制表示为0664
最终权限符号表示为rw-rw-r–
指令 :chown
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名
常用选项: -R 递归修改文件或目录的拥有者
指令 :chgrp
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: -R 递归修改文件或目录的所属组
chown和chgrp只有root用户或者sudo提权后才能修改原因:万一某个用户搞事情把自己的垃圾文件拥有者或者所属组修改为另一个用户,另一个用户可是不愿意接收这个文件的。
示例
递归式修改拥有者
递归式修改所属组
现象1
✨ 结论:就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限
现象2
猜一下others用户zyc在没有test文件x权限的情况下可不可以进入test文件❓
答案是不能
现象3
猜一下others用户zyc在没有test文件r权限的情况下可不可以在test文件中使用指令查看文件❓
答案是不能,但能够新建文件。
现象4
猜一下others用户zyc在没有test文件w权限的情况下可不可以在test文件中新建文件❓
答案是不能,都是可以使用ll等指令查看文件信息。
✨ 总结:
✨ 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
✨ 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
✨ 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
在刚刚学习的目录权限的过程中,现象1表现出了不合理性,为什么你没有我的文件的任何权限但是可以删我文件呢,即使是root用户建立的文件只要一个用户拥有目录的写权限也同样可以删除,但细想这个现象十分合理,你作为一个others用户虽然有目录写权限但是你文件竟然不给我看,我气不过我删了你也合理。
但一般情况下并不存在现象1那种情况(某一用户将权限完全暴露给others用户),真正用法是:某几个用户需要在某一时间段内共享信息,信息共享的位置在根目录下的tmp文件内。以防各位用户耍流氓不讲道理,胡乱删除他人文件,粘滞位就闪亮登场了。
✨当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
不同用户在此目录下进行资源共享
不同用户在此目录下进行资源共享
看现象
file指令:
功能说明:辨识文件类型。
语法: file [选项] 文件或目录…
常用选项:
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容。
❄️希望对读者学习Linux权限相关知识有所帮助
成功并非遥不可及,只要勇往直前,你便能触及。别停下脚步,勇攀高峰,你的努力终将得到回报。