【Linux取经之路】用户权限管理
目录
shell命令以及运行原理
Linux权限的概念
1、用户的概念
2、切换用户
Linux权限管理
1、文件访问者的分类
2、文件类型和访问权限
3、文件访问权限的修改
4、文件所有权的修改
5、设置权限掩码
6、用户提权
7、目录的权限
8、粘滞位
shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为「核心」(kernel),但是我们用户一般不能直接使用kernel,而是通过kernel的「外壳程序」,即通过shell与kernel进行沟通。首先我们明确一点,内核是看不懂我们输入的指令的,就像adduser zhangsan这条指令,内核就是看不懂,这条指令需要被翻译成内核可识别的指令后,内核才理解我们到底要干嘛。举个例子,当你在外服对国外游戏玩家一顿「国粹」输出时,他是听不懂的,他需要借助翻译软件翻译成他们的语言才能理解你说了什么。至于Shell,从技术角度讲,Shell的最简单定义就是:命令行解释器,也就是扮演一个翻译官的角色。它主要有以下功能:
● 将使用者的命令翻译给核心kernel处理。
● 同时,将核心处理的结果翻译给使用者。
以我们熟悉的Windows为例,我们操作Windows并不是直接操作其内核,而是通过Windows GUI(图形化界面)提供的接口来操作。例如双击打开一个桌面程序,最大化,最小化等。
Shell对于Linux,就相当于Windows GUI对于Windows内核。Shell主要是对我们的指令进行解析,解析成Linux内核可以看得懂的命令,并将Linux内核处理的结果翻译成我们可以看得懂得语句。
与此同时,Shell还在默默地保护操作系统。Shell会对我们用户输入的指令进行解析,当它解析到非法指令时就直接报错,并不会将我们输入的非法指令传递给操作系统。同时,它为了防止自身在解析指令时,遇到非法指令而崩溃,Shell本身并不直接执行我们输入的指令,而是派生出子进程来执行。
Linux权限的概念
1、用户的概念
Linux下有两种用户:超级用户(root)和普通用户。
● 超级用户:可以在Linux下做任何事情,不受限制。
● 普通用户:在Linux下受权限的限制。
● 超级用户的命令行提示符是「#」,普通用户的命令行提示符是「$」。
2、切换用户
命令:su 「username」
功能:切换用户
下面进行演示:
从超级用户切换到普通用户,直接切换,不需要额外操作。
从普通用户切换到超级用户,需要输入超级用户的密码,密码不会回显。
Linux权限管理
在Linux系统中,每个文件和目录都具有访问权限,这些访问权限决定了谁能访问以及如何访问。
1、文件访问者的分类
● 文件和文件目录的所有者:u → user
● 文件和文件目录的所有者所在的组:g → group
● 其他用户:o → others
2、文件类型和访问权限
第2-10位,三三为一组,且每一组的权限都依次为读、写、可执行。
文件类型:
d: 文件夹
-: 普通文件
l: 软链接(类似Windows的快捷方式)
b: 块设备文件(例如硬盘)
p: 管道文件
c: 字符设备文件(例如屏幕)
s: 套接口文件
访问权限:
读(r),对文件而言,具有读取文件内容的权限;对目录而言,具有浏览该目录信息的权限。
写(w),对文件而言,具有修改文件内容的权限;对目录而言,具有删除和移动目录内文件的权限。
可执行(x),对文件而言,具有执行文件的权限;对目录而言,具有进入目录的权限。
「-」,表示不具有该项权限。
权限除了可以用字母rwx表示,还可以用8进制表示。
上面抛出了一堆概念性的东西,下面我们来举个例子理解文件的权限。
首先,我创建了一个名为test的文件,我们可以看到,test的所有者和所属组为pcz,所有者对应的权限为rw-,可读可写不可执行,所属组对应的权限为rw-,可读可写不可执行。其他用户other对应的权限为r--,只能读,不可写不可执行。可以看到,我在把文件创建好后,并未对其权限方面做任何修改。我想说的是,当创建一个文件时,系统会自动赋予文件所有者读和写的权限,这样可以允许所有者显示文件内容和修改文件。前面提到,权限不仅可以用字母表示,还可以用数字表示,下面举例说明。
-rwxr--r-- / / 所有者的权限为7(111),所属组的权限为4(100),其他用户other的权限为4(100)。这两种表示方式任君选择。
3、文件访问权限的修改
一般情况下,只有系统管理员和文件的所有者才可以修改文件的权限。
chmod
功能:设置文件的访问权限
格式:chmod 参数 权限 文件名
操作对象
可以是下述字母中的任何一个或者是它们的组合。
u: 表示文件或目录的所有者
g: 表示用户组
o: 表示其他用户
a: 表示所有用户
操作符
+:添加某个权限
-:取消某个权限
=:赋予给定权限并取消原先权限(如果有的话)
下面举例说明:
书接上回创建的test文件。所属组的权限为rw-,现在我想把所属组的写(w)权限去掉。
现在,我往test里面加一点内容,内容是什么不重要,只要文件大小不为0就好了。
可以看到,test文件的大小已经不为零了。现在,我想给所有用户加上可执行权限x。
好了,可执行权限都已经加上去了,test变色了。接下来我想看看test能否运行。
很不幸,报错了。原本是演示如何修改权限的,现在开始不着边际了,其实我想说的是:文件不是具有可执行权限就可以执行的,还要看文件本身是否可执行,可执行权限和文件可以执行是两码事。举个例子,我们不能在csdn上看电影,原因在于csdn本身就不支持看电影,我们需要到视频网站(b站)等才可以。
4、文件所有权的修改
文件和目录的创建者就默认具有所有权,他们对该文件和目录具有任何权限,可以进行任何操作。他们也可以将所有权交给其他用户,使别的用户对该文件和目录具有任何操作权限。
chown
功能:更改文件和目录的所有者和所属组。
语法:chown [参数] 用户名 [文件|目录]
选项说明:-R表示,将下级子目录下的所有文件和目录的所有者一起改。
1)将文件test的所有者改为pcz。
2)将文件test的所属组改为pcz。
3)将文件test的所有者和所属组一起改为root。
4)将文件test的所属组改为pcz。
chgrp
功能:改变文件或目录的所属组。
格式:chgrp [参数] 所属组名 文件名
选项说明:-R表示,将下级子目录下的所有文件和目录的所属组一起改。
5、设置权限掩码
为了保护文件和目录,可以使用umask命令,这个命令会取消用户创建的文件和目录的默认权限设置。指定的掩码在登录系统时一直有效,umask对已经存在的文件没有任何作用。默认创建文件的权限是666,即[ -rw-rw-rw- ],默认创建目录的权限是777,即[ drwxrwxrwx ]。但是我们看到的往往不是这个值,原因在于创建文件或目录的时候还有收到umask的影响,实际创建出来的文件的权限是mask & ~mask。
umask
功能:查看或修改文件掩码。
# umask / /查看
# umask 044/ /设置
6、用户提权
sudo
功能:在不共享root密码的情况下授权用户以root的身份运行命令。
当我们以普通用户的身份安装软件包的时,往往权限不够,需要提权。比如 sudo yum install -y gdb。这需要在指令前加上sudo,然后输入当前用户的密码即可。
7、目录的权限
这里我就不卖关子了,直接上结论~
● 可执行权限:如果目录没有可执行权限,则无法cd到目录中。
● 可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容。
● 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件。
下面依次演示:
这里我把拥有者的可执行权限去掉了,然后再试图cd进入目录dir,直接报错。有读者可能会疑惑,所属组不是有可执行权限吗?!而且pcz本身也是所属组呀,为什么就进不去呢?其实是这样子的,在匹配时,顺序是所有者 > 所属组 > other,并且一旦匹配,就不会再进行第二次的比对了。
去掉目录的可读权限。
去掉目录的可写权限。
从上面结论中,我们可以得出这样一个推论:删文件是取决于文件所在目录的权限的。换句话说,就是只要用户具有目录的写权限,该用户就可以删除目录中的文件,而不论这个用户是否具有这个文件的写权限。 下面我们来看一个活生生的例子。
事先,我已经将home目录的权限改为777,也就是说所有用户都具有这个目录的写(w)权限,并且在该目录下,我以root的身份创建了一个名为test的文件,然后我从root切换到普通用户pcz,接着尝试删除root在home目录下创建的文件test,结果还删除的很成功!我pcz居然可以删除root创建的文件!!!这是不是以下犯上了。为了解决这个问题, Linux引入了「粘滞位」。
8、粘滞位
chmod +t 目录
下面演示一下:
给home目录加上粘滞位后,用户pcz已经无法删除root创建的文件test了。总结一下:
当一个目录被设置为粘滞位(chmod +t)后,该目录下的文件只能由
● 超级管理员root删除
● 该目录的所有者删除
● 该文件的所有者删除
本文到此就结束啦~感谢支持!