3

linux 基础(2)文件权限及其修改 - Ofnoname

 1 year ago
source link: https://www.cnblogs.com/ofnoname/p/17053309.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

文件的权限属性

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

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

image

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

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的群组为 rootchgrp -R mygroup myfolder # 修改myfolder和其中所有文件的群组

chown

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

chown root a.cpp # 修改a.cpp的群组为 rootchown myuser:mygroup a.cpp # 修改a.cpp所属者为myuser,群组为mygroupchown :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的权限都是rwxchmod 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-xchmod 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-xchmod u+s a.out # SBIT

umask 默认属性

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

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

$ umask0022$ touch f1$ mkdir f2$ ls-d f1 f2-rw-r--r-- 1 ofnoname ofnoname 0 1月 16 17:14 f1drwxr-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可以列出这些隐藏属性。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK