既然 Linux 针对文件设置了不同的权限,也就意味着文件权限并不是一成不变,而是可以改变的。Linux 修改文件权限的指令为:

  • chgrp:修改文件所属的用户组
  • chown:修改文件的拥有者
  • chmod:修改文件的权限,SUID,SGID,SBIT等的特性

chgrp

# 改变每一个 FILE 的用户组为 GROUP
chgrp [OPTION]... GROUP FILE...

# 改变每一个 FILE 的用户和用户组为和 RFILE 一样设置的用户和用户组
chgrp [OPTION]... --reference=RFILE FILE...

但是要修改的用户组必须要在 /etc/group 文件之中,否则就会显示错误。

chown

# chown 用来改变给定文件的用户和用户组
# 如果用 [OWNER] 的形式给出,则只改变文件的用户,也可将用户名改为 UID 代号
# 如果用 [OWNER]:[GROUP] 的形式给出,则同时改变文件的用户和用户组
# 如果用 [OWNER]: 的形式给出,则改变文件的用户,并将文件的用户组改变为该用户的登录用户组
# 如果用 :[GROUP] 的形式给出,则只改变文件的用户组,此时该命令等效于 chgrp
# 如果用 : 的形式给出,则文件属性不发生改变
chown [OPTION]... [OWNER][:[GROUP]] FILE...

# 改变每一个 FILE 的用户和用户组为和 RFILE 一样设置的用户和用户组
chown [OPTION]... --reference=RFILE FILE...

如果要复制文件给另一个用户的话,要记得修改复制文件的文件属性,以确保使用者能够正常使用。

chmod

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

这个命令内容比之前的命令多一点,我们放在这里说明:

chmod 命令用来修改给定文件的模式位,有两种修改方式,分别为符号类型和数字类型。

字符类型

使用该方法时,参数设置的格式为 [ugoa...][[-+=][perms...]...],其中 [ugoa] 分别代表 user,group,others,all,对应用户,用户组,其他人,所有人;[-+=]分别代表减去,加上,等于设定的权限位;[perms] 可以是数字0或者是 rwxXst 中的单个或多个字符。

  • 虽然上边给出了命令的使用方法,但是并不意味着命令能够执行成功,前提是你对要修改的文件具有权限才行。比如如果一个文件只有 root 才有权限进行修改,那么你在其他用户下进行该文件的权限修改就是非法的。
  • 在该操作方式下,如果缺省 [ugoa],则默认为 a,因此在使用的时候要慎重。
  • 如果涉及到多组权限位的设置,中间需要用逗号进行分割。如:
chmod u=rwx,g=r,o=r filename
  • 刚才提到的 rwxXst 含义为:

  • r:read
  • w:write
  • x:execute(ro search for directores)
  • X:execute/search only if the file is a directory or already has execute permission for some user.只有当文件是目录或者对于某些用户来说已经具有执行权限的时候,才能够被执行或搜索。
  • s:set user or group ID on execution.当执行的时候设置用户和用户组
  • t:restricted deletion flag or sticky bit.受限删除标志或粘性位,是一个单独的标志位,根据文件类型不同作用也不同。对于目录来说,该标志能够阻止非特权用户删除或重命名目录中的文件,除非该用户是文件或目录的所有者。对于老式系统的普通文件来说,该位将程序文本图像保存在交换设备上,以保证运行的时候加载地更快,因此被叫作粘性位。

数字类型

如果需要同时修改三组文件权限位,那么使用这种方法可能会简单一点。该方法用数字代替具体的权限位,rwx 分别对应 421,并且权限数字还可相加,因此 rwx 就对应数字 7,rw 就对应数字 6,数字0表示清空该组权限

具体的权限设置由四位数字组成,第一位选择用户(4),用户组(2)和受限删除或粘性标识(1);第二位表示用户权限;第三位表示用户组权限;第四位表示其他人权限。如:

chmod 6754 filename

一些要注意的问题

如果常规文件的用户组与用户有效的用户组不匹配或不是用户支持的用户组,那么 chmod 就会清除掉该 SUID(set-group-ID),除非用户具有特权。增加限制可能会导致 MODE 或 RFILE 的 SUID 和 SGID 被忽略。

chmod 保留目录的 SUID 和 SGID 位,除非明确指定。可以通过符号类型设置或清除掉相应的位,数字类型只能够设置相应的位,不能够清除。

文件和目录的权限区别

对于文件来说,权限的意义为:

  • r:能够读取此文件的实际内容
  • w:能够修改此文件的实际内容
  • x:能够在系统中执行该文件。能够执行是由该权限位决定的,但能否执行成功则是由该文件本身的内容决定的。如新建一个文本文档并将文件的权限设置为可执行的,在系统中能够执行该文件,但可能并不会执行成功。

如果对于某个用户对于某个文件具有 w 的权限,这只是表明能够修改文件中的内容,却并不能够对文件进行删除,重命名等操作。这些功能的实现可以通过设定目录的权限来实现。

目录与文件名有很大的关系。对于目录来说,权限的意义为:

  • r:表示具有读取目录结构列表的权限。具有此权限时,您能够查询该目录下的文件名数据。
  • w:表示能够改动该目录结构。又因为目录是跟文件名有关系的,因此你可以对文件本身执行相关操作:
  1. 建立新的文件与目录
  2. 删除已经存在的文件与目录
  3. 重命名文件或目录
  4. 移动该目录下的文件和目录位置
  • x:表示能够进入该目录成为工作目录。也就是能够通过命令 cd 定位到具体的目录。

假定现在有一个目录为 /dir1/dir2/text.txt:

  • 如果你想要读取 text 的内容,对于 dir1,dir2,你至少要具有 rx 的权限,对于 text 你至少要有 r 的权限;
  • 如果你想要修改 text 的内容,除了上述的权限外,对于 text 还要有 w 的权限;
  • 如果你想要删除 text,对于 dir1,你至少需要有 rx 的权限,对于 dir2,你需要有 rwx 的权限,对于 text,你可以没有任何权限。

对于上述内容,可以自行尝试。

 

Logo

更多推荐