欢迎光临
我们一直在努力

Linux操作系统系列之文件权限

建站超值云服务器,限时71元/月

Linux 继承自 Unix,自设计之初就是多用户的系统。我们用实际的例子说明一下。

~/test$ ls -l

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b

显示的信息分别表示(按列): 文件属性、链接数(inode)、文件拥有者(owner)、文件所属用户组(group)、文件大小、最新修改日期、文件(目录)名。

1. 文件属性

文件或目录有 10 个基本属性,第 1 个表示类型,后 9 个分为三组,分别表示 owner、group、others 的执行属性。

文件类型: [d] 目录; [-] 文件; [l] 链接文件; …
执行属性: [r] 可读; [w] 可写; [x] 可执行。

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt

表示文件拥有者(owner)可读写(rw)、用户组(group)和其他用户(other)只读(r)。属性还可以用数字表示 r = 4, w = 2, x = 1,比如 rw-r–r– = 644。

~/test$ ls -l

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b

~/test$ chmod 664 ./a.txt

~/test$ ls -l

-rw-rw-r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b

当然,我们也可以用更直观的参数。

~/test$ chmod a+w a.txt # 全部设置为可写

~/test$ ls -l

-rw-rw-rw- 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b

~/test$ chmod ug=rw,o=r a.txt # 拥有人和组可读写, 其他只读

~/test$ ls -l

-rw-rw-r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b

~/test$ chmod u=rw,g-w a.txt # 拥有人可读写, 组移除写

~/test$ ls -l

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b

参数说明:

(1) u = owner; g = group; o = other; a = u + g + o
(2) [=] 设置; [-] 移除; [+] 增加。

对于目录而言, r 表示读取目录结构的权限,w 表示可以在目录里创建、删除、移动文件和子目录,x 表示可以进入该目录。

~/test$ ls -l

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b

~/test$ chmod a-x ./b # 移除 x

~/test$ ls -l

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drw-r–r– 2 yuhen yuhen 4096 2009-08-03 20:08 b

~/test$ cd b # 无法进入该目录

-bash: cd: b: Permission denied

~/test$ chmod a+x b # 恢复

~/test$ ls -l

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b

~/test$ cd b # 正确进入

chmod 支持 -R 参数对目录下所有文件和子目录进行递归修改。

除了上述的基本属性外,还可以用 chattr 和 lsattr 设置和显示隐藏属性。

#p#副标题#e#2. 特殊属性

特殊权限包括 SUID、SGID、SBit (Sticky Bit)。

设置 SUID 的文件可以让一般用户在执行操作时拥有该文件拥有人(owner)的权限。/usr/bin/passwd 就是一个例子,任何用户都可以通过该程序修改 /etc/passwd 中的密码。

~/test$ ls -l /etc/passwd # owner = root, group = root

-rw-r–r– 1 root root 1503 2009-07-19 19:41 /etc/passwd

~/test$ ls -l /usr/bin/passwd # 拥有 SUID 属性(s),因此执行该程序的时候拥有 root 权限。

-rwsr-xr-x 1 root root 37084 2009-04-04 13:49 /usr/bin/passwd

SGID 和 SUID 类似,表示执行的时候拥有文件或目录用户组的权限。而 SBit 只对目录有效,如过用户拥有该目录 wx 权限,则其创建的文件和子目录只有其他自己和 root 才能删除。

我们一样可以用 chmod 设置特殊权限。SUID = 4, SGID = 2, SBit = 1。

~/test$ chmod 4644 a.txt # SUID, rw, r, r

~/test$ ls -l # 注意 owner 上的大写字母 S

-rwSr–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 b

~/test$ chmod 2644 a.txt # GUID, rw, r, r

~/test$ ls -l # 注意 group 上的大写字母 S

-rw-r-Sr– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 b

~/test$ chmod 1755 b # SBit, rwx, rx, rx

~/test$ ls -l # 注意 other 上的小写字母 t

-rw-r-Sr– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-t 3 yuhen yuhen 4096 2009-08-04 00:09 b

我们注意到特殊权限会写在 x 的位置,那么如果同时设置 x 和特殊权限会有什么不同呢?

~/test$ chmod 777 a.txt 设置属性 rwx, rwx, rwx

~/test$ ls -l

-rwxrwxrwx 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-t 3 yuhen yuhen 4096 2009-08-04 00:09 b

~/test$ chmod 6777 a.txt 设置属性 SUID, GUID, rwx, rwx, rwx

~/test$ ls -l # 大写字母 S 变成小写了。

-rwsrwsrwx 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-t 3 yuhen yuhen 4096 2009-08-04 00:09 b

