【Linux】-----权限详解

目录

一、Linux下的权限概念

Ⅰ、是什么?

Ⅱ、Linux下的两种角色

角色

如何添加普通用户

身份的转化方式

身份的提权

添加普通用户至白名单

二、Linux下的权限管理

Ⅰ、文件访问者的分类(Linux下的“人”)

Ⅱ、文件类型和访问权限(事物属性)

 1.文件类型

file指令(查看文件类型)

2.文件权限

权限表示方法:

a、字符表示

b、8进制表示

权限的修改方式

a、修改文件属性

b、修改“人” 

权限有无的表现 

3.目录权限

由目录可读(W)权限引发的一个有意思的问题

粘滞位(为目录准备的)

4.权限掩码umask


一、Linux下的权限概念

Ⅰ、是什么?

        对于权限,在我们日常中就有体现,如vip,学校的门禁等,说白了就是通过一定的条件拦住一部分人,给另外一部分人权利去访问特定的资源,本质就是有没有或者能不能的问题。所以权限一个简单的定义:既与人相关,还和事物的属性相关,即权限=人+事物的属性。

Ⅱ、Linux下的两种角色

角色

①超级用户(root):可以在Linux系统下做任何的事情,不受任何的限制,拥有最高的权力。

②普通用户:可以在Linux下做有限的事情。

区分两者:

如何添加普通用户

对于添加普通用户的操作一定是以root身份去添加的,因为权力大嘛!

添加命令:useradd  -m username(用户名)  或者  adduser  用户名

设置密码:passwd   username(用户名)

删除用户:userdel  -r username(用户名)(目录需递归删除)

细节问题:

①若直接采用useradd  +用户名的方式,这种方式仅仅只是创建了一个用户名。并没有在系统中的用户表,使用它是登录不了的,也删除不了。 

②采用useradd  -m username(用户名)  或者  adduser  用户名(成功的方式)

注意:成功添加的用户会被放在家目录下,也就是home目录!!

身份的转化方式

①普通人--->root

命令:su root(root可以省略)或者 su -

值得注意的是:设置密码时,普通用户和root的密码最好不要一样

root--->普通用户

命令:su 用户名

可以看到这里并没有要求输入密码,因为root具有最高的权力,可以为所欲为!

身份的提权

很多时候身为普通用户,我们并不想直接切换成root身份,但是我就是想以root身份去执行一个工作,这时候我们可以采用提权的方式去实现,就是给普通用户一个权力,把一些本来普通用户不能执行的指令赋予当前用户执行!

命令:sudo  需要执行的操作

经过上述操作,我们就不需要切换成root用户去执行一个指令!

对于上面的指令提权操作,大家在初次使用时,并不能实现!因为在系统中会存在一份白名单(信任列表),只有在白名单上的普通用户才能够去使用sudo去提权。比如上述的curry用户就不能执行sudo,因为它还没在白名单上。

从上图可以看出,curry这个用户无法执行sudo指令!!!

添加普通用户至白名单

此操作也需要在root身份下去执行!

①切换身份

②输入vim  /etc/sudoers进行添加对应的用户

③添加成功,就可以采用sudo的指令进行提权了!

二、Linux下的权限管理

Ⅰ、文件访问者的分类(Linux下的“人”)

①文件或者目录的拥有者(User)

②文件或者目录的所需组(Group)

③既不是拥有者也不是所属组的其他人(other)

拥有者顾名思义,就是该文件或者目录的创始人。那么为什么要存在一个所属组的概念呢?试想以下场景:

        在一个公司内部,存在很多部门,每个部门都负责有特定的工作,假设每个部门都存在着某种竞争关系,假如有一天,老板需要看你写的项目时,老板这个角色对于你这个项目他是属于其他人因此你不得不将文件的访问权限放开,让其他人都看见,这就会引发一个问题,隔壁部门的也是属于其他人,而你们又是竞争关系,可是你并不想让隔壁部门的看见文件内容,所以就必需要有分组,此时只需要把你的老板放入该组中并打开组的权限,那么隔壁部门就无法访问到具体的文件内容了,一举两得嘛!

        所以的所以,Linux具有组的概念,主要是为了进行多人协作时能更好的进行权限管理!!

看到这里估计又有疑问,Linux下既有“角色”,又有“人”,不冲突吗?实际上一点也不,not at all!,反而还是相互补充的关系!因为具体的角色需要具体的人去扮演,比如root可以是拥有者,也可以是所属组,还可以是其他人!你品!你细品!

Ⅱ、文件类型和访问权限(事物属性)

 1.文件类型

window系统下,我们习惯采用后缀名的方式去区分文件,而在Linux下并不通过后缀名去区分文件,但这并不是说不需要后缀!!!那是如何区分呢?

d:代表该文件是一个目录文件

