Linux 文件权限
一、 用户分类与文件访问权
• Linux 将用户划分为四类;
root ;或所有 UID=0 的用户,具有至高权限;
owner :文件的所有者,默认即文件的创建者;
group ;所属组,除 owner 外同组其他成员有同等权限;
world ;除上面三类外的其他普通用户。
自然,Linux 的权限管理只针对 owner、group、world。
• 访问权限有三种;读、写、执行,分别用 r、w、x 表示
ls –l 命令显示的结果中第 1 列的 2-10 分别表示三类用户对
此文件(或目录)的三种访问权限,“
-”表示无此权限,例:
-rwxr-x- - - 2 z3 g1 737 oct 7 18:42 a.sh
表示 a.sh 文件为 z3 所有,属于 g1 组,z3 具有全部权限,
g1 组内其他成员具有读和执行权限,其他用户无任何权限。
• 为便于记忆与交流,专业人员习惯以八进制描述权限,比如
上例文件的访问权限可表示为 750。
二、 文件权限与目录权限
文件与目录的访问权限都分为读、写和执行,但作用不同:
读权限
写权限
执行权限
文件
读取文件内容 修改该文件
执行
目录
列出其中的文
件名
在其中创建或
删除文件
进入目录注意:
⑴在 Linux 中一个文件是否是可执行文件与其扩展名无关。
其可否执行取决于两个条件:用户是否具有执行权限;该文
件是否是可执行文件。 普通的文本文件(非脚本文件)即
便被赋予执行权限也无法执行。File 命令可查看文件类型。
⑵Redhat Linux 9.0 上的实验表明:若要对目录中的文件名列
表或在其中创建与删除文件都必须要对该目录拥有执行权
限。这点与很多书籍上的说法存在出入。
三、 改变文件的所有者和所在组
① chown 命令:改变文件的所有者
例:chown l4 a.txt 改 a.txt 文件的所有者为 l4
chown l4 mydir 改 mydir 目录的所有者为 l4
chown –R l4 mydir 将 mydir 目录全部归 l4 所有
说明:⑴ -R 参数表示递归操作,即把 mydir 及其下的所有
目录与文件的所有者都改为 l4。
⑵ 只有 root 用户有劝执行 chown 命令。
② chgrp 命令:改变文件的所属组
例:chgrp g1 a.txt 改 a.txt 文件的所属组为 g1
chgrp –R l4 mydir 递归改变 mydir 目录所属组
说明:普通用户也可以执行 chgrp 命令,但前提条件是该
用户必须同时具备两组的成员身份。③同时改变所有者和所属组
chown newuser.newgroup filename_or_directory
即用点连接新所有者和新组,执行 chown 命令。
例:chown l4.g1 mydir
四、 改变文件的访问权限
• chmod 命令用于修改文件或目录的访问权限。命令格式:
chmod 权限 文件或目录名
例:chmod 755 /home/l4 修改 l4 的主目录访问权限为 755
(注:如果需要,当然也可以使用递归操作参数-R)
• 还可以使用字符串取代八进制的权限表示:
u、g、o、a 分别表示 owner、group、world、all
r、w、x 分别表示 read、write、exec
+、- 分别表示增加、去除权限
例:chmod a+r g+x u+xw /home/l4
使/home/l4 对任何人可读、组用户可执行、拥有者可读可执行
又例:chmod +x install.sh
使当前目录下的 install.sh 文件对任何人可执行。这种用法常
用在改变下载文件的权限属性以便其可执行。
注意:
⑴对硬连接的访问权限修改会同时影响到所有相关的硬连接权限属性。因为它们是同一个文件。
⑵对软连接的访问权限修改只改变了被连接文件的权限属性,
连接文件自身的访问权限并没有被修改,仍是 777。
五、 用户的默认访问权限和 umask
用户在创建新文件时,系统通常按默认值赋予其权限:
目录
一般文件
root
755
644
普通用户
775
664
影响用户的权限默认值的是个与用户相关的系统值 umask。
Root 的 umask=022,普通用户的 umask=002
目录的默认权限等于:777 与 umask 反码;(777 减去 umask)
文件的默认权限等于:666 与 umask 反码。(666 减去 umask)
不带参数地执行 umask 将显示当前用户的 umask 值。
umask 新值 可改变当前用户的 umask 值,
例:umask 222 令当前用户 umask=222,任何人都不可写
说明:
⑴umask 只与用户有关,与当前在哪个目录无关。
⑵只能改变自己的 umask,并且只对自己的本次登录有效。
下次登录 umask 还是原值。所以修改的意义似乎不大。
⑶注意:“减去 umask”的说法只是一些书籍上为不熟悉布
尔代数的初学者提供的一种权宜的助记方法,该说法其
实很有问题,造成很多现象无法解释。笔者认为准确的说法应该是:“默认的访问权限等于权限基值与上
‘umask 的反码’,对于新建目录和新建文件来说,其权
限基值分别是 777 和 666;但对于由拷贝操作产生的新
目录和新文件来说,其权限基值就是源目录(或源文件)
的原有值”。也就是将权限基值上的那些与 umask 中置 1
位相对应的权限位清零便可得到新文件的默认权限值。
六、 理解 SUID 和 SGID
先分析一个现象:
记录用户账号信息的/etc/passwd 文件其权限是:root.root 644
记录加密口令的/etc/shadow 文件其权限是: root.root 400
对于普通用户 passwd 只能读而不能改写;shadow 连读都不允
许。可为什么我们可以通过 passwd 命令改写自己的口令?
查看一下命令程序 usr/bin/passwd 文件的属性:
/usr/bin/passwd 文件其权限是:root.root -r-s- -x- -x
这个文件是允许普通用户执行的。root 的执行位是 s,就是这
个 s 使普通用户执行 passwd 时具有了 root 身份从而获得了对
/etc/passwd 和/etc/shadow 的完全访问权(root 什么权没有?)。
实际上表示 Linux 文件权限的是 12bit,前面的 3bit 是:
SUID:若文件可以执行,则按所有者身份运行;
SGID:若文件可以执行,则按组成员身份运行;
sticky:粘接位,结束后仍驻留内存。目前并不常用。在 ls –l 命令显示中的表示方法:
SUID 置位:所有者的执行位的 x 被 s 取代;
SGID 置位:所属组的执行位的 x 被 s 取代;
sticky 置位:其他人的执行位的 x 被 t 取代。
所以,-r-s- -x- -x 用值表示就是 4511。
注意,使用 SUID 和 SGID 位要特别小心。