Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制(Linux下的管理员)
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
命令: su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码
1)只允许用户自己访问(所有者)–user
所有者就是创建文件的用户,用户是所有用户所创建文件的所有者,用户可以允许所在的用户组能访问用户的文件。
2)允许一个预先指定的用户组中的用户访问(用户组)–group
用户都组合成用户组,例如,某一类或某一项目中的所有用户都能够被系统管理员归为一个用户组,一个用户能够授予所在用户组的其他成员的文件访问权限。
3)允许系统中的任何用户访问(其他用户)–other
用户也将自己的文件向系统内的所有用户开放,在这种情况下,系统内的所有用户都能够访问用户的目录或文件。在这种意义上,系统内的其他所有用户就是 other 用户类
这有点类似于 QQ 空间的访问权限:
l 这个 QQ 空间是属于我的,我相当于管理者(也就是“所有者”),我想怎么访问就怎么访问。
l 同时,我可以设置允许 QQ 好友访问,而这些 QQ 好友则类似于“用户组”。
l 当然,我可以允许所有人访问,这里的所有人则类似于(不完全等价)“其他用户”。
指的是用户(user)可以给定自己文件或者文件夹®读权限,(w)写权限,(x)可执行权限。
一 、 读权限
对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
二、写权限
对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
三、可执行权限
对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
注意:通常,Unix/Linux系统只允许文件的属主(所有者)或超级用户改变文件的读写权限。
测试用例:
文件类型:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件(pipe文件)
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件(socket)
既然我们不满意系统默认给出的文件或文件夹的权限,那我们可不可以修改它呢?
当然是可以的。
chmod通常由两种做法:字母法和数字法
首先我们先来介绍字母法:
字母法:chmod u/g/o/a +/-/= rwx 文件
u/g/o/a | 含义 |
---|---|
u | user该文件的所有者 |
g | group表示与该文件所有者同在一组的人 |
o | other表示其他以外的人 |
a | 表示所有人,包括user、group、other |
+/-/= | 含义 |
---|---|
+ | 增加权限 |
- | 去除权限 |
= | 设定权限(一般可以不加) |
r/w/x | 含义 |
---|---|
r | read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录内部的内容 |
w | write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。同时也失去对文件夹的移动,删除等权限 |
x | excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。 |
说了这么,下面便是实战。
测试用例1: chmod a+rwx test.c a表示的是所有人,包括user,group,others,可以看到执行完该命令后,所有人的权限都变为了可读、可写、可执行。
在它的基础上,我们也可以执行 chmod a-rwx test.c表示去除所有人的权限。
测试用例2:
首先我们修改回原来test.c 的权限,此时我们去除掉user用户的可读权限
chmod u-r test.c
我们此时使用vim对test.c进行编辑
vim test.c (vim命令文件存在则打开文件,不存在先创建然后打开)。
可以看到这里vim编辑器会报警告,这是因为我此时只有可写的权限,没法在vim中写,因为vim是要看到文件内容的,这与设置的只写权限冲突
那是不是我们此时就不能写了,当然不是。我们可以使用echo采用重定向写入 。这是我们把test.c权限还回去
这里可以看到我们写入的hello Linux \n已经写入了。
数字法
r/w/x | 含义 |
---|---|
r | read 表示可读取,用数字4代替 |
w | write 表示可写入,用数字2代替 |
x | excute 表示可执行,用数字1代替 |
此时chmod a+rwx test.c 可以用chmod 777 test.c 代替
第一个7代表的是user权限
第二个7代表所属组的权限
第三个7代表的是其他人权限
这里大家有没有思考过为什么普通文件的权限从user到other的权限是rw- rw- r- -。而文件夹的权限是 rwx rwx r-x开始呢?
这里面涉及到了权限掩码(umask),一个linux下的权限掩码默认是0002,为什么说是默认,而不是说是,这是因为权限掩码是可以被修改的。
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名
-c 显示更改的部分的信息
-f 忽略错误信息
-h 修复符号链接
-R 处理指定目录以及其子目录下的所有文件
-v 显示详细的处理信息
-deference 作用于符号链接的指向,而不是链接文件本身
sudo为权限提升,在更改文件拥有者是必要的
chgrp
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: -R 递归修改文件或目录的所属组
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
sudo意思就是super-user do,让当前用户暂时以管理员的身份root来执行这条命令。
su是用来改变当前用户的,su root,就是将当前用户切换为root,用了su root之后,下面所有的命令就可以不用打sudo了,因为当前用户已经是管理员root了。
由此可见,sudo命令只是暂时的赋予了用户超级管理员的权限,其工作目录并没有改变,而su指的是切换用户变为root用户,其工作目录已经发生了改变。
为什么要提出粘滞位?
只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.
这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉?
首先我们给k1文件对于其他用户的写权限
这里我们可以看到,虽然为root用户所有的文件夹,但我们依然可以删掉它
那应该怎么避免这个问题呢?
加粘滞位
语法 chmod +t 文件名
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
测试用例:
首先我们在root目录下创建一个文件,并给该文件加上一个粘滞位
此时我们退出root,执行删除权限,在没有加粘滞位之前它是可以删的,前提是用户具有该文件夹和该文件下文件夹/文件的写权限
这里我们可以看到同样的权限,此时再对它实行删除操作,此时是不允许的。
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这
个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
但请记住,权限限制的永远都是普通人,对于root来说,在它下面的操作永远是畅通无阻的。但前提是没有用户正在查看或写入东西在该文件,否则就算是root也无能为力。