Linux文件权限详解

基本权限

Linux 系统内的权限身份:
u:拥有者(owner)
g:群组(group)
o:其他人(others)

常用的基本权限:
r:读权限,用户可以读取文档的内容,如用 cat、more 等命令来查看
w:写权限,用户可以编辑,删除
x:该目录具有可以被系统执行的权限

例如:当前 test.txt 文件权限如下:

# ls -l test.txt 
-rw-r--r--. 1 root root 0 1月  31 18:01 test.txt

可以看到目前 test.txt 文件权限为 644,也就是该文件拥有者 root 有读权限和写权限,该文件群组只有读权限,该文件的其他人也只有读权限。

目前给 test.txt 文件的群组权限添加可写权限,则可以有两种不同方式来设置权限,分别如下:

# chmod 664 test.txt

或者

# chmod g+w test.txt

增加 test.txt 文件群组写权限设置后,查看权限如下:

# ls -l test.txt 
-rw-rw-r--. 1 root root 0 1月  31 18:03 test.txt

特殊权限

s 权限

设置使文件在执行阶段具有文件所有者的权限,相当于临时拥有文件所有者的身份,典型的文件是 passwd。如果一般用户执行该文件, 则在执行过程中, 该文件可以获得 root 权限, 从而可以更改用户的密码。

# ls -al /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

设置s权限的两种方式:

通过字符模式设置 s 权限。
也可以使用绝对模式进行设置:
设置suid:将相应的权限位之前的那一位设置为4;
设置guid:将相应的权限位之前的那一位设置为2;
两者都置位:将相应的权限位之前的那一位设置为4+2=6。

例如: 一个文件原来的权限为 664,针对用户加上 s 权限,可以使用以下两种不同的方式来给用户添加 s 权限:

# chmod u+s filename

命令选项中的 u 表示的是文件属主用户,s 表示的就是 s 权限。

另一种给用户添加 s 权限的方式:

# chmod 4664 filename

4664 中的第一位数字 4 表示的是给当前文件的所属用户添加 s 权限。如果是给组添加 s 权限,那么第一位数字则应该是 2。

注意:在设置 s 权限时文件属主、属组必须先设置相应的 x 权限,否则 s 权限并不能正真生效(chmod 命令不进行必要的完整性检查,即使不设置 x 权限就设置 s 权限,chmod 也不会报错,当我们执行 ls -l 命令时看到的是 rwS,大写 S 说明 s 权限未生效)。

t 权限

要删除一个文档,不一定要有这个文档的写权限,但一定要有这个文档的上级目录的写权限。也就是说,即使没有一个文档的写权限,但有这个文档的上级目录的写权限,也能够把这个文档给删除,而假如没有一个目录的写权限,也就不能在这个目录下创建文档。

怎样才能使一个目录既能够让任何用户写入文档,又不让用户删除这个目录下他人的文档,t 权限就是能起到这个作用。t 权限一般只用在目录上,用在文档上起不到什么作用。

在一个目录上设置了 t 权限位后,(如 /home,权限为 1777)任何用户都能够在这个目录下创建文档,但只能删除自己创建的文档(root 除外),这就对任何用户能写的目录下的用户文档启到了保护的作用。

例如:目录原来权限为 755,设置 t 权限也是两种方式,分别如下:

# chmod +t directory
# chmod 1755 directory

默认权限

在用户创建文件目录时,系统会自动赋予这个文件目录一个默认的权限。这个默认值就由 umask 来控制。默认情况下的 umask 是 0022,第一位 0 是留给特殊权限。后三位分别对应了 owner,group 和 others。

需要注意的是,创建的新文件和新目录的 umask 基准值不一样。对于用户创建的文件,基准值是 666,所以在 umask 值是 022 的时候,创建的新文件默认的权限是 644。而用户创建新目录时基准值是 777,所以在 umask 值是 022 的时候,新创建的目录默认权限是 755。

示例如下:
查看 umask 值

# umask
0022

分别创建目录和文件

# mkdir test
# touch test.txt

查看新创建的目录和文件的权限,能够看到创建的 test 目录权限是 755,test.txt 目录权限是 644。

# ls -l
drwxr-xr-x.  2 root root       6 1月  31 19:02 test
-rw-r--r--.  1 root root       0 1月  31 19:02 test.txt

隐藏权限

文件的隐藏属性对系统有很大的帮助,尤其是系统安全性方面。因为默认用 ls 命令是看不到对文件设置的隐藏属性,所以查看和设置只能通过 lsattr 命令和 chattr 命令。
查看默认文件的隐藏权限:

# lsattr
---------------- ./test
---------------- ./test.txt

可以看到隐藏权限没有设置,通过使用 chattr 命令设置隐藏权限,常见设置的隐藏权限为:
a:只能追加文件或目录,不能删除
i:不能修改文件或目录属性以及内容
示例:

# chattr +a test.txt
# chattr +a test
# rm -rf test/
rm: 无法删除"test/b": 不允许的操作
# rm -rf test.txt
rm: 无法删除"test.txt": 不允许的操作
# mkdir test/abc
# echo "abc" >> test.txt 
# cat test.txt 
abc
# lsattr
-----a---------- ./test
-----a---------- ./test.txt
点赞
  1. 千瞬说道:

    chmod -R 777 /dir

发表评论

电子邮件地址不会被公开。 必填项已用*标注