Linux权限管理
Linux系统中处处需要权限,我们对文件执行的每一个操作都代表着我们具有这个权限,如果我们的权限被剥夺操作起来就会变得举步维艰,本篇将介绍Linux中的权限设定与修改,便于我们更加深入了解Linux系统。
1.shell及Linux系统的组成
(1)Linux系统的构成
广义上:Linux=Linux内核+外壳程序 狭义上:Linux=Linux内核
(2)shell
什么是shell
作为一个操作系统来说,内核程序是其关键,但是直接对内核进行控制所需成本过高,因此我们需要借助外壳程序(shell)来对linux系统进行操控。注意:shell表示外壳程序,而上图中的bash表示的是外壳程序的版本。
shell的作用
1.传递请求指令,让内核执行命令。
2.保护内核,对于非法请求,shell可以直接进行拒绝。
3.创建子进程来执行具有风险的事情。
(3)显示进程
在Linux中也会有进程管理器,而显示进程管理器的命令是:
ps axj
可以显示所有正在运行的程序。 我们也可以使用
ps axj | grep bash
来显示所有bash的进程。 注意,我们当下只有一个bash进程 -bash,当我们对会话进行复制之后,会新建立一个bash进程。 我们还可以显示bash的编号:
ps axj | head -n1
这里的编号表示的是第二列的数据。 如果我们想观看这两个bash的创建时间以及创建者的时候,我们可以使用who命令进行查看: 我们也可以通过kill命令删去我们刚刚建立的进程:
kill -9 936
注意后面的936是新建立bash的编号。
2.Linux操作用户
(1)两种操作用户
linux系统下默认的操作用户有两种,分别是root用户和普通用户。 root:超级管理员,具有非常高的权限。 普通用户:具有一般权限,需要受到权限约束,并且只能通过root来创建。
(2)操作用户的切换
su与su-
su和su-都可以进行用户的切换,并且为直接切换,每一次切换账户时,在root下可以进行随意切换普通用户,但是在普通用户下则需要输入对应的root或者其他普通用户的密码,才能进行切换: su与su-的区别在于:su在完成用户切换后不改变所处路径,而su-切换后进入该用户的家目录。 直接进行切换的缺点在于每一次切换都会新建立一个bash。 所以建立之后我们需要进行退出操作:control D,从而结束新建立的bash。
sudo
sudo属于临时权限的提升,使用时只需要对指令前面加上sudo即可,使用时需要输入当前账号的密码。并且在使用后的十几分钟内再使用sudo可以不再输入密码。 sudo也不是直接就可以使用的,我们需要进行一定的配置后才能使用,本文均使用su与su-。
3.文件使用者权限
所谓权限即一个事情是否允许特定的人去做,权限=人的属性+事物的属性,比如文件,文件本身的读写就属于事物的属性,只有特定的人可以读写文件就属于人的属性,所以我们要学习权限就要从两个方面来入手,即人和事物。即一个文件的权限包括人和事物。
(1)使用者权限
三种使用者用户
对于一个文本文件或者一个目录文件来说,用户的类别分为三种: 1.拥有者:owner 2.所属组:group 3.其他:other 所属组指的是拥有者所在组的其他用户。 其他指的是除去拥有者和所属组的其他用户。(大部分用户处于其他这个位置)
与linux用户区别
我们知道linu用户分为root和普通用户与上面说的用户分类没有关系。 前者指的是这台机器目前操作者的身份,而用户分类针对的是每一个文件,换句话说,对于某个文件来说,root用户既可能是拥有者也可能属于所属组,也可能是其他用户。
(2)使用者权限的体现
显示使用者
当我们使用ll命令来查看文件时,我们会看到这两行内容,它们从左到右依次代表的是拥有者和所属组,其他并没有表示出来,因为除了拥有者和所属组之外的其他用户都是其他用户。
显示使用者权限
前十列的后九列,每三列代表一个用户的权限,比如对于第一行a.out这个文件,它的权限为: rwx rwx r-x,表示的就是它的拥有者具有rwx的权限,它的所属组具有rwx的权限,其他用户具有r-x的权限。
r:读权限,-表示没有读权限。 w:写权限,-表示没有写权限。 x:执行权限,-表示没有执行权限。
4.文件属性
(1)文件的分类
后九列代表的是各个用户的权限,而第一列表示的就是文件的属性。 注意,linux不以后缀名作为区分文件类型的方式,但是linux下的软件会以后缀名作为区分文件的方式,比如gcc d:文件夹 -:普通文件 l:软链接(类似windows的快捷方式) b:块设备文件(例如硬盘光驱) p:管道文件 c:字符设备文件(例如屏幕等串口设备) s:套接口文件 有人可能会问,为什么硬盘光驱也算文件,这是因为:</font color=red>Linux下一切皆问文件。</font>
(2)各类型文件的显示与创建
1.显示字符设备:
ls /dev/tty -al
2.显示块设备文件
ls /dev/vda1 -l
3.创建一个管道文件
mkfifo file
4.创建一个链接文件
ln -s file1 soft
(3)文件属性的修改
我们使用chomd命令来修改用户具有的权限:
chomd 用户+(增加)/-(减少)权限 文件名
普通方式修改属性
其中u表示拥有者,g表示所属组,o表示其他用户。 我们拿上图中a.out来举例,我们要将拥有者的读权限去掉。 我们发现拥有者的r权限已经被去掉了。 我们为其他人添加写权限: 我们发现已经为其他添加了写权限。 我们还可以直接使用a(all)来删除所有人的权限: 这也说明我们可以使用a来进行批量化处理。 注意权限的改变是永久的,下一次连接机器后权限不变
二进制方式修改文件属性
除了使用u/g/o +- 的方式,我们还可以使用二进制的方式。 我们将r/w/x看成1,将-看成0。 对于test1.c这个文件来说,它的属性二进制序列为110 110 100 现在我希望给予它所有的权限,就可以通过:
chmod 777 test1.c
其中每一个数字代表一个八进制(三个二进制),7代表的就是111,即给予所有权限: 我们发现所有用户对于test1.c具有了所有权限。 如果使用熟练建议使用二进制的方式,可以更加快速地修改文件属性。
(4)使用者的修改权限
只有文件的拥有者才具有修改文件属性的权限。 但是root用户可以不经过拥有者允许,直接修改文件的属性,当root所处的用户(比如other)没有读写权限时,以root用户操作依然可以进行读写,但是执行会受到限制。(不过也没关系,root用户可以自己给所处的用户加上执行权限) 举一个例子,对于上图中的test文件,它的拥有者是root,我们就不能在lhb的操作下对test进行属性的修改: 但对于root来说就可以随意更改lhb所创建的文件属性。
(5)更改文件用户
一个文件的创建者不一定是一个文件的拥有者,因为我们可以通过指令来修改文件的拥有者以及所属组。 只有root可以进行更改文件用户的操作
改变拥有者
我们使用chown来更改拥有者:
chown 用户 文件
这里我们将test2的拥有者改成了lhb。
改变所属组
我们使用chgrp来改变所属组。格式与改变拥有者是相同的。 我们也可以使用二进制方式来进行文件属性的修改
5.目录文件
(1)目录文件的属性
对于目录文件来说: r:查看目录中内容。 w:在目录中创建文件。 x:进入目录。 一般来说,只有拥有进入目录的权限才能查看目录内容,以及在目录中创建文件 当既有读权限又有进入目录的权限的时候,可以像上图一样显示文件的详细信息。 但是如果只有读权限没有进入目录的权限的话只会显示目录中的文件名。 举个例子:
(2)目录下文件的删除
基本原则
1.文件的删除权限与该文件所在目录的属性有关和该文件的属性无关。 2.如果目录本身对于操作者具有w权限,操作者可以删掉目录下的任何文件。 3.如果操作者对于目录没有w权限,操作者不能删除目录下任何权限。 我们可以看到,lhb对于目录dir1没有写权限,所以即使删除dir1中自己的文件,也是没有权限的。 但是当我们给lhb加入了w权限,它甚至可以删除拥有者为root的文件file2.txt <font color=red>注意我们要删除目录下的文件时,必须先要有进入该文件的权限,即同时对目录具有x和w权限时就可以删除该目录下任意文件。
粘滞位
当我们在一个不属于我们的目录中创建了自己的文件时,我们希望可以对其进行删除操作,这把为该目录的other用户提供w与x的权限,但一旦提供了这一权限,其他人也就具有了删除我们自己的文件的权限。 为了解决这一问题,我们引入了粘滞位这一概念。 粘滞位的设置只能对目录,通常是限制other的权限的。 对于设置了粘滞位的目录,该目录下的文件只能由文件的拥有者以及root用户可以进行删除,其他人不行 我们使用t来表示目录设置了粘滞位:
chmod o+t dir1
这里给dir1这个目录加上了粘滞位。 此时我们发现,虽然lhb对目录具有w权限,但是仍然无法删除该目录下的文件。
(3)文件的默认属性
普通文件的默认属性为:666(110 110 110) 目录文件的默认属性为:777(111 111 111)
这里是我新建立的两个文件,分别是目录文件dir1与普通文件file1.txt 我们可以看到: file1.txt的默认属性是:rw- r-- r--(110 100 100) dir1的默认属性是:rwx r-x r-x(111 101 101) 这和上面的原则为什么不一样呢? 这是因为权限掩码的存在: 我们可以通过umask指令来打印权限掩码: 我们发现,目前这台机器的权限掩码是0x0022,我们通常只看后三位: 用二进制表示为:000 010 010 并根据计算公式:default=default&~(mask)来计算权限 这里用file1.txt来举例: ~mask=111 101 101 110 110 110 &111 101 101 = 110 100 100 因此file1.txt的默认属性为110 100 100 我们还可以通过自定义权限掩码来修改默认文件属性: 修改仅在本次登录有效。
6.总结
无论是权限如何设定,root用户都具有基本上所有的权限,它是秩序的建立者也是最高管理者,就像是刀剑神域第一季的大反派一样,可以随意地进行更改各种普通玩家的权限,在提升权限中sudo命令也是非常重要的,在我之后的文章会有介绍如何安装sudo以及如何建立信任关系,如果感觉对你有帮助的话记得要三连啊,因为一个三连的人,一定是一个纯粹的人,一个高尚的人,一个脱离了低级趣味的人,一个有益于人民的人。(salute)
- 点赞
- 收藏
- 关注作者
评论(0)