OS9.【Linux】基本权限(下)

目录

1.默认权限

掩码

修改权限掩码

目录的权限说明

r权限

w权限

x权限

结论

家目录权限

2.共享目录

粘滞位t


承接OS8.【Linux】基本权限(上)文章

1.默认权限

创建用户时拥有者所属组都是该用户,而且对其他人没有任何权限

掩码

新建文件new.txt1和目录folder后,立刻查看它们的权限:

显示目录的默认权限:775

显示普通文件的默认权限:664

思考:为什么会出现以上默认的权限?

其实:系统提供普通文件的默认权限是666,而目录的默认权限是777,664与666不同的原因和775和777不同的原因和权限掩码umask有关

输入umask命令:

bash 复制代码
umask

只看后3位002,最左侧的0不管,给出以下规则:

在umask出现的权限(二进制位为1)不会在最终的文件权限中出现,而umask中未出现的权限(二进制位为0)保持起始的权限位

推测最终权限是掩码和起始权限通过某运算规则得到的,

这个运算规则是:最终权限=原始权限&(~掩码)

也可以变形为**~(~原始权限|掩码),使用德摩根定律**

写一个简单的程序验证下:

cpp 复制代码
#include <stdio.h>
int main()
{
    printf("%d", 666 & (~002));
    return 0;
}

运行结果:

cpp 复制代码
#include <stdio.h>
int main()
{
    printf("%d", ~(~666|002));
    return 0;
}

运行结果:

修改权限掩码

例如修改成0123:

cpp 复制代码
umask 0123

目录的权限说明

使用控制变量法,逐个尝试,设目录folder里面有test.txt文件

r权限

先禁掉w和x权限:

cpp 复制代码
chmod u+r-wx,g+r-wx,o+r-wx folder

查看目录中的文件:只知道文件名,但不知道文件的权限

无法查看test.txt的内容:

无法向test.txt写入内容写入内容:

不允许进入目录:

w权限

先禁掉r和x权限:

cpp 复制代码
chmod u+w-rx,g+w-rx,o+w-rx folder

无法查看目录中的文件:

无法向test.txt写入内容写入内容:

不允许进入目录:

x权限

先禁掉r和w权限:

cpp 复制代码
chmod u+x-rw,g+x-rw,o+x-rw folder

无法查看目录中的文件:

尝试向test.txt写入内容:可以写入,能打印到显示器上

可以进入目录里:

结论

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

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

可写权限w: 如果目录没有可写权限, 则无法在目录中创建、更改或删除文件.

-->一个文件是否能被删除,不由文件本身决定,而由其所处的目录决定

家目录权限

普通用户的家目录权限是700,也就意味着一个普通用户无法访问另一个普通用户的目录,但root除外,其有最高权限

2.共享目录

如果多个普通用户想共享一个目录,则这个共享目录不能在任何一个人的家目录下

现以root身份创建共享目录shared:

粘滞位t

为了防止其他用户删除目录中的文件,

1.shared目录中,对other去掉权限w是不能解决问题的,由上述对w权限的分析,这样就无法创建文件,

2.缺点:只能以root身份建立共享目录,且只有以root身份才能增删改查,例如上方提到的shared目录

解决方法:根目录下有一个自带的tmp目录**,可以在其中对用户各自的文件进行增删改查操作,其中权限中的t为粘滞位(可以通过chmod o+t设置),是特殊的x权限,当前认为: 只有root和拥有者能删除文件,其他人都不允许**

例如以guest身份创建一个test.txt,切换为zhang身份却发现无法删除test.txt

相关推荐
愚润求学1 小时前
【Linux】mmap文件内存映射
linux·运维·服务器·开发语言·c++
就是我1 小时前
轻松管理Linux定时任务:Cron实用教程
linux·后端
hgdlip1 小时前
换ip是换网络的意思吗?怎么换ip地址
服务器·网络·tcp/ip
hope_wisdom2 小时前
Linux系统编程之共享内存
linux·共享内存·linux系统·linux编程
Ealrang2 小时前
Linux分区总结
运维
shmily_ke2 小时前
如何将vue2使用npm run build打包好的文件上传到服务器
服务器·前端·npm
江湖有缘3 小时前
【Docker管理工具】部署Docker管理面板DweebUI
运维·docker·容器
阿巴~阿巴~3 小时前
Git 全平台安装指南:从 Linux 到 Windows 的详细教程
linux·windows·git
摸鱼仙人~3 小时前
Maven 安装与配置指南(适用于 Windows、Linux 和 macOS)
linux·windows·maven
linux行者3 小时前
Linux 资源限制(进程级,用户级,系统级)
linux·运维·服务器