文件的权限属性

在 linux 中,每个文件都有唯一的“所属者”(user)和“所属群组”(group)。owner 和 group 都对文件有特殊的权限

输入ls -l,就可以详细查看每个文件的权限属性。

我们可以看到,用户名和群组名可以是相同的。一个群组可以只包含一个用户,也可以包含多个用户。

rwx 权限

ls -l的第一行一定是一个长度为10的字符串:drwxr-xr-x

  • 其中第1位表明文件的类型,常见如-表示一般文件,d表示目录,l表示链接;

  • 第 2-4 位表示所属者的权限,形如rwx,r 代表可读,w 代表可写,x 代表可执行。

    可读代表可以打开文件查看内容,可写代表可以修改文件内容,可执行则代表这个文件可不可以装载到内存中执行。在 linux 中,文件能否装载执行不取决于后缀名,而取决于有无 x 权限,即使让给一个文本文件加上 x 权限后,你也能用命令执行它(虽然执行结果肯定是失败)。

  • 第 5-7 为表示所属群组的权限,也就是这个文件所属群组里的人(除了 user)对他的权限。r-x表示可读可执行,但不可写。

  • 第 8-10 为其他人(others)的权限,也就是除了 user 和 group 中用户以外的其他人。

而这些权限都不受 root 限制,root 就是万能的神,可以随意操作任何文件。

更改文件的权限属性

更改文件权限的命令有chgrp, chown 和 chmod。这三个命令往往需要 root 来执行。

chgrp

chgrp 即“change group”,可以修改文件的群组:

chgrp root a.cpp # 修改a.cpp的群组为 root
chgrp -R mygroup myfolder # 修改myfolder和其中所有文件的群组

chown

chown 改变文件的所属者。同时 chown 也可以改变文件的群组,兼任的 chgrp 的功能。

chown root a.cpp # 修改a.cpp的群组为 root
chown myuser:mygroup a.cpp # 修改a.cpp所属者为myuser,群组为mygroup
chown :mygroup a.cpp # 只修改a.cpp群组为mygroup

chmod

chmod 修改文件的权限(即那个长度10的字符串),有两种使用方式。

常用的用法是将每一个rwx的r记为4、w记为2,x记为1,这样rwx就是一个0-7之间的数字,用三个数字就组成了文件的权限。比如 5 代表 r-x,7 代表 rwx,而 0 代表 ---。

chmod 777 a.cpp # a.cpp对 owner group others的权限都是rwx
chmod 755 a.cpp # a.cpp对 owner 的权限是rwx,对 group 和 others 的权限是r-x

除此之外,也可以直接用 rwx 字符串来修改权限,u 代表 user,g 代表 group,o 代表 others,a 则代表全部。加号,减号与等号都可以赋值。

chmod u=rwx,go=rx a.cpp # u修改为rwx g和o修改为r-x
chmod a+x a.cpp # 所有权限全部加上x,r和w权限不变
chmod a-w a.cpp # 所有权限全部去掉w

目录的 rwx 权限

之前提到的 rwx 权限都是针对文件了,那对于目录来说,rwx的意义会有哪些不同呢?在 linux 里,我们不要只目录理解成“文件夹”,而把目录也当成一种特殊的文件,这个文件的内容就是目录下的文件信息,这样就好理解了。

对于目录来说,r 代表你能否读取目录下的文件列表(即是否可以用 ls 列出里面的文件);w 代表是否可以更改目录下的文件列表(也就是在目录下新建,删除,移动和更名),x 则代表能否进入这个目录。

目录的权限非常重要!如果我的主目录下有一个 root 所属的文件夹:

drwxr--r-- 2 root root 4096  1月 16 12:45 root/

“我”对于这个目录是 others,因此只有 r 权限。但我不能cd root,也不能打开 root 下的文件,因为没有 x 权限。所以无权操作目录,只有 r 没有 x的目录就像一个不能运行的二进制文件。r 权限没有起到实质作用。

另一方面,假设如果我的主目录下有一个 root 所属的文件:

drwx------ 2 root root 4096  1月 16 12:45 rootfile

“我”对于这个目录是 others,因此只有没有权限。但我对~目录有完整的rwx权限,所以虽然我不能打开,也不能修改文件,我却可以直接删掉他!文件能否打开修改取决于自己的权限,但能否被移动删除等则取决于目录的权限。

rws 和 rwt 特殊权限

