【Linux系统编程】第九弹---权限管理操作(下)

✨个人主页:熬夜学编程的小林

💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】【Linux系统编程】

目录

1、目录权限

2、粘滞位

总结


1、目录权限

首先提出一个问题,删除一个文件需要什么权限呢???

回答这个问题之前我们先通过命令来看看现象。

复制代码
[lin@VMCentos7 lesson1]$ ll  # 首先使用root创建三个文件和三个文件夹
drwxr-xr-x 2 root root 4096 Mar 29 18:39 dir1
drwxr-xr-x 2 root root 4096 Mar 29 18:39 dir2
drwxr-xr-x 2 root root 4096 Mar 29 18:39 dir3
-rw-r--r-- 1 root root    0 Mar 29 18:37 root1.txt
-rw-r--r-- 1 root root    0 Mar 29 18:37 root2.txt
-rw-r--r-- 1 root root    0 Mar 29 18:37 root3.txt
[lin@VMCentos7 lesson1]$ rm -f root1.txt  # 删除使用root创建的文件
[lin@VMCentos7 lesson1]$ ll       # root创建的文件竟然被普通用户删除了
total 12
drwxr-xr-x 2 root root 4096 Mar 29 18:39 dir1
drwxr-xr-x 2 root root 4096 Mar 29 18:39 dir2
drwxr-xr-x 2 root root 4096 Mar 29 18:39 dir3
-rw-r--r-- 1 root root    0 Mar 29 18:37 root2.txt
-rw-r--r-- 1 root root    0 Mar 29 18:37 root3.txt
[lin@VMCentos7 lesson1]$ rm -rf dir1   # root创建的目录竟然被普通用户删除了
[lin@VMCentos7 lesson1]$ ll
drwxr-xr-x 2 root root 4096 Mar 29 18:39 dir2
drwxr-xr-x 2 root root 4096 Mar 29 18:39 dir3
-rw-r--r-- 1 root root    0 Mar 29 18:37 root2.txt
-rw-r--r-- 1 root root    0 Mar 29 18:37 root3.txt

通过上面的命令结果我们可以看到,使用root用户创建的文件和文件夹都能被普通用户删除,uu们是不是感觉很疑惑呢???

而实际是,删除文件或文件夹跟目标文件或目标文件夹没有关系,而是跟所在目录有关系!!!

复制代码
[lin@VMCentos7 ~]$ ll  # 查看文件所在目录的文件夹信息
drwxrwxr-x 4 lin lin  4096 Mar 29 18:41 lesson1  

# 或者
[lin@VMCentos7 lesson1]$ ll -d # 查看文件夹/目录信息
drwxrwxr-x 4 lin lin 4096 Mar 29 18:41 . # 当前目录

查看所在目录的详细信息可以看到,此文件是普通用户创建的,所对应的拥有者有读写执行权限,因此可以删除此目录下的文件。

复制代码
[lin@VMCentos7 lesson1]$ cd ..
[lin@VMCentos7 ~]$ chmod u-w lesson1 # 取消写权限
[lin@VMCentos7 ~]$ ll
dr-xrwxr-x 4 lin lin  4096 Mar 29 18:41 lesson1
[lin@VMCentos7 ~]$ cd lesson1 # 进入目录
[lin@VMCentos7 lesson1]$ ls
dir2  dir3  file1.txt  file2.txt  file3.txt  root2.txt  root3.txt
[lin@VMCentos7 lesson1]$ rm -f file2.txt # 删除file2.txt文件,但是不允许删除
rm: cannot remove 'file2.txt': Permission denied

当我们把目录的写权限取消后,就不能删除目录下的文件了,因此删除一个文件或者文件夹需要的是此目录下的写权限。

结论:

★ 能否删除一个文件或者文件夹( rm ),与当前目录的写权限有关。

★ 能否查看当前目录下的信息( ls ),与当前目录的读权限有关。

★ 能否进入此目录( cd ),与当前目录的执行权限有关。

补充指令

file指令:

功能说明:

辨识文件类型。

语法:

file 选项 文件或目录...

常用选项:

-c 详细显示指令执行过程,便于排错或分析程序执行的情形。

-z 尝试去解读压缩文件的内容。

2、粘滞位

在我们日常学习和工作中,很可能一个文件需要给多人查看,那么在Linux中,由多个用户建立一个共享文件,给大家共同访问,如何做到呢???

