请回答linux【文件与目录权限】
1. Intro of rights in linux
Linux下有两种用户:超级用户(root)、普通用户。
1.1 超级用户
超级用户可以在linux系统下做任何事情,不受限制
超级用户的命令提示符是“#”
1.2 普通用户
普通用户在linux下做有限的事情。
普通用户的命令提示符是“$”
1.3 切换用户命令
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user
。 要从普通用户user切换到root用户则使用 su
root
(root可以省略),此时系统会提示输入root用户的口令。
2. 文件权限的管理
文件权限的管理独立于Linux的权限,也就是超级用户和普通用户。
如果是root用户登陆的话,想怎么写就怎么写,无法约束
文件权限是用来约束普通用户的,不是用来约束超级用户的
对于文件来说人分三类,看下面
2.1 文件访问者的分类(人)
🍁 文件和文件目录的所有者:u—User
🍁 文件和文件目录的所有者所在的组的用户:g—Group
🍁 其它用户:o—Others
2.2 文件类型和访问权限(事物属性)
通过 ls -la
我们可以显示出文件的属性信息
下图展示了不同文件属性以及其含义
一般来说,新建一个用户,该用户就自成一个用户组。若需要调整用户组,就需要输入命令
2.2.1 文件类型
我们可以看到第一位表示的是
🍁 d:文件夹
🍁 -:普通文件(源代码,图片,动静态库,可执行程序,音频视频)
🍁 l:软链接(类似Windows的快捷方式)
🍁 b:块设备文件(例如硬盘、光驱等)
🍁 p:管道文件
🍁 c:字符设备文件(例如屏幕等串口设备)
🍁 s:套接口文件
2.2.2 文件权限
在第一位表示文件类型的位后面,文件的权限可以看到由9位组成,9位只会包含r
,w
,x
,-
的组合,表示该文件信息的不同权限
还有没有其他权限可言?基本没有其他了,当然这里使用的是基本,就说明还有
基本权限
🌿 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
🌿 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
🌿 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
🌿 无权限(—/0) :表示不具有该项权限
人和权限
访问者 | 权限位 | 权限 |
---|---|---|
User | rwx | 文件所有者的权限是读、写和执行 |
Group | rw- | 与文件所有者同一组的用户的权限是读、写但不能执行 |
Other | r– | 不与文件所有者同组的其他用户的权限是读不能写和执行 |
此时我们可以得知一个文件所对应不同访问人群的权限
2.2.3 文件权限值的表示方法
2.2.3.1 字符表示方法
2.2.3.2 8进制数值表示方法
上述两种方法都要会
文件访问策略
当一个访问者张三要访问这个文件,先查看张三是否属于文件拥有者 ,然后所属组
若张三什么都不是,那就则只能读,不能写和执行
2.2.4 文件访问权限设置
2.2.4.1 chmod
chmod快速入门
chmod命令可以修改文件权限
chmod [参数] 权限 文件名
常用选项:
-R
递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod g-r,g+x file.txt
chmod o+rwx file.txt
我们可以改一个人的多个权限,多个人的多个权限
chmod格式
- 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户 - 三位8进制数字
chmod 664 /home/abc.txt
chmod 777 file.txt
chmod示例
在创建一个普通文件的时候,文件权限位的显示是这样的
现在我执行命令删除User读权限
chmod u-r file.txt
访问被拒绝,vim也写不了,因为不让读,不过可以用echo >操作
echo >与 echo >>
表示清空并重定向的echo >
会导致的效果是如果只写也能够操作,在制度条件下是不可以的
但是表示追加重定向的echo >>
在只读条件下是不可以的
2.2.4.2 chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
chown user1 f1
chown -R user1 filegroup1
示例:把文件夹的拥有者改成root
要用sudo来提升权限等级,sudo是短暂提升权限的操作,要先在sudo用户中添加该用户才能短暂执行
不然就会报
需要在root用户下
visudo # 然后紧跟着root在root的下面一行,增加 allen ALL=(ALL) ALL
改完之后就可以修改权限了
下面再改回来
一次改拥有者和组
sudo chown allen:allen rootdir
2.2.4.3 chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
chgrp group1 f1
2.2.4.4 umask
功能:查看或修改文件掩码
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。
原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
格式:umask 权限值
说明:将现有的存取权限"减去"权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
umask 755
umask //查看
umask 044//设置
umask设置可以让我们自定义默认权限
3. 目录的权限
3.0 Intro
文件有权限,目录也有其权限
🍁 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
🍁 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
🍁 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
如果没有x的话,我就进不了目录,但是即使我有rw,我都得进入目录才能操作不是吗
所以没有x权限,其他操作也执行不了
3.1 张三删了我的文件
只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写
权限.
张三居然把root用户的文件给删了
Linux是怎么解决这个问题的?
为了解决这个不科学的问题, Linux引入了粘滞位的概念.
3.2 粘滞位
chmod 的 -t选项就是粘滞位
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
🍁 超级管理员删除
🍁 该目录的所有者删除
🍁 该文件的所有者删除
小结:
3.3 目录权限的总结
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。