我们查看/tmp/usr/bin/passwd的权限,就会发现原来还有rwsrwt权限

drwxrwxrwt 3 root root 4096  1月 16 15:42 /tmp
-rwsr-xr-x 1 root root 59976 3月 14 2022 /usr/bin/passwd

SUID 权限

位于所有者权限的 x 替换为 s 就叫做SUID权限,这个权限具有以下的性质:执行程序的人需要有 x 权限才能执行(那是废话),但在执行途中将获得 owner 的权限。

这个权限有什么意义呢?就以/usr/bin/passwd作为例子,他是用来修改密码的,而密码信息保存在/etc/shadow里面,而 shadow 储存着用户信息这样机密的内容,他的权限是"-rw-r-----",也就是说我连打开都不行。可用户修改密码也并不需要 root 权限。这就是因为 passwd 命令是 rws,当我执行他时,我就暂时获得了 root 的权限,可以修改密码。

另一个例子就是 sudo 命令,用 ls 查看 sudo ,它的权限是"rwsr-xr-x",任何用户都可以执行他,在执行他的期间就暂时获得了 root 权限。sudo 这个命令本身就是理解 SUID 的最佳方式

SGID 权限

位于所属群组权限的 x 替换为 s 就叫做 SGID 权限,与 SUID 相似,执行程序的人可以获得群组的支持。

SGID 也可以用于目录,当进入一个 SGID 的目录,在该目录下新建的所有文件都会以目录的群组作为群组。

SBIT 权限

SBIT 权限则仅用于目录。others 权限为rwt表示 SBIT 权限,在 SBIT 的权限的文件夹里,所有人都可以创建文件,但创建的文件只有自己才能删除,其他用户无法删除。/tmp就是 SBIT 应用的典型,所有人都可以创建文件,但只能删除自己的文件,而不能删除其他用户创建的。

这三个权限怎么设置呢?记 SUID, SGID, SBIT 分别为 421,又可以得到一个 0-7 的数字,把这个数字加在原来的3位数字前,变成4位就可以了。或者通过字符串设置也可以。

chmod 4755 a.out # rwxr-xr-x
chmod u+s a.out # SBIT

umask 默认属性

当我们新创建一个文件,他的 user 和 group 默认都是你自己,那默认的 rwx 权限是什么呢?这就取决于用户的 umask。

输入umask,可以得到一个4位字符串:

$ umask
0022
$ touch f1
$ mkdir f2
$ ls-d f1 f2
-rw-r--r-- 1 ofnoname ofnoname 0 1月 16 17:14 f1
drwxr-xr-x 2 ofnoname ofnoname 4096 1月 16 17:14 f2

0022 表示的的是“被拿掉的权限”,022自然表示“user 不拿权限,而 group 和 other 默认被去掉 w 权限”。目录文件默认是777,因此结果是 rwxr-xr-x,而普通文件默认是666(没有 x),因此结果是rwxr-xr-x。

*文件目录的隐藏权限

(摘自《鸟哥的linux私房菜 基础篇》)

rwx 权限是所有 linux 都拥有的基础权限。除此之外,rwx在很多时候还不够满足需求,特定的文件系统还支持很多其他有用的属性。

chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设置一定,且仅有后面接的参数
A :当设置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,
可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)
S :一般文件是非同步写入磁盘的(原理请参考[前一章sync](../Text/index.html#sync)的说明),如果加上 S 这个属性时,
当你进行任何文件的修改,该更动会“同步”写入磁盘中。
a :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性
c :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,
但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
d :当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录)不会被 dump 备份
i :这个 i 可就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”
对于系统安全性有相当大的助益!只有 root 能设置此属性
s :当文件设置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,
所以如果误删了,完全无法救回来了喔!
u :与 s 相反的,当使用 u 来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,
可以使用来救援该文件喔!

注意这些属性并非在任何系统上都有支持。lsattr可以列出这些隐藏属性。

linux 基础(2) 文件权限及其修改的更多相关文章

  1. Linux下查看文件权限、修改文件权限的方法

    查看权限命令查看目录的相关权限可以采用命令ls -lD,或者直接用ls -la 如 ls -l www.jb51.net  //这里表示查看www.jb51.net目录 修改权限命令 chmod 77 ...

  2. Linux基础命令-文件与目录

    Linux基础命令-文件与目录 参考:<鸟哥linux私房菜>五-七章,17/12/5复习,18/01/15复习 文件权限 rwx421:用户,用户组,其他 umask查看默认权限:000 ...

  3. linux中的文件权限chmod

    linux中的文件权限chmod ​ 还是GPU集群那点事儿,集群之间磁盘互相挂载,普通用户也可以操作/cu02_nfs./cu04_nfs文件夹,这就牵扯到权限的问题,去google发现所谓的777 ...

  4. Linux用户及文件权限管理

    Linux用户及文件权限管理

  5. 【Linux】目录文件权限的查看和修改【转】

    转载自:http://zhaoyuqiang.blog.51cto.com/6328846/1214718 ============================================== ...

  6. Linux】目录文件权限的查看和修改【转】

    转载自:http://zhaoyuqiang.blog.51cto.com/6328846/1214718 ============================================== ...

  7. linux用户创建删除以及文件权限查看修改

    一. 1.查看用户 命令如下:whoami 2.创建用户 创建用户命令:sudo adduser hello 超级用户是 root 删除用户名命令:sudo deluser hello --remov ...

  8. linux 基础 文件系统 用户权限

    描述Linux系统的启动过程? 1.开机自检 BIOS 2.MBR引导 3.GRUB菜单 4.加载内核 5.运行init进程 6.从/etc/inittab读取运行级别 7.根据/etc/rc.sys ...

  9. linux基础指令以及权限管理

    基础指令 #打印字符串 echo hello linux #将file1 和 file2粘合在一起,打印到标准输出流 cat file1 file2 标准输入输出 标准输入,stdin,即键盘.鼠标输 ...

  10. Day005_Linux基础之文件权限

    test.sh  举例: [oldboy@luffy001 ~]$ ls -l test.sh -rw-r--r-- 1 oldboy ops 0 Nov 14 10:42 test.sh  该文件权 ...

随机推荐

  1. sql语法巧用之not取反

    数据库的重要性和通用性都不用说了,什么sql的通用性,sql优化之类的也不必说了,咱们今天来聊聊另一个有意思的话题:如何取一个筛选的反面案例. 1. 举几个正反案例的例子 为了让大家理解我们的假设场景 ...

  2. NLP之基于Seq2Seq的单词翻译

    Seq2Seq 目录 Seq2Seq 1.理论 1.1 基本概念 1.2 模型结构 1.2.1 Encoder 1.2.2 Decoder 1.3 特殊字符 2.实验 2.1 实验步骤 2.2 算法模 ...

  3. 18.drf request及源码分析

    REST framework的 Request 类扩展了Django标准的 HttpRequest ,添加了对REST framework请求解析和身份验证的支持. 源代码片段: class Requ ...

  4. JUC中的AQS底层详细超详解

    摘要:当你使用java实现一个线程同步的对象时,一定会包含一个问题:你该如何保证多个线程访问该对象时,正确地进行阻塞等待,正确地被唤醒? 本文分享自华为云社区<JUC中的AQS底层详细超详解,剖 ...

  5. mlflow详细安装部署

    1.安装docker # 安装工具 sudo yum install -y yum-utils # 添加yum仓库配置 sudo yum-config-manager --add-repo https ...

  6. Scrapy 发送Request Payload

    Scrapy 发送Request Payload 首先要打开 F12 进入调试模式 然后 查看是用什么方法获取的 如果是Json: 1. json.dumps 转化成Json yield Reques ...

  7. 嵌入式-C语言基础:数组得初始化

    #include<stdio.h> int main() { int a[10]; int size=sizeof(a)/sizeof(a[0]);//计算数组得大小 for(int i= ...

  8. C#与Halcon联合编程之用PictureBox控件替代HWindowControl控件

    在使用HALCON和C#联合编程,有时候要使用halcon的HWindowControl控件,但是我发现,HWindowControl的图片显示控件,不能使用GDI+绘制ROI,不知道为什么,反正我测 ...

  9. 关于windows上开启远程桌面连接不上的问题解决

    解决办法 启用远程桌面连接(计算机-属性-远程设置) 选择第二个:允许运行任意版本远程桌面 关闭防火墙(或者给远程桌面添加端口3389放行也可以) 创建用户以及密码 这里注意,一定要建立密码,只有账号 ...

  10. Selenium4+Python3系列(十) - Page Object设计模式

    前言 Page Object(PO)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一.在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一定的 ...