-:代表普通文件

b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
l:软链接(类似Windows的快捷方式)

值得注意的是:Linux不通过后缀名去区分文件类型,但是Linux上面的工具可能区分!!

演示一下:现在有个.c后缀的C语言代码

若将其后缀改为.txt,在使用gcc编译器(Linux中编译工具)去编译,这时会失败!因为gcc只编译.c为后缀的文件

所以在Linux上我们可以使用后缀!!!以防上面的情况出现嘛!

file指令(查看文件类型)

命令:file 【选项】文件或者目录......

常用选项:

        -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
        -z 尝试去解读压缩文件的内容。

2.文件权限

权限表示方法:
a、字符表示

一般分三种:

①r:可读

②w:可写

③x:可执行

注意:是3个3个为一组,依次拥有者、所属组、其他!每一组的第一个字符为是否可读,是就为r,否则为-,第二个字符为是否可写,第三个字符为是否可执行!!!

b、8进制表示
权限符号 8进制 二进制
r-- 4 100
-w- 2 010
--x 1 001
rw- 6 110
r-x 5 101
-wx 3 011
rwx 7 111
--- 0 000

举例:

小总结:不难发现,当具有某个权限时,对应位置就记为1,不具有就是0,3个3个位一组,再转化为8进制!!

细节问题:如何理解X可执行权限vs 可执行?

先看演示:

可以看到,虽然test.txt具有x可执行权限,但是它本身并不可执行文件,因此它不能运行!

在看演示:

上图可以看出,a.out本身是一个可执行文件,但是呢当去掉可执行权限x时,它也不能运行了!!

从上面的两个案例可以得出:可执行=具有可执行权限x+文件本身就是一个可执行文件

两者缺一不可!!!

权限的修改方式

通过概念我们知道:权限=人 + 文件的属性。所以修改的方法也有多种,可以改“人”,也可以改“文件”。

注意:一个文件权限的修改,只能是root或者文件的拥有者!!

a、修改文件属性

字符修改

u:拥有者

g:所属组

o:其他人

a:所有的人

+:增加权限

-:取消权限

①单个修改

命令:chmod  u/g/o/a +-  r/w/x/rwx的组合  filename(文件名)

演示:

②多个一起修改

命令:chmod  u+-  r/w/x/rwx的组合,g+-  r/w/x/rwx的组合,o+-  r/w/x/rwx的组合   filename(文件名)

演示:

8进制修改

命令:chmod  8进制  filename

演示:

b、修改“人” 

注意:需要root身份才能执行,可以采用su指令切换身份或者sudo + 对应操作指令进行提权!!

①修改文件拥有者:

命令:chown 新的用户名  文件名

②修改文件所属组:

命令:chgrp  [参数] 用户名  文件名

参数:-r 递归修改文件或者目录的所属组

③同时修改

命令:chown  name1:name2  filename

含义:依次将对应文件的拥有者、所属组给改了!

注意:为啥没有other?其实就是因为当你既不是拥有者也不是所属组的时候,那你注定是其他人咯!!

把文件给别人是强制给的!!!

权限有无的表现 

①普通用户

情景1:文件本身

可见当文件没有rwx时,上述的指令都不能实现文件的相关操作,即不可读不可写不执行!!!

情景2:人相关

上述操作的含义:首先我是suri这个用户,对于newfile.txt这个文件来说我既不是拥有者也不是所属组,那么suri用户为其他人,而其他人没有rwx权限,所以当suri访问newfile.txt这个文件时,既不能写也不能读更不可执行!!

情景3:人的匹配问题

大家看到这个估计有疑问了,suri这个用户他虽然不是拥有着但是他是所属组啊,所属组具有可读可写可执行啊,为啥会失败?

实际上就是匹配问题:对用户的身份识别,只进行一次匹配!一旦匹配成功,就不会在进行下去!所以suri用户第一次匹配到的就是拥有者的身份,而拥有者并没有rwx权限,因此操作失败!!

来看个成功的演示:

对于suri用户具有可读可写可执行权限,但是呢因为newfile.txt本身就不是一个可执行文件,即使给了它可执行权限也没有太大用。

②root用户

对于root,权限对于它来说是没有任何作用的,因为他就是最高的权力者!!!

演示看看root的权力:

上述操作中,root对于文件newfile.txt是其他人的身份,该文件其他人权限并没有rwx,但是呢,root一样可以读写可执行,但由于文件本身不是一个可执行文件,因此无法成功执行!!

从上述案例可以看出,权限都是用来限制普通人的,它的存在就是为了保证普通用户文件的一般的安全性!!!!!

3.目录权限

  • 可读(r)权限:决定用户能否查看指定目录内的文件信息

  • 可执行(X)权限:该权限的有无决定用户能否进入到指定目录中

  • 可读(W)权限:该权限的有无决定用户能否在指定的目录中新增,修改,删除文件!

由目录可读(W)权限引发的一个有意思的问题

难道普通用户就不能删除root文件吗?

来看操作

dir目录是在suri这个用户下的一个子目录,该目录里有着一批文件,其中里面存在着两个由root身份创建的文件,如下:

按照我们的认知,root用户是最高权力者,普通用户无法对他所创建的文件或者目录下手,但是事实真的如此吗?

可以看到,suri这个用户成功将root创建文件给删除了!逆天了?这个合理吗?答案是合理的!!

首先这个dir目录是在suri的家目录下的一个子目录,suri是该文件的拥有者(Linux下一切皆文件),它对该目录具有可读(W)权限

具有可读权限那就是说明suri这个用户能对该目录的内容进行增删改操作,即能对目录的文件以及其下的子目录进行增删改操作!!不管你是谁,你在我的目录下创建文件,那我就有权力删除!!

结论:删除一个文件和目标文件的属性没有任何的关系,只和该文件所在的目录有关系!!!也就是用户在当前目录是否具有w权限。如果有,那就可以进行删除操作,因为删除一个文件的本质就是修改目录的内容!!!!!

       如果我们想在Linux下实现多个用户文件级别的信息共享,那么我们只能在系统的非用户目录下去创建,不能再任何一个用户的家目录下去创建该文件!!因为一个用户的家目录是不能随便进入的!

        在系统的非用户目录下去新建一个共享目录,默认其他人的w权限是放开的,因为要进行文件共享,w权限必须打开。一旦打开w权限,那么其他人都具有删除当前目录下的文件的能力。可是我们并不希望这样的情况发生,共享目录下不仅仅有一个用户,而是多个用户,如果每个用户都具有删除其他文件的能力,那就不合理了!人家辛辛苦苦写的文件,你说删就删?

        因此针对上述不科学的现象,关闭w权限是不可能的的了,那就需要给这个共享目录添加一个粘滞位了,该粘滞位仅用于目录,并且用于限制其他人!

粘滞位(为目录准备的)

命令chmod +t  目标目录

t:相当于x的加强版,能进目录但不能删除目标目录下的文件及其他内容!

用途:可以将一个目录设置为粘滞位,被设置粘滞位的目录,该目录下的内容(文件)只能由

①root用户删除

②该文件的拥有者删除

演示:

上述操作:可以看到,syw这个用户对于该共享目录来说是其他人,具有w权限,但由于这个目录对其他人添加了粘滞位,syw用户就不能删除当前目录下的任何一个文件,但可以新建文件!能不能改人家的文件得看他有没有这个权限咯!

4.权限掩码umask

为社么每次我们在新建目录或者文件的时候,好像都有一个默认权限,文件的是664,目录的是775?

Linux下:

创建文件的起始权限:0666,去掉x的

创建目录的起始权限:0777,包含x的

规定:创建文件/目录的时候,要从起始权限中,过滤掉(不是简单减法)在umask中出现的权限!

最终的权限=起始权限 & (~umask)

注意:umask大家的默认值不一样是正常的,不同的环境下一般都不一样,比如小编的centos7.8下的umask为0002

所以根据上面的公式:

创建一个文件的最终权限:0664=0666 &(~0002)

创建一个目录的最终权限:0775=0777 &(~0002)

以文件为例:

当然哦,这个umask我们也可以手动修改,指令也非常简单

修改后在新建文件/目录时,默认的权限也会改变!


好了,以上就是小编在Linux学习权限的心得与总结,如果对你有帮助,只需点赞和收藏!!有问题,欢迎来真实!

相关推荐

  1. Linux系统文件权限详解

    2024-07-22 15:54:03       58 阅读
  2. Linux中关于文件权限详解

    2024-07-22 15:54:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 15:54:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 15:54:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 15:54:03       45 阅读
  4. Python语言-面向对象

    2024-07-22 15:54:03       55 阅读

热门阅读

  1. 大流量DDoS攻击:未来的网络攻击趋势与防御策略

    2024-07-22 15:54:03       16 阅读
  2. DASCTF2024暑期挑战赛

    2024-07-22 15:54:03       19 阅读
  3. mysql日志

    2024-07-22 15:54:03       19 阅读
  4. 锁相环 vivado FPGA

    2024-07-22 15:54:03       14 阅读
  5. Mybatis——缓存简介

    2024-07-22 15:54:03       15 阅读
  6. html 特效 学习 日志 2024/7/21 23:58

    2024-07-22 15:54:03       14 阅读
  7. 前端面试题汇总2

    2024-07-22 15:54:03       14 阅读
  8. scp -rp传输目录并保持现有权限

    2024-07-22 15:54:03       14 阅读