目录如果没有 x 权限,SBit 就是大写字母 T,否则就是小写字母 t。

~/test$ ls -l

-rwsrwsrwx 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-t 3 yuhen yuhen 4096 2009-08-04 00:09 b

~/test$ chmod o-x b

~/test$ ls -l

-rwsrwsrwx 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-T 3 yuhen yuhen 4096 2009-08-04 00:09 b

总结成一句话就是: 有 x 用小写,否则用大写。

#p#副标题#e#3. 默认权限

我们可以用 umask 修改文件和目录的默认创建权限。

~/test$ umask

0022

~/test$ umask -S

u=rwx,g=rx,o=rx

数字表示要移除的属性,分别表示特殊属性、拥有人、用户组和其他用户。用 -S 参数可以显示默认属性。对于文件而言,默认是没有 “x” 属性的。

~/test$ umask -S

u=rwx,g=rx,o=rx

~/test$ touch b.txt

~/test$ mkdir x

~/test$ ls -l

-rw-r–r– 1 yuhen yuhen 0 2009-08-04 00:24 b.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-04 00:24 x

umask 还可以修改默认权限。

~/test$ umask -S u=rwx,g=rwx,o=rx

u=rwx,g=rwx,o=rx

~/test$ umask

0002

~/test$ umask -S

u=rwx,g=rwx,o=rx

~/test$ umask 0027

~/test$ umask -S

u=rwx,g=rx,o=

4. 拥有人和用户组

通过 chown 和 chogrp 可以改变文件拥有人和用户组。

~/test$ ls -l

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 b

~/test$ sudo chown root a.txt # 修改拥有人

~/test$ ls -l

-rw-r–r– 1 root yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 b

~/test$ sudo chgrp root a.txt # 修改用户组

~/test$ ls -l

-rw-r–r– 1 root root 0 2009-08-03 20:07 a.txt
drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 b

chown 和 chgrp 都支持 -R 参数进行子目录和文件递归修改。

~/test$ ls -Rl

.:
total 4
-rw-r–r– 1 root root 0 2009-08-03 20:07 a.txt
drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 b

./b:
total 4
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-04 00:09 1
-rw-r–r– 1 yuhen yuhen 0 2009-08-04 00:09 x.txt

./b/1:
total 0

~/test$ sudo chown -R root .

~/test$ sudo chgrp -R root .

~/test$ ls -Rl

.:
total 4
-rw-r–r– 1 root root 0 2009-08-03 20:07 a.txt
drwxr-xr-x 3 root root 4096 2009-08-04 00:09 b

./b:
total 4
drwxr-xr-x 2 root root 4096 2009-08-04 00:09 1
-rw-r–r– 1 root root 0 2009-08-04 00:09 x.txt

./b/1:
total 0

#p#副标题#e#5. 链接数

文件的链接数表示该文件硬链接数量,默认为 1。目录则表示其下子目录数量,默认为 2,分别是 “.” 和 “..”。

~/test$ ls -l

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b

~/test$ ln a.txt c.txt # 创建硬链接

~/test$ ls -l # 链接数发生变化

-rw-r–r– 2 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b
-rw-r–r– 2 yuhen yuhen 0 2009-08-03 20:07 c.txt

~/test$ ln -s a.txt d.txt # 创建符号链接

~/test$ ls -l # 链接数未改变

-rw-r–r– 2 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b
-rw-r–r– 2 yuhen yuhen 0 2009-08-03 20:07 c.txt
lrwxrwxrwx 1 yuhen yuhen 5 2009-08-04 00:07 d.txt -> a.txt

看看目录的链接数。

~/test$ ls -l # b 的链接数为 2

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 b

~/test$ ls -al b # 仅包含 “.” 和 “..”

drwxr-xr-x 2 yuhen yuhen 4096 2009-08-03 20:08 .
drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 ..

~/test$ mkdir ./b/1 # 在 b 下创建子目录

~/test$ ls -al b # 创建成功

drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 .
drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 ..
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-04 00:09 1

~/test$ ls -l # b 链接数发生变化

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 b

~/test$ touch ./b/x.txt # 在 b 下创建文件

~/test$ ls -al b # 创建文件成功

drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 .
drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 ..
drwxr-xr-x 2 yuhen yuhen 4096 2009-08-04 00:09 1
-rw-r–r– 1 yuhen yuhen 0 2009-08-04 00:09 x.txt

~/test$ ls -l # b 链接数未发生改变

-rw-r–r– 1 yuhen yuhen 0 2009-08-03 20:07 a.txt
drwxr-xr-x 3 yuhen yuhen 4096 2009-08-04 00:09 b

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Linux操作系统系列之文件权限
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址