目录
1.shell命令以及运行原理
2. Linux权限的概念
3. Linux权限管理
3.1 文件访问者的分类
3.2 文件类型
3.3 访问权限
3.4 访问权限的表示方法
4. 访问权限的相关设置
4.1 chmod命令:修改权限
4.2 chown命令:修改文件的拥有者
4.3 chgrp 命令:修改文件或目录的所属组
一次性修改拥有者和所属组:
4.5 umask命令:查看或修改权限掩码
5. 粘滞位
5.1 粘滞位存在的原因:
5.2 粘滞位的使用
补充:
Linux
在正式开始权限管理的内容之前,首先看一下shell命令以及它的运行原理
有这样一种说法:
广义上:Linux发行版=Linux内核+外壳程序(shell);
狭义上:Linux=Linux内核;
那么shell到底是什么呢?
在Linux中,shell是用户与操作系统沟通的一种工具。Linux 严格意义上说的是一个操作系统,我们称之为 “ 核心( kernel ) “ 。但我们一般用户,不能直接使用kernel,而是通过 kernel 的 “ 外壳 ” 程序,也就是所谓的 shell ,来与 kernel 沟通。由此shell对于Linux就像,windows GUI对于windows系统一样。
再从技术角度来说,shell最简单的定义:命令行解释器。
shell完成的功能:
1. 传递用户的请求指令,让OS执行;
2. 对于用户的一些非法请求,shell有权拒绝,保护内核;
3. 对于用户的一些无礼请求,shell会创建子进程来进行执行具有风险的事情,不影响shell本身的正常运行。
下面开始正式的内容:
Linux下有两种用户:超级用户(root)、普通用户
超级用户:可以再 linux 系统下做任何事情,不受限制;普通用户:在 linux 下做有限的事情;超级用户的命令提示符是 “#” ,普通用户的命令提示符是 “$” 。
注意:
我们在平常设置的时候,root和普通用户的密码不能设置成一样的,否则容易造成权限界限不清楚。
如何完成上述切换呢?
命令:su [用户名]
例如,要从 root 用户切换到普通用户 user ,则使用 su user 。要从普通用户 user 切换到 root 用户则使用 su root( root 可以省略),此时系统会提示输入root 用户的密码,注意输密码的时候是不显示密码的,输完直接回车即可。
拥有者:文件和目录的所有者——u(User)
所属组:文件和目录的所有者所在的组的用户——g(Group)
其他:其他用户——o(Other)
在Linux中,一切皆文件,上述第一列表示的是文件的类型。
我们不再以文件后缀作为区分文件类型的方式
文件都有哪些类型呢?那些又代表着什么意思呢?
d :目录- :普通文件[文本、各种动静态库、可执行程序、源程序]l : 软链接(类似 Windows 的快捷方式)b :块设备文件(例如硬盘、光驱等)p :管道文件c :字符设备文件(例如屏幕等串口设备)s :套接口文件
对于一个文件或目录来说,有以下几种基本权限:
1. 读( r ):Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限(例如ls命令)
2. 写( w ):Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
3. 执行( x ):Execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限(例如cd命令)
4. “-”:表示不具有该项权限
那怎么看呢?
1. 字符表示法:
如上述图片中所示;
2. 8进制数值表示法:
r w x -:分别表示4 2 1 0;
例如:rw-:则表示6
rwx:则表示7
语法:chmod [参数] 权限 文件名
功能:设置文件的访问权限
说明:只有文件的拥有者和root才可以改变文件的权限
实例:
我们也可以对其进行多操作:
当然我们也可以用8进制形式对其赋值:
格式:chown [参数] 用户名 文件名
实例:
注意:
在进行拥有者修改的时候,一般是在root下进行的,或者使用sudo提升权限(下篇会讲如何提升)
普通用户 给/拿文件或目录时必须征得对方的同意,而root则不受权限的限制。
由此可知:文件的拥有者和创建者并不是等价的。
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
chgrp命令也是在root用户在进行的,或者使用sudo提升权限
查看权限掩码:
修改权限掩码:
注意:修改之后,只在本次登录有效
在默认情况下:
普通文件的起始权限:0666
目录文件的起始权限:0777
但实际上我们创建的文件和目录,看到的权限往往不是上面这个值,原因便是在创建文件或目录的时候还要受到umask的影响。
umask:权限掩码,代表凡是在umask中出现的,都应在起始权限中去掉。
相当于网络中的子网掩码一样
超级用户默认掩码:0022
普通用户默认掩码:0002
假设默认权限是mask,则实际创建出来的文件权限是:mask& ~umask
举个例子:
目录:777:111 111 111
掩码:002: 000 000 010
去掉之后: 111 111 101(775)
文件:666:110 110 110
掩码:002: 000 010 010
去掉之后: 110 100 100(644)
目录权限:775
文件权限:664
至于为什么这里权限掩码用的是002,因为默认情况下,权限掩码便是002;
如果目录本身对other具有w权限,other可以删掉目录下的任何文件;
如果目录本身对other没有w权限,other不可以删掉任何文件;
需求:
我们想让other可以在特定的目录下创建文件并写入,但是不想让任何人删掉自己的文件
这便有了粘滞位的诞生
格式:chmod o+t dir
只能对目录进行设置,一般是限制other权限的。
对设置了粘滞位的目录,在该目录下,只能文件的拥有者可以删除,其他人不能删除。
一般文件的拥有者都是设置为root用户;
有时候,有多个人,或者系统会有很多的临时数据,所有的临时文件放在系统的/tmp下,需要把所有的权限放开,但是只想让文件的拥有者自己删除自己的文件,那么便可以设置粘滞位。
如果sudo可以使用的话,那么尽量使用sudo;
因为每切换一次用户,系统便会建一个bash(进程);
查看系统所有进程:
ps axj | grep bash
坚持打卡!