Linux下对文件权限的理解

一、权限的概念

Linux 下有两种用户:超级用户( root )、普通用户。
超级用户:可以再 linux 系统下做任何事情,不受限制
普通用户:在 linux 下做有限的事情。
超级用户的命令提示符是 “#” ,普通用户的命令提示符是 “$”
 
命令 su [用户名]
 
功能 :切换用户。
例如,要从 root 用户切换到普通用户 user ,则使用 su user 。 要从普通用户 user 切换到 root 用户则使用 su root root 可以省略),此时系统会提示输入 root 用户的口令。
直接 su 是切换身份但是不切换路径,想要切换到 root 目录下,我们可以输入命令: su -  。
  
当我们使用普通用户的时候,想要短暂的提升权限,但是又不想使用root用户,这时候就需要用到 sudo 命令。在需要root权限的命令前面加上一个 sudo ,就可以做到短暂提权。当然,使用sudo是需要一定操作的。在后续中会提到。
  
我们使用sudo命令的时候,会需要输入密码,这个密码输入的是我们普通用户的密码。是不是非常奇怪?使用root权限输入普通密码?这是因为由于某些操作,操作系统对我们是十分信任的。
 

二、Linux权限管理

文件的权限 = 人 + 文件属性
  

1. 文件访问者的分类(人)

文件和文件目录的所有者,拥有者:u---User
文件和文件目录的所有者所在的组的用户,所属组:g---Group
其它用户:o---Others 

为什么会存在所属组呢?

在公司如果你的领导想要查看你的成果,那么如果没有所属组的话,你就需要放开其他用户的权限,那么所有人都可以看到了,这样是很明显不合理的。


2. 文件类型和访问权限(事物属性)

a) 文件类型

d:文件夹
-:普通文件 (源文件、库文件、可执行文件、文档压缩包等)
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
其中 d 和 - 两个一定要熟悉。

其中的第一个字母就代表了文件的类型。

   
在Linux下和windows下,文件的后缀差别很大, Linux中文件的类型与后缀名无关,使用后缀名仅仅是给用户做一个提示符号来使用,后缀本质其实就是文件名的一部分。
  
但是, gcc等工具可能对后缀名有要求。所以我们还是规范使用后缀为好。

   

b)基本权限

i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限

 这里就可以看到,前三个是拥有者的权限,中间三个是所属组的权限,后面三个是其他用户的权限。

另外,root用户不受权限的约束。


3. 文件权限值的表示方法

a)字符表示方法

b)8进制数值表示方法


4. 文件访问权限的相关设置方法

a)chmod

功能: 设置文件的访问权限
 
格式: chmod [ 参数 ] 权限 文件名
 
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod
① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:  
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

比如我们需要给拥有者(u)去掉上 w 的权限。输入:chmod u-w test2.txt 

这里就看到就已经没有了 w 的权限。如果想要去掉几个权限,字母是可以一起输入的,比如:chmod u-rwx test2.txt  

如果想要同时去掉拥有者和所属组的权限,输入:chmod u-rwx,g-rwg test2.txt  

同样的,如果想要加上权限,只需要把 - 号改成 + 号即可。

如果想要给所有人加减权限,输入:chmod a-rwx test2.txt

  
②三位8进制数字

我们修改权限的时候,还可以按照数值来修改。

例如,我们输入:chmod 666 test2.txt 

   

b)chown

功能 :修改文件的拥有者
 
格式 chown [ 参数 ] 用户名 文件名
注意:要有root权限才能使用这个命令。

c)chgrp

功能 :修改文件或目录的所属组
 
格式 chgrp [ 参数 ] 用户组名 文件名
 
常用选项 -R 递归修改文件或目录的所属组
 
注意:要有root权限才能使用这个命令。

  

除了拥有者和所属组,都是其他人,所以不需要修改其他人的命令!

d)umask

功能
查看或修改文件掩码
 
格式 umask 权限值
说明 :将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022 ,普通用户默认为0002

权限掩码:凡是在umask中出现的权限,都必须在起始权限中去掉。

例如普通用户的0002,2就是 w 权限,所以 others 组中的 w 权限就被去掉了。

新建文件默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是 mask ,则实际创建的出来的文件权限是 : mask & ~umask
 

我们可以看到因为umask是0002的缘故,所以others是没有写的权限的。这就是掩码值的作用。 

   

单独输入 umask 则获取到掩码值。 

如果想要修改掩码值,只需要 umask 后接上想要修改的掩码值。

这时候创建的文件就是系统的默认权限了。


6. 目录的权限

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中

可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件

当我们要进入一个目录的时候,我们需要什么权限?  ---- x权限

为什么系统要规定一个目录默认是777开始?因为所有的目录被创建出来,一般都要能够进入!

在目录中创建新文件,需要 w 权限,读取文件,需要 r 权限。

所以,只要有用目录的写权限,就可以删除目录中文件,不论有没有这个文件的写权限。

为了解决这个问题,Linux引入了粘滞位。


7. 粘滞位

Linux系统中有很多人的时候,我们需要在一个公共的目录下进行文件的操作。

一般公共的目录是由root来创建。

张三为什么不在李四的目录下操作呢?没有权限。

让一个公共目录,大家各自可以进行 rwx 操作,但是禁止大家互删对方的文件,我们需要给目录设置粘滞位。

那么我们怎么添加粘滞位呢?

格式:chmod +t [目录名]

当一个目录被设置为 " 粘滞位 "( chmod +t), 则该目录下的文件只能由
一、超级管理员删除(root)
二、该目录的所有者删除
三、该文件的所有者删除

因为公共目录是root用户的,所以添加粘滞位也是需要root用户来添加的。

当然,root用户不受粘滞位的限制。所以,root用户的密码是非常重要的,不能轻易泄露。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青衫哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值