权限解释
在文件使用ll命令进行查看时,会有很多信息显示
其中第一个字母,描述的是这个文件类型
参数 | 含义 |
---|---|
- | 文件 |
d | 目录 |
l | 链接,(类似于Windows中的快捷方式) |
c | 字符型设备 |
b | 块设备 |
n | 网络设备 |
后面 三组三位的码
参数 | 含义 |
---|---|
r | 读取 |
w | 写 |
x | 执行 |
三组码数量固定位置固定,如果没有该权限会显示为-
分别代表,|文件所有者权限|同组成员权限|其他用户权限|
那个777怎么来的
其是三位读写权限代表二进制数,而后转换成八进制来的
权限 | 二进制 | 八进制 | 描述 |
---|---|---|---|
— | 000 | 0 | 没有任何权限 |
–x | 001 | 1 | 只有执行权限 |
-w- | 010 | 2 | 只有写入权限 |
-wx | 011 | 3 | 有写入与执行权限 |
r– | 100 | 4 | 只有读取权限 |
r-x | 101 | 5 | 有读取与执行权限 |
rw- | 110 | 6 | 有读取与写入权限 |
rwx | 111 | 7 | 有全部的权限 |
结合不同组,每一位代表不同的用户属性
例如777 权限即 所有的用户都有全部的权限。
特殊权限
t权限
在 Linux 中,文件权限中的 “t” 表示粘着位(sticky bit)。粘着位可以应用于目录或可执行文件。
当粘着位应用于目录时,它具有以下作用:
- 只有对目录有写权限的文件的所有者才能删除目录下的文件,即使其他用户对这些文件有写权限。
- 只有对目录有写权限的文件的所有者才能重命名目录下的文件,即使其他用户对这些文件有写权限。
通过设置粘着位,可以确保只有文件的所有者才能删除或重命名自己的文件,防止其他用户意外地删除或更改文件。
s权限
文件权限中的 “S” 表示特殊权限位(setuid/setgid)。
- setuid (S 或者 s):当 S 位设置在一个可执行文件的所有者权限上时,它意味着该文件在执行时将以拥有者的身份运行,即设置了该文件的有效用户ID为文件所有者的用户ID。大写的 “S” 表示文件的所有者没有执行权限,小写的 “s” 表示文件的所有者具有执行权限。
- setgid (S 或者 s):当 S 位设置在一个可执行文件的群组权限上时,它意味着该文件在执行时将以群组的身份运行,即设置了该文件的有效组ID为文件所属群组的群组ID。大写的 “S” 表示群组没有执行权限,小写的 “s” 表示群组具有执行权限。
设置 setuid 和 setgid 位主要是为了让普通用户在执行特定程序时暂时获得更高的权限。常见的例子是 /bin/passwd
命令,它允许普通用户更改自己的密码,但是需要 root 权限才能修改 /etc/shadow
文件。通过设置 passwd
命令的可执行文件的 setuid 位,普通用户可以在执行 passwd
命令时以 root 身份修改密码,而无需输入 root 密码。
其他特殊权限
#查看特殊权限
lsattr filename
#添加特殊权限
chattr [+/-][属性] 文件名
lsattr参数
参数 | 解释 |
---|---|
-R | 递归地列出目录及其内容的属性。 |
-V | 显示版本信息 |
-a | 列出目录中所有文件和目录,包括以".“为名称开头字符的额外内建,现行目录”.“与上层目录”…" |
-d | 像列出其他文件一样列出目录,而不是列出它们的内容。 |
-v | 显示文件或目录版本。 |
chattr参数
只有root能够添加
参数 | 含义 |
---|---|
-R | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-f | 抑制大多数错误消息。 |
-V | 详细描述chattr的输出并打印proqram版本。 |
-v | 设置文件活目录的版本。 |
可添加权限:
- a:让文件或目录仅提供附加用途,只允许以追加方式读写文件
- A:当文件被访问时,它的atime(访问时间)记录不会被修改。这为系统避免了一定数量的磁盘I/o。
- c:将文件或目录压缩后存放。文件会被内核自动压缩到磁盘上。从这个文件读取未压缩的数据。对该文件的写入会在将日期存储到磁盘之前压缩它们。
- C:属性设置为“C”的文件将不会copy-on-write(写时复制)。此属性仅在支持copy-on-write的文件系统上支持。
- d:将目录排除在倾倒操作之外。
- D:目录被修改时,这些修改被同步写入磁盘;这相当于应用于文件子集的“dirsync”挂载选项。
- e:表示文件使用区段来映射磁盘上的块。不能使用chattr移除。
- E:用来表示压缩文件有压缩错误。虽然可以用Isattr显示,但chttr不能设置或重置它。
- h:表示文件以文件系统块大小为单位存储其块,而不是以扇区为单位,并表示该文件大于2TB。虽然可以通过Isattr显示,但chattr不能设置或重置
- i:文件不能被修改:不能被删除或重命名,不能创建到该文件的链接,也不能向该文件写入数据。
- I:文件或目录使用散列树对目录进行索引。不能使用chattr设置或重置它,但可以用lsattr显示。
- j:如果文件系统是用data=ordered或data=writeback选项挂载的,那么带有“j”属性的文件在被写到文件本身之前,它的所有数据都被写到ext3或ext4日志中。当用“data-journal”选项挂载文件系统时,所有文件数据都已经被记录,这个属性没有作用。
- N:表示该文件将数据内联存储在inode本身中。不能使用chattr来设置或重置,但可以通过lsattr来查看。
- s:允许一个文件被安全地删除文件被删除时,它的块被归零并写回磁盘。
- S:即时更新文件或目录。文件被修改时,这些修改将同步写入磁盘。
- t:带有“t”属性的文件在与其他文件合并的文件末尾不会有部分块片段(对于那些支持tail-merging的文件系统)。这是
对于像LILO这样直接读取文件系统且不支持tail-merging的文件的应用程序来说是必需的。 - T:目录将被视为目录层次结构的顶部。这是给块分配器的一个提示由ext3和ext4使用,该目录下的子目录是不相关的,因此为了分配目的应该分散开来。
- u:预防意外删除。若文件删除,系统会允许你在以后恢复这个被删除的文件
- X:可以直接访问压缩文件的原始内容。不可以使用chattr重置或设置,可以使用lsattr显示。
局限性
ext2,ext3和ext4文件系统不支持’c’,'s’和’u’属性
在当前的主线Linux内核中实现。设置’a’和’i’属性将不会影响写入现有文件描述符的能力。
"j"选项仅对ext3和ext4文件系统有用。
"D"选项仅在Linux内核2.5.19及更高版本上有用。