首先我们创建的文件不能在各自的家目录,因为家目录其他人是无法进入的。

所以我们只能在系统的非用户目录下创建,因此我们可以在root的家目录下创建共享目录。

复制代码
[lin@VMCentos7 ~]$ cd / # 进入root家目录
[lin@VMCentos7 /]$ sudo mkdir share   #使用root权限创建共享目录
[sudo] password for lin: 
[lin@VMCentos7 /]$ ll  # 查看目录详细信息
drwxr-xr-x    2 root root  4096 Mar 30 13:30 share
[lin@VMCentos7 /]$ sudo chmod o+w share  # 给目录的其他用户添加写权限
[lin@VMCentos7 /]$ ll
drwxr-xrwx    2 root root  4096 Mar 30 13:30 share 

注意:为了达到所有用户都能够访问该目录,因此需要将其他用户的所有权限打开。

复制代码
[lin@VMCentos7 /]$ cd /share        # 进入该共享目录
[lin@VMCentos7 share]$ touch test.c # 用lin用户创建文件和文件夹
[lin@VMCentos7 share]$ mkdir dir1
[lin@VMCentos7 share]$ echo "hello Linux" > test.c # 将文件输入数据
[lin@VMCentos7 share]$ cat test.c  # 查看文件内容
hello Linux
[lin@VMCentos7 share]$ su jkl # 切换用户成jkl
Password: 
[jkl@VMCentos7 share]$ ll  # 查看目录信息
total 8
drwxrwxr-x 2 lin lin 4096 Mar 30 13:37 dir1
-rw-rw-r-- 1 lin lin   12 Mar 30 13:37 test.c
[jkl@VMCentos7 share]$ cat test.c # 查看文件信息
hello Linux
[jkl@VMCentos7 share]$ rm -f test.c # 删除lin用户创建的文件
[jkl@VMCentos7 share]$ ls # 确实删除了
dir1

根据上面的命令我们可以知道,虽然达到了共享目录的目的,但是张三创建的文件能被李四删除,这似乎不是我们想要的预期结果,那么如何解决这个问题呢???

为了解决这个不科学的问题, Linux引入了粘滞位的概念。

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

复制代码
[jkl@VMCentos7 /]$ sudo chmod +t share # +t前面有空格
[jkl@VMCentos7 /]$ ll
drwxr-xrwt    3 root root  4096 Mar 30 13:39 share # 确实有了t权限

[jkl@VMCentos7 /]$ cd share
[jkl@VMCentos7 share]$ ll
drwxrwxr-x 2 lin lin 4096 Mar 30 13:37 dir1  # 由lin创建的目录
[jkl@VMCentos7 share]$ rm -rf dir1 # 不能被jkl删除
rm: cannot remove 'dir1': Operation not permitted

根据上面命令可以知道,粘滞位确实解决了该问题。

关于权限的总结

★ 目录的可执行权限是表示你可否在目录下执行命令。

★ 如果目录没有 x 权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)。

★ 而如果目录具有 x 权限,但没有 r 权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

总结

本篇博客就结束啦,谢谢大家的观看,如果公主少年们有好的建议可以留言喔,谢谢大家啦!

相关推荐
江湖有缘10 分钟前
Docker实战 | 使用Docker部署Donetick任务与家务管理应用
运维·docker·容器
实心儿儿19 分钟前
Linux —— 应用层协议HTTP
linux·网络·http
流星白龙23 分钟前
【Docker】4.NameSpace空间隔离实战
java·运维·docker
有续技术1 小时前
哈斯 (Haas) 机床 IP、端口号配置内容总结
运维·服务器
小张同学a.1 小时前
LAMP架构2
linux·运维·网络·架构·负载均衡
千河殇 多想和她1 小时前
如何在Reaonix中使用CodeGraph以及CodeGraph效果实测经验分享
linux·运维·ubuntu
VortMall1 小时前
出海引流运维双升级|VortMall微服务商城系统v1.3.12 升级更新
运维·微服务·facebook
心念枕惊1 小时前
新写了个直播录制工具,可录制抖音快手斗鱼直播
运维·服务器·数据库
躺不平的理查德2 小时前
CMAKE备忘录
linux·运维·服务器
9624562 小时前
跨域与私有网络访问限制排查实录
运维·服务器·网络