本文已收录至《Linux知识与编程》专栏!
作者:ARMCSKGT
演示环境:CentOS 7
目录
前言
正文
权限是什么?
Linux权限的划分
Linux用户的切换命令
Linux文件权限
Linux文件类型
Linux文件权限
Linux角色划分
文件权限的访问和修改
文件拥有者和所属组
修改文件拥有者指令chown
修改文件拥有者指令chgrp
Linux辨识文件类型指令file
Linux目录权限
Linux系统文件和目录的默认权限
权限掩码
粘滞位(公共目录下的权限管理)
粘滞位的概念
粘滞位使用场景模拟编辑
Linux粘滞位的添加
提权指令sudo
最后
前言
对于一个操作系统,权限的划分是肯定的,我们在使用Windows操作系统时如果在C盘中删除一些系统级的文件夹,那么操作系统肯定会提示你权限不足,Linux也是如此,在执行某些命令时需要特殊权限,本节将为您介绍!
正文
我们都知道Shell外壳建立了用户与内核交流的桥梁,那么我们向Shell发送命令时可能会碰到权限问题!
权限是什么?
权限概念:限制人的,访问的对象天然可能没有这种“属性”(例如在王者荣耀里面写代码,王者荣耀写不了代码),所以权限反映了:“一件事情是否能被谁做”。做的肯定是人,所以只有人的操作才会出现权限的制约!
总结就是:权限 = 人 + 事务(文件)属性(事务是干什么的,或者说文件是干什么的)
Linux权限的划分
Linux权限划分为两种:
1. 管理员root:管理员具有一切权限,执行任何命令都是畅通无阻!
2. 普通用户:普通用户的行为受到限制,某些命令的执行需要向root申请并提权!
Linux用户的切换命令
Linux用户切换命令为:su [用户名]
该命令的功能显而易见就是切换用户!如果su后面不指定用户名则是默认切换为root,如果指定用户名则是切换到指定用户,切换对应用户时输入的密码也是对应用户设置的密码!
这里需要说明的是,在root权限下切换任何用户都是不需要密码的,所以操作需要谨慎!
Linux文件权限
在Linux系统中有一个概念是一切皆文件!也就是说无论是输入输出设备还是磁盘中的文件都统统归属于文件!
Linux文件类型
在Linux系统中,文件类型并不是由其文件后缀决定的,Linux系统识别文件类型是以详细信息指中第一个字符决定的!
文件后缀的作用
1.Linux系统不认后缀,用户想用就用区分给用户看。
2.将后缀看成文件名的一部分。
3. 有的软件需要后缀,例如gcc不能识别 .txt 文件只能编译 .c 文件。
Linux文件类型标识
- 普通文件 d 文件夹 l 软链接(类似Windows的快捷方式) b 块设备文件(例如硬盘、光驱等) p 管道文件 c 字符设备文件(例如屏幕等串口设备) s 套接口文件 我们现在一般接触到的就是目录d和普通文件-,深入的学习会接触到更多系统文件!
Linux文件权限
基本权限
权限 (三位)二进制表示 权限说明 - 000(0) 无权限(表示不具有该项权限) r 100(4) 可读取(Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限) w 010(2) 可写入(Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限) x 001(1) 可执行(execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限) 字符表示方法
权限八进制数表示法
Linux角色划分
u---文件所有者(user) 文件的创始人 g---文件所属组(group) 文件所属组是一个所属群体,一般文件所属组与文件拥有者是同一个人 o---其他用户(other) 除所有者和所属组以外的其他普通用户 a---全部用户(all) 此Linux上的所有用户 一个Linux系统可以有很多个用户,每个用户有不同的角色,互不干扰! 在Linux系统中root管理员不受任何权限和角色的约束,可以执行所有可执行命令!
文件权限的访问和修改
普通用户一般在自己的用户目录下,进行大部分操作都是不受限制的。Linux不支持普通用户相互访问其他用户目录!但是在权限允许的情况下,可以修改文件或目录的权限对其他用户公开发文!
权限修改指令:chmod [-选项] [用户类型][权限操作][权限] [目标文件]
功能:修改文件对应权限。
注意:只有文件所有者和所属组可以修改文件权限!其他用户无法使用chmod修改文件权限!
常用选项
-R 将目录和目录中的所有文件都设置为该权限
用户类型 u (拥有者),g (所属组),o (其他用户),a (全部用户) 权限操作 + (加上此权限),- (去掉此权限),= (加上指定的权限其他的权限全部去掉) 权限 r (可读),w (可写),x (可执行) 权限部分可以连添加,例如:rw,rx,wx,rwx 等等;也可以对多个对象进行操作使用“,”相隔开即可!
例如
1. 为test.c文件的所属组添加可执行权限:chmod g+x test.c
2. 为test.c文件的其他人添加所有权限:chmod o+rwx test.c
3. 为test.c文件的拥有者和所属组去掉可执行权限,其他人添加可写权限:chmod u-x,g-x,o+w test.c
4. 为test.c文件的其他用户只添加可读权限:chmod o=r test.c
权限的其他表示
字符表示 三位二进制表示 八进制表示 权限 - 000 0 无权限 r 100 4 可读 w 010 2 可写 x 001 1 可执行 八进制也可以对权限进行设置,一般在进行整体设置时会使用到八进制进行设置,这样比较方便!
例如
1. 为test.c文件的全部用户添加全部权限:chmod 777 test.c
2. 为test.c文件的全部用户去掉全部权限可读权限:chmod 000 test.c
3. 为test.c文件的拥有者和所属组只留下可写和可读权限,其他人添加只有可读和可执行权限:chmod 665 test.c
文件拥有者和所属组
对于文件(或目录),拥有者即是创建用户,所属组也是创建用户的名字。
对于所属组,大家可能概念非常模糊,我们可以把Linux系统比喻成一个班级,班级中分为两个小组,小组以组长来命名,这里的组长就是创建该文件(或目录)的用户。
在小组1的同学可以相互之间批改作业,而小组2中的同学不能去批改和查看小组1中同学的作业,更不能删除!所以小组的概念在Linux系统中可以实现一个Linux系统开发两个应用程序而两个开发团队之间互不干扰,这样既提高了开发效率降低了成本也保护了文件安全性。
修改文件拥有者指令chown
指令:chown [-选项] [用户名] [文件/目录]
功能:将文件/目录拥有者修改为指定用户。
常用选项
-R 将目录和目录中的所有文件的拥有者都设置为指定用户
修改文件拥有者指令chgrp
指令:ch [-选项] [用户组名] [文件/目录]
功能:将文件/目录的所属组修改为指定用户组。
常用选项
-R 将目录和目录中的所有文件的所属组都设置为指定所属组
Linux辨识文件类型指令file
指令:file [-选项] [文件/目录]
功能:查看文件类型信息,以英文展示。当文件为空没有被进行任何修改时file会反馈Empty表示文件为空!
常用选项
-c 详细显示指令执行过程,便于排错或分析程序执行的情形 -z 尝试去解读压缩文件的内容
Linux目录权限
Linux目录也有权限的约束,与普通文件的权限限制略有差异!
目录的权限也是:可读 r,可写 w,可执行 x,无权限 -
目录的可执行权限x对应的操作是是否可以进入目录,所有决定是否可以进入目录的权限是x而不是r,目录的r权限约束ls指令!
目录中的w可写权限,决定了是否可以添加文件或目录或者删除文件或目录,如果没有可写权限,则无法对目录中进行添加或者删除文件的操作!
Linux系统文件和目录的默认权限
我们在创建文件或目录时Linux会默认设置文件和目录的权限!
将系统的默认文件权限rw-rw-r--转换为八进制数字就是:664,从这里可以看出文件一般是不需要执行权限的,只有程序和目录有执行权限的设置,而为了保证文件的安全性其他用户other只有读权限!
将系统默认的目录权限rwxrwxr-x转换为八进制数组就是:775,从这里可以看出目录是需要可读和可执行权限的,因为我们需要进入目录和查看目录中的文件,但是系统没有给其他用户other分配可写入权限,这里第一是为了防止恶意创建文件,另一方面也可以恶意删除文件!
权限掩码
我们创建文件时,会有默认权限,但是文件的权限一开始是放开的,默认权限是经过权限掩码处理后才得到的!
按正常来说,我们创建普通文件时的默认权限为:0666;创建目录时的默认权限为0777,但事实并非如此,我们需要考虑一些安全情况,以免发生意外。
所以Linux在创建文件和目录时会将当前的默认权限八进制值与权限掩码~umask取&,也就是我们最终得到的默认权限 = 原默认权限 & ~umask。将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
umask指令
umask在Linux系统下是权限掩码的指令,该指令可以查询当前的权限掩码,也可以修改当前的权限掩码。
指令:umask [新掩码]
功能:如果umask后没有设置的掩码则显示当前的权限掩码,如果后面有需要设置的掩码则修改当前的权限掩码。
注意:修改权限掩码只是相当于本用户,其他用户不受影响!
粘滞位(公共目录下的权限管理)
粘滞位是为所属组设计的,为了防止在公共目录下恶意删除文件的行为!
粘滞位的概念
未来在使用Linux时可能有共享目录,被所有普通用户共享,用来保存普通用户产生的临时数据,这个共享目录一般是root通过的(例如hmoe就相当于一个共享目录), 文件被所有人共享时受权限约束,但是拦不住别人删我的文件,因为可写权限w是必须开启的,如果不开启那么谁也无法创建文件,为了让大家能共享文件但不被随意删除文件就推出了粘滞位的概念。粘滞位只能给目录添加,一般给共享目录添加。
粘滞位使用场景模拟
小组1和小组2在root创建的目录里面共同开发一个项目,小组2中的小华想看小组1中小明写的文件,但是发现没有读权限,但文件夹下有可写w权限,可以删除小明的文件,这样是非常不合理的!
Linux粘滞位的添加
指令:chmod a+t [目录] 或 chmod +t [目录]
功能:给目录添加粘滞位;该目录只能被超级管理员,该目录的所有者和该文件的所有者删除。 添加粘滞位后,该目录会被标记,其other权限位上的可执行权限位显示t或T。
注意:对于粘滞位的显示,系统中有的显示为T,但一般为t,这种情况是由other权限位上是否具有x权限决定的,如果该目录other具有权限则添加粘滞位后显示t,如果该目录other没有x权限则显示T!
提权指令sudo
指令:sudo [指令]
功能:对于一些涉及系统内部的指令,需要更高的权限才能执行,否则系统不会执行!在使用sudo提权后,系统会提示输入密码,此时输入的是本账户的密码,输入后即可提权执行!sudo在默认情况下向root申请提权(也就是申请使用管理员权限运行该指令)。
注意:Linux系统默认普通用户不能使用sudo进行提权,想要使用普通账户可以提权,那么想要将该普通用户添加到信任名单!
常用选项
-u 提权到指定用户执行(使用sudo调用授权的命令) 格式:sudo -u [指定用户] [指令]
说明:有时候我们在他人创建的目录下进行工作,我们想进行一些例如文件删除的行为时,对于有粘滞位的目录我们无法操作,这时可以向指定用户(目录文件夹的拥有者)借权执行命令!此操作也需要输入自己账户的密码,且自己的账户是信任用户!
添加信任名单步骤
(此操作必须在root账户下进行!)
1. 找到sudoers文件
2. 使用文本编辑器打开sudoers文件
找到图片中的位置,按照root账户的默认格式,在root下方将其抄一遍并将其用户名修改为自己的用户名即可列入信任列表!
最后
Linux权限的基本知识到这里就介绍的差不多了,对于系统权限是用来保护系统安全的,合理的运用权限可以让我们的文件数据不受损害,相信学完的朋友们一定深有体会!
本次Linux权限的基本知识就介绍到这里啦,希望能够尽可能帮助到大家。
如果文章中有瑕疵,还请各位大佬细心点评和留言,我将立即修补错误,谢谢!
🌟其他文章阅读推荐🌟
数据结构初级<排序>-CSDN博客
Linux基础指令-CSDN博客
Linux系统创建新的普通用户-CSDN博客
🌹欢迎读者多多浏览多多支持!🌹