一、Linux用户的概念
1.普通用户
除root用户以外的用户都是普通用户,普通用户的权限受到制约
2.超级用户(root)
root用户也就是超级用户,不受权限的约束
二、不同用户之间的转换
1.普通用户切换root用户
指令:su
如上图所示,普通用户 lj 的命令行提示符为 $ ,切换root用户只需要输入指令: su, 然后再输入root用户的登录密码即可
2.root用户切换普通用户
指令:su 用户名
如上图所示,超级用户(root)的命令行提示符为 # ,切换普通用户lj只需要输入指令:su lj ,就可以切换到普通用户身份
3.比较
由root和普通用户之间的切换可以看到,root用户不受权限的制约,切换普通用户时不需要输入普通用户的密码,而普通用户的权限受到制约,在切换root用户时需要输入root用户的密码,否则无法切换
三、Linux权限管理
1.文件访问者的分类
文件访问者分为如下三类
文件所属组(或者文件拥有者): owner , 实际用u表示
文件所属组用户: group ,实际用g表示
其他用户: other , 实际用o表示
2.文件类型与访问者权限
最常见的文件类型有两种:目录文件和普通文件
文件类型
通过指令mkdir创建的文件叫目录文件,用d表示,可以用指令cd进入
通过指令touch创建的文件叫普通文件,包括纯文本文件,二进制文件,数据格式的文件,用 - 表示,不可以用指令cd进入
文件访问者权限
我们知道文件访问者有三种:文件所属组(或者文件拥有者),文件所属组,其他用户,每一种访问者的权限都包括读权限,写权限,执行权限
举例说明:
指令ll等价于ls -l ,用来查看当前目录下文件的详细信息,下图是用指令mkdir和touch分别创建的exp和work两个文件,我们来分析一下exp和work前的信息都代表什么
解析如下图:
如果文件类型是普通文件,则第一个字符是- ,第11个字符表示的是文件具有的硬链接数
关于权限:
读权限:r表示可读
写权限:w表示可写
执行权限:x表示可执行
-:表示不具有该权限
3.文件权限的表示方法
1.字符表示法
r-- 表示只读;-w- 表示只写;--x 表示只可执行
rw-表示可读可写;r-x表示可读可执行;-wx表示可写可执行
rwx表示可读可写可执行;---表示无权限
2.八进制表示法
所属者,所属组用户,其他用户,每个文件访问者都有三个字符表示对应的读写执行权限,一个八进制数字可以表示一个三个二进制位的二进制数,每个二进制位上可以用1和0表示是否具有该权限(1表示有,0表示没有)
只读用八进制可以表示为400(8进制数字),4表示的是所属者的权限,用二进制表示就是100,0,0分别表示所属组用户和其他用户的权限
可读可写可执行用八进制可以表示为777(8进制数字),7用二进制表示是111,读写执行权限都具有
4.文件访问权限的更改
前情提要:只有root用户和文件的所属者(或者拥有者)可以更改文件访问权限
更改方法:
chmod 参数 +/- 权限 文件名
参数:
u ,表示所属者用户
g ,表示所属组用户
o ,表示其他用户
a ,表示所有用户
+和-的含义:+表示添加权限,-表示去掉权限
权限:可以用字符表示或者八进制数字表示
举例说明:
1.通过字符修改权限:
目录文件exp原本的访问权限为所属者(拥有者):rwx,所属组:rwx,其他用户:r-x,上图通过指令分别对所属者,所属组和其他用户的权限进行了更改
2.通过三位八进制数修改权限
三位八进制数分别代表所属者,所属组和其他用户的权限
5.修改文件的拥有者
语句:chown 用户名 文件名
6.修改文件的所属组
语句:chgrp 用户名 文件名
7.目录文件的权限说明
1.读权限:如果没有读权限,可以用cd指令进入该目录,但看不到目录里的信息,也即没有读权限就不能查看目录里的文件信息
举例说明:
在exp目录文件下创建了三个子目录文件,并修改了所属者的权限为不可读,指令cd进入exp目录里,却不能用指令ll查看目录里的文件信息
2.写权限:如果没有写权限,可以用cd指令进入该目录,但不能对目录里的文件进行创建和删除
举例说明:
修改了目录文件exp的权限为不可读,cd 指令可以进入该目录文件,但不能对文件进行删除和创建
3.执行权限:如果没有执行权限,则无法使用cd指令进入该目录
修改目录文件exp的权限为不可执行后,无法使用cd指令进入该目录文件
8.文件权限的小问题
1.在进行认证的时候,只能选择一个身份进行认证
对于一个目录文件,如果用户既是文件的拥有者,也是文件的所属组,拥有者权限没有读权限,所属组权限有读权限,那么该用户是否具有读权限的功能呢?
答案是:不具有。当该用户是拥有者时,对于该文件来说,在对该文件进行操作时时,会直接查看拥有者对应的权限,而不管所属组对应的权限,也就是说一个用户只能有一个身份
举例说明:
可以看到,目录文件exp的拥有者和所属组都是用户lj,所属组对应的权限具有可执行权限,但是拥有者对应的权限没有可执行权限,所有无法使用cd指令进入exp。也就是说,文件访问者有三种,但是用户只能是其中一种。
9.文件的最终显示权限
1.默认权限
目录文件的默认权限是777,普通文件的默认权限是666
2.权限掩码
查看指令:umask
默认权限掩码为0002,第一位的0我们可以忽略,或者将他看作是在表示后面的数字为八进制,接下来的002才是真正的权限掩码(8进制)
作用:可以通过修改权限掩码改变文件的最终权限
更改权限掩码:umask 新的权限掩码
3.文件最终显示权限
文件最终显示权限就是我们通过指令 ll 看到的
如下图:
目录文件test1的最终显示权限为:rwxrwxr-x 转换为八进制是:775
普通文件test2的最终显示权限为:rw-rw-r-- 转换为八进制是:664
最终权限=文件默认权限&(~权限掩码)
也即最终权限等于文件默认权限和权限掩码取反后按位与,权限掩码在进行取反和按位与操作时,不看第一位,只操作第2到4位
四、多用户文件数据共享
多个普通用户如何实现文件数据共享呢?例如普通用户张三创建了一个文件,普通用户李四可以看到吗?
1.普通用户与目录文件权限的联系
linux下,万物皆文件,在路径/home 下有linux 普通用户对应的目录文件,也就是说,每创建一个普通用户,就会在路径/home下生成一个对应的目录文件
如下图,在家目录下存在两个普通用户,分别是lj和myq,可以看到这两个用户文件对应的拥有者和所属组都是用户本身,而所属组和其他用户对应的文件访问权限都是000,也就是说,普通用户李四没有访问普通用户李四的权限,而张三创建的文件都是在张三这个目录文件下,可李四连张三这个文件都进不去,更不可能看到张三创建的文件
2.如何实现多用户文件数据共享
要想做到多用户文件数据共享,肯定不能把文件放到某个普通用户的家目录下,因为不同普通用户之间无法访问的文件
那究竟该如何做呢?
如下图
在root用户的根目录下,创建了一个目录文件shared,使用chmod 777 更改权限,使得除root用户以外的其他用户拥有对该文件的可读可写可执行权限,
那么其他普通用户就可以在shared下共享文件数据,说明如下图
普通用户lj 进入根目录下,发现确实存在root用户创建的shared文件,进入目录后创建普通文件test,并写入"hello how are you",可以看到普通文件test对应其他用户的权限只有可读,也就是说,其他用户拥有访问该文件内容的权限
在普通用户myq的根目录下,也看到了root用户创建的shared文件,进入其中后也看到了普通用户lj创建的普通文件test,用cat语句也确实可以打印该文件的内容
我们可以看到,普通用户myq对于普通用户lj创建的普通文件test,只具有读权限,因此用户myq向test追加信息时失败了
至此,多人文件共享的问题是不是就这样解决了呢?
并不是,这种多人共享文件数据的方法有极不合理的一点,那就是,一个用户可以删除另一个用户创建的文件,即使该用户没有对该文件的任何权限,说明如下:
我们更改了普通用户lj创建的普通文件test的权限,使得其他用户对该文件不具有任何权限,在普通用户myq这里,确实连读取文件的能力都没有,但是在删除该文件的时候确发现,可以删除,即使myq没有对普通文件test的任何权限,在实际的多人文件数据共享中,这一点无疑是及其不合理的
那么为什么可以删除呢?test是在根目录下目录文件shared下的一个普通文件,而shared对应的其他用户权限为7,所以其他用户可以在shared目录下进行文件的创建和删除。
也就是说能否删除一个文件,并不由该文件决定,而是由该文件所处的目录决定
3.改进方法
为了解决在共享目录下不同用户可以任意删除对方所创建的文件的问题,我们最容易想到的是,可以利用root用户去除其他用户对共享目录shared的写权限,但是,一旦去掉了写权限,其他用户就无法在该目录下创建和删除文件,也就无法实现文件数据的共享
真正的解决方法:粘滞位
在root用户下,对共享目录文件shared的权限做出如下修改:
o就代表其他用户,t就表示粘滞位,+表示增加权限
可以看到输入指令后,shared文件对应其他用户的权限变为了rwt,t代替了原本的x,其实t本身也有可执行的意思,不过相比可执行权限,它增加了一个限制,那就是在拥有粘滞位权限的目录文件下,不同用户彼此之间无法删除对方所写的文件,验证如下:
跟目录下的共享目录文件shared增加了粘滞位后,普通用户lj在shared目录下创建了文件test1,当普通用户myq想要删除该文件的时候,却提示无法删除
至此,多人文件数据共享得以正确实现
须知:粘滞位只能对目录文件进行添加,粘滞位是一种特殊的x权限,粘滞位一般作用于共享目录,设置了粘滞位后,在共享目录下,除文件的拥有者和root外,其他用户都不能对文件进行删除
实际上,在每个用户的根目录下,都存在一个带粘滞位,并且权限全部打开的目录文件 tem,tem就是默认建立的一个共享文件,作用和我们创建并增加粘滞位的共享目录shared相同
五、root须知
在linux下,root是几乎是万能的,root用户没有权限限制,任何对root用户 的权限限制都无效,root用户可以做到自己想做的几乎所有事