目录
权限的概念
权限是操作系统用来限制对特定资源访问的机制,权限一般分为读、写和执行。系统中的每个文件都拥有特定的权限、所属用户,通过这样的机制来限制哪些用户可以对特定文件进行哪些操作
Linux中的用户
在Linux有两种用户,root和普通用户。root可以理解为VIP,解锁了所有功能。而普通用户就要被权限所约束,规定了那些能进那些不能进。
在学习Linux时一般会在虚拟机或云服务器上创建好用户,那么这时可以使用whoami来查看当前是那个用户
可以现在是Wqy这个用户,如果想切换其他用户或者切换到root账号,那么该怎么做?下面来了解一些指令
su指令可以切换用户,可以通过su 要切换的用户名 来进行切换,当然要输入对应的密码
除了su指令之外,还可以通过sudo来指令提权,sudo可以在不切换账号的情况下,使用root的权限来进行一些当前账号不能做到的事。sudo默认不可用
su 用户名 :切换用户
sudo :不切换用户使用root的权限
Linux又在文件中划分了三种“人”:拥有者、所属组、other。Linux中具有组的概念,旨在多人协作的时候更好的进行权限管理
Linux权限管理
在上面一直在探讨权限,那么权限到底在哪呢?能不能让我看看呢?
可通过创建一些文件来查看
可以看到在创建的文件前面有一大串东西,而其中的rwx就是对该文件的权限,权限是3个为一组,其中
r(read)读权限, 可以读取文件内容,可以列出目录内容
w(write)写权限, 可以修改文件内容,可以在目录中创建删除文件
x(excute)执行权限,可以作为命令执行,可以访问目录内容
- 没有权限
r和w很容易理解,这里的x要说明一下:
文件能执行 = 具有可执行权限+得是一个可执行文件
第一个文件类型可以简单了解一下
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
其中的d为目录文件,也就是我们熟知的文件夹,其他文件就不一一介绍
修改权限
在上面大致了解了权限,上面说到组是为了多人协作,那么就说明我们是打算让一些人能够对文件进行修改,因此就来学习一下怎么修改文件的权限
chmod指令
语法:chmod [参数] 权限 文件名
参数:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod [u±rwx],[g±rwx],[o±rwx],[a±rwx] filename
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限 用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
在文件中用户要有对应的权限才能进行对应的操作
但我们去除拥有者的r权限,即便这是该用户创建的文件,也没权限读
这时我们会发现,我既是拥有者,也是所属组,并且我在所属组中有r权限,为什么读不了呢?
因为,Linux对用户身份的识别从左到右,并且只识别一次
那么root既不是拥有者也不是所属组,那就是other,而other没有w权限。那么对于root能不能w该文件呢?
可以看到,即便没有权限,root依旧可以读
root恐怖如斯
修改权限的另一种方式
chmod除了可以使用rwx来改权限,还可以使用8进制来修改各组的权限,有三组所以用三个8进制数来表示
有对应的权限就为1否则为0,例如rwx=4*1+2*1+1*1=7,所以rwx对应的八进制数为7,注意顺序是固定的
默认权限
Linux创建文件的时候,为什么文件会自带权限呢?
这是因为在Linux中有权限掩码umask来确定新建文件、文件夹的默认权限
最终权限 = 起始权限&(~mask)
创建的普通文件,起始权限是:0666,去掉x的
创建的目录文件,起始权限是:0777,包含x的
那么普通文件的权限
目录的权限
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容
- 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
注意了!!!删除文件与该用户有没有该文件的w权限无关而是和该文件所在目录的w权限有关
粘滞位
那么问题来了, 换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.那万一别人把我的文件给删了,那怎么办?
为了解决这个不科学的问题, Linux引入了粘滞位的概念
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
- 超级管理员删除
- 该目录的所有者删除
- 该文件的所有者删除
如有错误,感谢指正