在Linux下有两种用户,分别是超级用户(root)和普通用户。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$“。
超级用户可以在Linux下做任何事情,几乎不受限制,而普通用户一般只能在自己的工作目录下(/home/xxx)工作,以及在系统上做有限的工作。也就是说,权限的概念都是用来限制普通用户的,几乎不限制超级用户。
命令:su - [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
从普通账号切换为root账号。
从root账号切换为普通账号。
切换用户后,若想切回上次的用户,可通过Ctrl+D实现。
su只是单纯的进行了身份的切换,工作的目录并没有发生改变
su -相当于让我们的root重新登录,默认处在我们的家目录下,也就是/root
如何仅提升当前指令的权限
对单条指令进行提权,某些指令在操作时,会显示权限不够,指令请求失败,这时如果要切换到root用户来进行访问的话,有些太麻烦了,因为我们只需要对一条指令进行提权,没必要再切换成root用户来访问。这时我们就可以将sudo+command的方式来对指令进行提权,注意我们这里输入的是普通用户的密码,并非root用户的密码
语法: sudo 指令
功能: 提升当前指令的权限。
例如,我现在要以一名普通用户的身份,修改另一个普通用户的账号密码。
该提示说你没有被超级用户(root)添加到信用列表当中,所以该条指令的权限得不到提升,只有当你被超级用户添加到信任列表后,你才拥有提升当前指令权限的能力。
如何将普通用户添加到信任列表
那么首先你得先切换到超级用户,只有超级用户才有权力将普通用户添加到信任列表。
文件访问者的分类(人)
对于用户来说,权限可以将用户分为三大类:
1)文件和文件目录的所有者(文件拥有者)。
2)文件拥有者所在的组的用户(文件所属组)。
3)其他用户(other)。
注意:
1)对于某一文件而言,其拥有者、所属组和other就是由超级用户(root)和普通用户所扮演。
2)在Linux当中,所有用户都要隶属于某一个组,哪怕这个组只有你一个人(此时该组就以你的用户名为组名)。
我们可以通过指令ll来查看某一文件或文件目录的拥有者和所属组。
注: 除了文件拥有者和文件所属组之外的都叫other。
使用指令ll,我们可以看到前面有一串字符,这串字符实际上就代表着该文件的类型和属性。
这串字符由10个字符组成的。其中第一个字符所代表的就是该文件的文件类型。
不同的字符代表不同的文件类型。
1)-:代表普通文件。
2)d:代表目录。
3)l:代表链接文件(类似于Windows当中的快捷方式)。
4)b:代表块设备文件(例如硬盘、光驱等)。
5)p:管道文件。
6)c:字符设备文件。
7)s:套接口文件。
注意: 在Linux当中,文件类型与文件后缀无关。
剩下的9个字符每三个为一组,分别代表该文件相对于其拥有者、所属组以及other是否拥有某种属性
每一组的三个字符的第一个字符代表该文件是否具有可读属性,第二个代表是否具有可写属性,第三个代表是否具有可执行属性。
若是具有可读属性,则第一个位置的字符为r;若是具有可写属性,则第二个位置的字符为w;若是具有可执行属性,则第三个位置的字符为x。若某一位置为字符 - ,则说明不具有对应位置的属性。
注意:1、位置是什么含义是确定的
2、每一个位置只有是或者否,具有指定的权限
r/- w/- x/-
文件的类型:Linux系统中文件名后缀没有直接的意义,但是不代表不用
Linux操作系统可以不管这些文件的后缀,但并不代表操作该文件的软件或其他编译器不关心这些后缀,例如我们这里的gcc,他可无法识别你这.txt后缀的文件,所以它并不能够编译你这个文件
Linux中如何看待后缀 ?
看用户需求
语法: chmod 选项 权限 文件名或目录名
功能: 设置文件的访问权限。
常用选项: -R 递归修改目录文件的权限。
chmod指令权限值的格式:
格式一: 用户符号 +/-/= 权限字符
1)+:向权限范围增加权限代号所表示的权限。
2)-:向权限范围取消权限代号所表示的权限。
3)=:向权限范围赋予权限代号所表示的权限。
用户符号:
1)u:拥有者。
2)g:所属组。
3)o:other。
4)a:所有用户。
若要同时设置不同类用户的访问权限,则需用逗号隔开。
三位八进制数字
将对应的八进制数转换为二进制,进而设置对应权限值。
语法: chown 选项 用户名 文件名或目录名
功能: 修改文件的拥有者。
常用选项: -R 递归修改目录文件的拥有者。
修改文件的拥有者需要root用户进行操作,如果是普通用户则需要进行权限提升。
语法: chgrp 选项 用户名 文件名或目录名
功能: 修改文件的所属组。
常用选项: -R 递归修改目录文件的所属组。
修改文件的所属组需要root用户进行操作,如果是普通用户则需要进行权限提升。
也可以使用chown指令同时修改文件的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可。
我们查看新建的文件和目录,它们都有自己默认的权限。
实际上,新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,这里不展开讲述,而后面三位就是权限的八进制数值表示方法,我们将其翻译为字符表示方法。
创建出来的文件和目录的权限值往往不是我们所翻译出来的值,因为创建文件和目录的时候还要受到umask的影响,如果默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)
语法: umask 权限值
功能: 查看或修改文件掩码。
将掩码的的后三位八进制换算为二进制,然后对其进行按位取反。
将之前的新建文件的默认权限值和新建目录的默认权限值分别与其进行按位与操作,得到的就是最终创建出来的文件和目录的权限值。
换句话说就是凡是在umask中出现的权限位,都不能在最终权限中出现。
通过修改umask来设置文件的访问权限。
注意: 超级用户的默认掩码为0022,普通用户的默认掩码为0002。
总结:
a.普通文件起始权限:666(没有可执行x权限)
b.目录文件起始权限:777(rwx,能显示,能进入,能创建)
c 最终权限: 系统为了更好的控制文件权限,会有默认的(权限掩码umask)的概念。centos7下默认的掩码为0002,第一个0先不管,我们看后三位数(002)就行了 ,002二进制序列就是000 000 010
d.权限掩码: 在起始权限中,去掉在umask中出现的权限,不能影响其他任何权限!
结论:最终权限 = 起始权限 & (~umask)
对于文件来说,其可读可写可执行的属性我们都知道分别代表着什么对应的操作,那对于目录来说可读可写可执行又分别代表着什么呢?
1)可读权限: 如果用户没有该目录的可读权限,则无法通过ls指令查看目录中的文件内容。
2)可写权限: 如果用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件。
3)可执行权限: 如果用户没有该目录的可执行权限,则无法通过cd指令进入到目录当中。
总结:
目录文件的权限
r : 是否允许我们查看指定目录下的文件内容
w:是否允许我们在当前目录下进行创建,更改,删除
x : 是否允许用户进入对应的目录
那么这就会出现一个问题:
如果用户拥有某目录的可写权限,就可以删除该目录当中的文件,不管该用户是否拥有该文件的可写权限,这显然是不合理的。
为了解决这个不合理的问题,Linux引入了粘滞位的概念。
语法: chmod +t 目录名
功能: 给目录加上粘滞位。
当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符“t”。
在Linux中,用大写字母T表示目录启用了粘滞位并且执行权限未启用,用小写字母t表示目录启用了粘滞位并且执行权限启用。
当一个目录被设置为粘滞位,则该目录下的文件只能由:
1)超级用户删除。
2)该目录的拥有者删除。
3)该文件的拥有者删除。
注意:粘滞位通常被用于目录上,目的是限制其他用户删除该目录下的文件或目录。对于普通文件,粘滞位设置是无效的,因为它只对目录文件起作用。
权限的匹配规则是:只能匹配一个人,优先匹配user,然后才是group,最重要的是他只会匹配一次。
如果你觉得这篇文章对你有帮助,不妨动动手指给点赞收藏加转发,给鄃鳕一个大大的关注
你们的每一次支持都将转化为我前进的动力!!!