Linux部分的内容,我以权限管理作为起始。
关于Linux命令行操作的部分,大家可以去网上搜搜,教程很多,且全面:【链接】。这里我就不再把相同的东西复述一遍了,毕竟Linux命令这种东西,你不会的时候可以去查,常见的命令敲多了肯定忘不掉
不多说,开始Linux权限操作的内容吧!
本篇博客所有演示均在
CentOS7.6
下进行
[TOC]
1.什么是权限?
权限是用于对用户进行约束的。正好比视频网站的vip一样,没有vip权限,你就看不到只有vip才能观看的影片。
1.1 root和user
在linux中,用户分为两种
- root:超级用户
- 其他:普通用户
其中root用户的权限最高,可以在系统里面为所欲为。其所作操作在一定程度上会影响用户的使用环境。比如你在root里面安装了某个程序,那么所有子用户都可以使用这个程序,反之不行。
在root用户中,你还可以通过su user
这个命令切换到任何子用户而不用输入密码。但是从子用户切换到root则需要输入root用户的密码。所以,保证你的root用户密码不被他人知道是很重要的!
2.权限管理
本篇博客主要关注Linux中的文件权限
2.1 文件访问者
在Linux中,文件访问者分3类,对于文件的权限也分3类
访问者 | 文件权限 |
---|---|
拥有者 owner | r 读 |
所属组 grouper | w 写 |
其他用户 other | x 执行 |
我们要怎么看一个文件对于这三位不同的访问者的权限有什么不同呢?
使用ll
或者ls -l
命令即可看到区别
这里文件的前缀,即标识了一个文件的对于3个角色的权限。
其中muxue是文件的拥有者,root代表所属组。
2.1.1 linux的组
这里需要说明一下,在我之前的腾讯云多人一机的博客中,是用下面这种方式创建子用户的👇
这里就把子用户分到了root组下面,作用是让子用户可以通过su获得root权限
如果你在创建用户的时候没有指定组的话,系统会自动创建一个与用户名同名的组。
- 组有什么用?
当在一个公司中,多人使用同一台服务器进行开发的时候,就需要通过组来对子用户进行进一步分类。即A组中其他用户(grouper)可以查看到子用户A1的代码,但是B组的用户(other)都看不到A组内的东西。
这样就能实现多个小组开发不同的板块,而互不干扰。
2.1.2 学会看文件前缀
说回正题,我们要怎么看一个文件夹/文件的前缀呢?
1 | drwxr-xr-x 5 muxue root 4096 7月 3 11:56 code |
关于第一列的文件类型,有下面几种
现在我们知道了文件权限的查看方式,要如何修改一个文件的特定权限呢?
2.2 chmod修改权限
我们可以使用chmod命令来修改文件权限
1 | chmod u-r test.txt |
上面这个命令的作用是,给拥有者去掉test.txt
文件的r权限。可以用下面这个命令把权限加回去
1 | chmod u+r test.txt |
同理,如果你需要修改所属组和其他人的权限的话,指定g和o即可
1 | chmod g-r test.txt //去掉所属组的r权限 |
除了上面这种依次修改的方式,我们还可以用逗号隔开,用一条命令搞定
1 | chmod u+rwx,g+rwx,o-rwx test.txt |
如果你想批量修改成同一个权限,还可以使用a来指定all
1 | chmod a=rw test.txt |
2.2.1 以八进制修改文件权限
除了上面这个+和-比较好辩认的方式以外,我们还可以通过“八进制”的方式来修改文件权限。
对于一个用户来说,拥有所有权限rwx,如果我们将它与二进制进行对应,就会得到下面的结果
1 | rwx |
注意,这里的八进制并不是要通过八进制来读写权限的编码,而是用二进制来读取后,可得到最高权限7(不会超过7,所以是八进制)
了解上面这个方式后,你便可以写出所有权限类型对应的编号
权限 | 二进制 | 对应编号 |
---|---|---|
rwx | 111 | 7 |
rw- | 110 | 6 |
r-x | 101 | 5 |
r– | 100 | 4 |
-w- | 010 | 2 |
-wx | 011 | 3 |
–x | 001 | 1 |
当我们修改一个文件的权限的时候,就不需要用a=
这种相对古板的方式。而可以通过编码来直接指定3类用户的不同权限
1 | chmod 777 test.txt //给所有用户为rwx权限 |
2.3 rwx权限区别
修改完这些文件后有什么区别呢?
当我们创建一个文件夹和一个常规文件时,作为拥有者,默认有文件夹的所有权限和文本文件的rw权限。
2.3.1 常规文件
先来看看test.c
的各种权限有什么不同吧!
我们可以通过cat读取test.c文件的内容,这便是读权限r
而通过vim、nano等编辑器修改这个文件,就是写权限w
如果我们去掉r和w权限,就无法读,也无法写
使用nano打开test.c文件,会有以下报错
那么对于一个常规文件而言,x权限有什么用呢?
我们知道,当我们使用gcc
等编译器编译代码文件时,会出现一个a.out
可执行文件。这里的x便是可执行文件的标识。同时,这个文件也是用绿色标明出来了。
如果我们给test.c也加上x权限,则它也会变成绿色,可以直接用./test.c
来执行。当然,直接执行一个.c
文件是没有意义的
2.3.2 文件夹(目录)
在Linux下,一切皆文件。我们所说的目录也是一个文件
文件=内容+属性
在目录中保存的是文件的属性(包括文件名)我们想访问一个文件,首先要通过路径去找到这个文件。
那么对于一个文件夹而言,rwx权限又是什么呢?
当我们使用ls的时候,其实是可以指定路径的,默认为.
(当前路径)
可以看到,现在显示出了Mytest中的my.txt文件。
如果我们去掉文件夹的r权限,在执行ls。就会报错权限不够
得出结论,ls查看某一个文件夹中的文件,需要拥有文件夹的r权限。即便你进入这个文件夹,如果没有r权限,依旧无法用ls显示文件夹里面的内容。
但是这时候,我们还拥有文件夹的w权限,我们可以把其他文件拷贝到Mytest文件夹中
把r权限加回来,可以看到test.c文件已经被拷贝进去了
这便是w权限的作用,修改文件夹中间的内容。比如拷贝另外一个文件到文件夹中
去掉w权限后,我们也无法删除文件夹中的内容
最后,对于文件夹而言,x权限代表的是能否cd进入该文件夹
- 此时虽然我们无法cd进入,但我们拥有rw权限,可以直接从外部修改这个文件夹里面的内容,并进行访问吗?
答案是nope!不可以
因为在Linux中,所有的操作都要通过路径来进行。路径也是访问文件夹的一个方式(需要x权限)此时因为无法cd进入该文件夹,也就无法通过路径访问这个文件夹的内容。所以没了x权限之后啥事都干不了
当我们把x权限加回来之后,就可以这么做了
- 如果对于目录只没有r权限,允许进入,可创建文件并写入内容,但不可读取其中内容
- 如果对于目录只没有w权限,允许进入,允许在目录下ls查看文件列表,但不可以修改里面的文件
- 如果目录没有rw权限,允许进入,但是不能修改也不能查看目录下的文件内容
- 如果没有x权限,无法进入,也无法修改/查看其中内容
关于最后一点,不同系统的实现可能不一样。我的系统是CentOS7.6
,请以你的实际情况为准!
2.4 chown/chgrp
2.4.1 chown修改拥有者
我们可以通过这个指令,把一个文件的拥有者修改为指定用户
1 | chown [参数] 用户名 文件名 |
注意,在默认情况下,系统是不允许你修改文件的拥有者的。不过我们可以通过在语句前面加sudo
的方式,短暂获取root权限,对文件拥有者进行修改
这里如果提示不在sudoer flis里面,可以参考博客里面第八点的解决方案
注意,这里我修改为了root用户,root用户拥有最高权限!即便这是子用户的文件,root用户也可以为所欲为进行修改和删除,不受任何权限的约束。
如果我们把用户改成其他子用户,其实这个子用户依旧访问不到这个文件。
这就好比你告诉你的朋友,我要送你一个键盘。这个键盘的拥有者即将变成你的朋友。但是你没有把键盘给你朋友,键盘还在你家里,你的朋友依旧用不了这个键盘。
换到Linux环境中,就是在A的用户路径下有一个B用户的文件。但由于B用户无法访问A的用户路径,所以依旧无法访问到这个“属于B的文件”
2.4.2 chgrp修改所属组
1 | chgrp [参数] 用户名 文件名 |
这里因为我的环境里面没有其他组,所以就不演示该功能的成果了
2.5 关于默认权限
Linux中有一个默认权限:
- 默认目录权限777
- 默认常规文件666
可为什么我创建的目录文件的权限是755
,而常规文件的权限是644
呢?
这里我们可以用umask
命令查看权限掩码
这个权限掩码是什么意思呢?
抛弃首位不看,后面的是022
。根据2.2.1
中提到的八进制方式,我们可以解读出这个权限为
1 | --- -w- -w- |
权限掩码的作用就是,在权限掩码中出现的权限,在实际创建文件的时候不会出现!
仔细观察你就可以发现,这里我的文件夹权限如下,正好和掩码相反!
1 | rwx rwx rwx //默认权限777 |
而常规文件的默认权限666是rw-rw-rw-
,实际创建的结果也和掩码相反!
1 | rw- rw- rw- //默认权限666 |
如何计算?
这里的权限并不是简单的相减得出来的,其是通过默认权限&(~umask)
得出的
- 先对默认权限的
umask
进行按位取反 - 再将取反后的结果和默认权限(目录777,常规文件666)按位与得出
2.5 file命令
除了用文件属性的第一位来查看我们文件的属性之外,我们还可以用file
命令来查看更加详细的文件属性
当我们创建了一个C语言文件,并对他进行编译后,可以得到一个C的源文件和一个可执行文件
常用选项如下
1 | -c 详细显示指令执行过程,便于排错或分析程序执行的情形 |
2.6 粘滞位
简单介绍,粘滞位就相当于给一个目录上了胶水,其他人无法删除被黏住的目录(和目录下的文件)!
1 | chmod +t test |
前面提到了,作为other
,你可以去访问别人的目录(只要other
有对应的权限)
比如这里我用muxue
用户创建了一个test1.c文件,另外一个用户可以读取这个文件,但是不能写入
vim打开该文件会报错
但这里有一个bug就是,即便你没有那个目录内文件的权限,你依旧可以删除这个目录下的文件!
粘滞位的存在就是保护整个目录,不允许被其他用户删除!
添加粘滞位后,可以看到在Other的权限处出现了一个大写的T
这时候我们再尝试用另外一个账户删除,就会报错——吗?
以上就是一个明显的错误示范,粘滞位保护只能在root下进行操作,而且粘滞位只能给目录上,并不能单独给一个文件上!
给目录上了粘滞位后,再尝试删除,系统会报警告
被保护后的目录,该目录和目录下的文件只能被下面的用户删除:
- 超级用户root
- 目录的所有者
- 该文件的所有者
关于最后一点,虽然粘滞位保护了目录下的其他人的文件不能被你删除。但这不影响你在这个目录下创建/写入/删除你自己的文件
结语
关于linux权限管理到这就结束啦!
linux操作在未来找工作的时候非常重要,也是我们学习的时候和其他童鞋拉开差距的一环。
因为很多人可能上完本科4年都不知道企业招聘的时候会考linux操作😥
有什么问题可以在下面留言!看到了就会回复的
- 本文标题:【Linux】权限管理
- 创建时间:2022-07-13 19:58:53
- 本文链接:posts/3787294814/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!