root
用户就是上帝
权限就是用来限制普通用户的,权限对root用户没有用。
为什么会有Shell外壳?
- 因为我们一般人是看不懂操作系统内部结构的,而且直接在操作系统上操作很容易发生错误
Shell外壳就像一个翻译官
。
如果直接让用户与操作系统内核沟通,那么用户就必须熟悉操作系统,这样学习成本太高也不安全,所以 Linux 设立 shell 作为媒介中间人
给操作系统传达用户的指令。
shell 的定义就是命令行解释器
对比Windows ,我们操作windows 不是直接操作Windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
Shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:(只有一个)可以再linux系统下做任何事情,不受权限约束
- 普通用户:(可以有多个)在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令: su [用户名]
功能:切换用户。
例如:
- 要从
root
用户切换到普通用户user
,则使用su user
,是不需要密码的- 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码
想再切回去,就直接Ctrl + d
/logout
也就是退出。
- 要从普通用户
user1
切换到另一个普通用户user2
,则使用su user2
,是需要输入user2
用户的密码
不是 VIP 就不能看会员电影,是对角色进行约束。
书是不能吃的,有些事物是不具备某些属性的。
权限描述的就是人和事物属性的关系
- 文件访问者的就是人
- 文件类型及访问权限就是事物属性
Linux下的"人"可以分为:
拥有者
:文件属于谁所属组
:文件属于哪一个组other
: 不属于上面的任何一种
第一个字符代表文件的类型:
- “d” 代表文件夹
- “-” 代表普通文件
- “p” 代表管道文件
- “c” 代表硬件字符设备(如:
键盘
或显示器
)- “b” 代表硬件块设备(如:
磁盘设备
)- “s” 表示管道文件
- “l” 代表软链接文件(像Windows系统中的
桌面快捷文件
)在Linux下,不以文件后缀来区分文件类型(你可以使用给自己看,在系统层面没有意义)。
文件属性的剩下九列,三三为一组,分别代表的是
文件拥有者
、所属组
和其他人
对文件的权限。
基本权限
读权限
(r) :对于文件,具有读取文件内容的权限;对于目录,具有浏览目录的权限。写权限
(w) :对于文件,具有修改文件内容的权限;对于目录,具有删除、移动目录内文件的权限。可执行权限
(x):对于文件,具有执行文件的权限;对于目录,该用户具有进入目录的权限。- "-"表示不具有该项权限
Linux表示 | 说明 | Linux表示 | 说明 |
---|---|---|---|
r-- | 只读 | -w- | 只写 |
--x | 可执行 | rw- | 可读可写 |
r-x | 可读可执行 | -wx | 可写可执行 |
rwx | 可读可写可执行 | --- | 无任何权限 |
由于权限字符的位置是固定的,去掉首位,三三为一组,位置确定,有无权限可以用1和0 表示,所以权限也可以用二进制或八进制表示
权限符号 | 二进制 | 八进制 |
---|---|---|
r | 100 | 4 |
w | 010 | 2 |
x | 001 | 1 |
r-- | 100 | 4 |
-w- | 010 | 2 |
--x | 001 | 1 |
rw- | 110 | 6 |
r-x | 101 | 5 |
rwx | 111 | 7 |
-wx | 011 | 3 |
--- | 000 | 0 |
修改文件的权限分为两种,一是修改文件的读写执行属性,二是修改文件的拥有者和所属组。
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
- R -> 递归修改目录文件的权限
说明:只有文件的拥有者
和root
才可以改变文件的权限
+
:向权限范围增加权限代号所表示的权限-
:向权限范围取消权限代号所表示的权限=
:向权限范围赋予权限代号所表示的权限- 用户符号:
u
:拥有者g
:拥有者同组用o
:其它用户a
:所有用户
将test文件所有人的全部权限都去掉
[test@VM-8-15-centos ~]$ ll drwxrwxr-x 2 test test 4096 Aug 31 21:28 test [test@VM-8-15-centos ~]$ chmod u-r test [test@VM-8-15-centos ~]$ chmod u-w test [test@VM-8-15-centos ~]$ chmod u-x test [test@VM-8-15-centos ~]$ chmod g-r test [test@VM-8-15-centos ~]$ chmod g-w test [test@VM-8-15-centos ~]$ chmod g-x test [test@VM-8-15-centos ~]$ chmod o-r test [test@VM-8-15-centos ~]$ chmod o-x test [test@VM-8-15-centos ~]$ ll d--------- 2 test test 4096 Aug 31 21:28 test
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
将test文件所有人的权限都去掉
[test@VM-8-15-centos ~]$ chmod u+rwx,g+rwx,o+rwx test [test@VM-8-15-centos ~]$ ll drwxrwxrwx 2 test test 4096 Aug 31 21:28 test
- 1
- 2
- 3
或者
[test@VM-8-15-centos ~]$ ll drwxrwxrwx 2 test test 4096 Aug 31 21:28 test [test@VM-8-15-centos ~]$ chmod a-rwx test #所有用户的全部权限都去掉 [test@VM-8-15-centos ~]$ ll d--------- 2 test test 4096 Aug 31 21:28 test [test@VM-8-15-centos ~]$ chmod a+rwx test #将所有用户的全部权限都加上 [test@VM-8-15-centos ~]$ ll drwxrwxrwx 2 test test 4096 Aug 31 21:28 test
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
在前面已经说过,八进制数字也能够表示访问者的权限,两种方式都是等价的
实例:[test@VM-8-15-centos ~]$ chmod 777 test #所有用户的全部权限都加上 [test@VM-8-15-centos ~]$ ll drwxrwxrwx 2 test test 4096 Aug 31 21:28 test [test@VM-8-15-centos ~]$ chmod 000 test #所有用户的全部权限都去掉 [test@VM-8-15-centos ~]$ ll d--------- 2 test test 4096 Aug 31 21:28 test [test@VM-8-15-centos ~]$ chmod 666 test #所有用户的读写权限都加上 [test@VM-8-15-centos ~]$ ll drw-rw-rw- 2 test test 4096 Aug 31 21:28 test
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名
chgrp
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选项:
- -R 递归修改文件或目录的所属组
实例:
把
bak.txt
文件给dxl
用户[test@VM-8-15-centos ~]$ chown dxl bak.txt chown: changing ownership of ‘bak.txt’: Operation not permitted
- 1
- 2
因为
test
和dxl
这两个都是普通用户,所以不能直接修改
我们换成root
用户,强制修改文件拥有者[test@VM-8-15-centos ~]$ su #切换成root Password: [root@VM-8-15-centos test]# whoami root [root@VM-8-15-centos test]# chown dxl bak.txt #修改文件的拥有者 [root@VM-8-15-centos test]# ll --w-rw-r-- 1 dxl test 11 Aug 27 17:23 bak.txt [root@VM-8-15-centos test]# chgrp dxl bak.txt #修改文件的所属组 [root@VM-8-15-centos test]# ll --w-rw-r-- 1 dxl dxl 11 Aug 27 17:23 bak.txt
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
把文件的拥有者和所属组改回来
[test@VM-8-15-centos ~]$ ll --w-rw-r-- 1 dxl dxl 11 Aug 27 17:23 bak.txt [test@VM-8-15-centos ~]$ su Password: [root@VM-8-15-centos test]# chown test:test bak.txt [root@VM-8-15-centos test]# ll --w-rw-r-- 1 test test 11 Aug 27 17:23 bak.txt
- 1
- 2
- 3
- 4
- 5
- 6
- 7
功能:短暂提升到
root
权限,使后面的语句以root
的身份执行,一般10-15分钟内有效
格式:sudo 语句
只需要输入你的普通用户的密码即可
想要执行sudo语句,该用户必须在root的信任列表里
在
root
用户下,命令行输入vim /etc/sudoers
- 1
然后往下面找,找到一个
%wheel ALL=(ALL) ALL
就可。
》
插入你的用户,强制保存并提出,你的用户就添加到了信任列表。
问:为什么在Linux里面没有命令把人改成other呢?
答:因为other
是不确定的,不具体的;把拥有者和所属组改了以后other
也就改了。所以不需要命令来修改other。
可读权限
r
: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容
可写权限w
: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
可执行权限x
: 如果目录没有可执行权限, 则无法cd到目录中
有人就要问了:这个用户在文件的所属组中,为什么进不去了呢?
因为权限只会被认定一次,首先判定你是不是文件拥有者。如果是,那么就会认定你是拥有者,不会去再判定你是不是所属组了;如果你不是拥有者,才会去看你是不是所属组。
在Linux中默认:
- 一个目录被创建,起始权限是:
777
- 一个普通文件被创建,起始权限是:
666
但是我们新创建的目录和文件权限也不是 777 和 666 啊
这是因为创建文件或目录时还要受权限掩码umask
的影响
功能: 查看或修改文件掩码
格式: umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。[test@VM-8-15-centos test1]$ umask # 普通用户默认为0002 0002
- 1
- 2
[root@VM-8-15-centos ~]# umask #超级用户默认掩码值为0022 0022
- 1
- 2
凡是在umask中出现的权限,都不应该在最终权限中出现 –
不是减法
最终权限
=起始权限
&~umask
umask还可以修改,但只是在本次登录有效
[test@VM-8-15-centos test1]$ umask 0777
[test@VM-8-15-centos test1]$ touch file
[test@VM-8-15-centos test1]$ mkdir dir
[test@VM-8-15-centos test1]$ ll
d--------- 2 test test 4096 Sep 10 16:40 dir
---------- 1 test test 0 Sep 10 16:40 file
[test@VM-8-15-centos test1]$ umask
0777
如果在一个团队中,要在一个用户目录下工作,但是创建的目录可以被其他用户删除,不论该用户是否具有文件的写权限。
可以删除不能写的文件(我虽然不能往文件里写内容,但是我可以删文件)
这是不合理的,我创建的一个文件,别人不能写入内容竟然可以删掉。
针对这样的问题Linux引入了粘滞位
允许othe
r在目录下创建文件,所以目录对other
要有w
权限,只允许other
删除自己的文件,不能删除公共的目录,所以需要对目录增加限制,加粘滞位。
首先:粘滞位是针对目录的,对文件无效。
设置方法:chmod
+t
目录
当一个目录被设置为粘滞位,则该目录下的文件只能由:
一:root
用户删除。
二:该目录的所有者
删除。
三:该文件的所有者
删除。
误区:
这里,我root
创建了一个目录,然后设置了一个粘滞位的选项,其他用户还能把这个目录删了
这是因为目录里面没有创建文件。
如果说你root
用户,创建了一个目录,然后设置了一个粘滞位的选项,并且root
用户你在当前这个目录下创建了你自己的一个文件,然后其他的普通用户
是不能删除掉这个目录的,要不然就说存在了上面所说的情况,文件我干不了,我直接把目录给他干掉,那这个粘滞位的一个意义,就不存在了。