Skip to content

管理权限命令

字数: 3083 字 时长: 12 分钟

可以通过修改权限来改变文件或目录的访问权限,从而控制用户或用户组对文件或目录的读取、写入或执行能力。这是 Linux 权限管理的重要组成部分,用于确保系统的安全性、数据的保密性和资源的合理分配。改变文件或目录的访问权限,从而控制用户或用户组对文件或目录的读取、写入或执行能力。这是 Linux 权限管理的重要组成部分,用于确保系统的安全性、数据的保密性和资源的合理分配。

修改归属关系

在 Linux 系统中,文件和目录的归属关系(即所有者和所属组)决定了用户对它们的访问权限。修改归属关系是系统管理中的一个重要任务,它可以帮助优化资源分配、确保数据安全并满足特定的业务需求。

chgrp

chgrp 命令允许用户更改文件或目录的所属组。

shell
chgrp [选项] 用户组 文件或目录
常用选项描述
-c仅在发生更改时报告每个文件的操作详情,如果文件或目录的所属组已经与目标用户组一致,则不会输出任何信息。
-f不显示错误信息。这在脚本中特别有用,可以避免不必要的错误输出干扰脚本的执行。
-h仅修改符号链接本身的所属组,而不是链接指向的文件。如果没有使用 -h 选项,则会修改符号链接所指向的目标文件的所属组,而不是符号链接本身的所属组。
-R递归处理,将指定目录下的所有文件及子目录一并处理。
-v输出每个文件的处理详情。
--reference=<参考文件或目录>将指定文件或目录的所属组设置为与参考文件或目录的所属组相同。
  1. 更改单个文件的所属组

    shell
    [root@localhost ~]# chgrp users anaconda-ks.cfg
    shell
    [root@localhost ~]# ll -l anaconda-ks.cfg 
    -rw-------. 1 root users 819 Nov 18 08:53 anaconda-ks.cfg

    将文件 anaconda-ks.cfg 的所属组从原来的用户组更改为 users

  2. 递归更改目录及其内容的所属组

    shell
    [root@localhost ~]# ls -l /tmp/
    total 0
    drwx------. 3 root root 17 Mar 31 16:25 systemd-private-c2800eb097ac4ed6b01d665243736d30-chronyd.service-3D2y19
    drwx------. 3 root root 17 Mar 31 16:25 systemd-private-c2800eb097ac4ed6b01d665243736d30-dbus-broker.service-g60oOy
    drwx------. 3 root root 17 Mar 31 16:25 systemd-private-c2800eb097ac4ed6b01d665243736d30-irqbalance.service-pSSC0x
    drwx------. 3 root root 17 Mar 31 16:25 systemd-private-c2800eb097ac4ed6b01d665243736d30-kdump.service-H0f3Uw
    drwx------. 3 root root 17 Mar 31 16:25 systemd-private-c2800eb097ac4ed6b01d665243736d30-systemd-logind.service-1MUsFp
    shell
    [root@localhost ~]# chgrp -R users /tmp/
    shell
    [root@localhost ~]# ls -l /tmp/
    total 0
    drwx------. 3 root users 17 Mar 31 16:25 systemd-private-c2800eb097ac4ed6b01d665243736d30-chronyd.service-3D2y19
    drwx------. 3 root users 17 Mar 31 16:25 systemd-private-c2800eb097ac4ed6b01d665243736d30-dbus-broker.service-g60oOy
    drwx------. 3 root users 17 Mar 31 16:25 systemd-private-c2800eb097ac4ed6b01d665243736d30-irqbalance.service-pSSC0x
    drwx------. 3 root users 17 Mar 31 16:25 systemd-private-c2800eb097ac4ed6b01d665243736d30-kdump.service-H0f3Uw
    drwx------. 3 root users 17 Mar 31 16:25 systemd-private-c2800eb097ac4ed6b01d665243736d30-systemd-logind.service-1MUsFp

    /tmp

    /tmp 目录是 Linux 系统中的一个特殊目录,用于临时存储文件。它通常用于存储临时文件,如日志文件、缓存文件等,这些文件在系统启动时创建,并在系统关闭时删除。

  3. 更改符号链接的所属组

    首先创建一个普通文件 original_file

    shell
    [root@localhost ~]# echo "This is the original file." > original_file.txt

    然后再创建一个指向 original_file.txt 的符号链接 symlink

    shell
    [root@localhost ~]# ln -s original_file.txt symlink

    此时,文件和符号链接的属性如下:

    shell
    [root@localhost ~]# ll original_file.txt symlink 
    -rw-r--r--. 1 root root 27 Mar 31 17:12 original_file.txt
    lrwxrwxrwx. 1 root root 17 Mar 31 17:12 symlink -> original_file.txt

    使用 chgrp -h 命令仅更改符号链接的所属组,而不影响链接指向的原始文件:

    shell
    [root@localhost ~]# chgrp -h users symlink
    shell
    [root@localhost ~]# ll original_file.txt symlink 
    -rw-r--r--. 1 root root  27 Mar 31 17:12 original_file.txt
    lrwxrwxrwx. 1 root users 17 Mar 31 17:12 symlink -> original_file.txt

    如果没有使用 -h 选项,chgrp 命令会修改符号链接所指向的目标文件的所属组,而不是符号链接本身的所属组:

    shell
    [root@localhost ~]# ll original_file.txt symlink 
    -rw-r--r--. 1 root root  27 Mar 31 17:12 original_file.txt
    lrwxrwxrwx. 1 root users 17 Mar 31 17:12 symlink -> original_file.txt
    shell
    [root@localhost ~]# chgrp wheel symlink
    shell
    [root@localhost ~]# ll original_file.txt symlink 
    -rw-r--r--. 1 root wheel 27 Mar 31 17:12 original_file.txt
    lrwxrwxrwx. 1 root users 17 Mar 31 17:12 symlink -> original_file.txt
  4. 使用参考文件更改所属组

    shell
    [root@localhost ~]# ll access.log 
    -rw-r--r--. 1 root root 887 Jan 14 14:48 access.log
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rw-------. 1 root users 819 Nov 18 08:53 anaconda-ks.cfg
    shell
    [root@localhost ~]# chgrp --reference=access.log anaconda-ks.cfg

    anaconda-ks.cfg 的所属组更改为与 access.log 相同的用户组:

    shell
    [root@localhost ~]# ll access.log 
    -rw-r--r--. 1 root root 887 Jan 14 14:48 access.log
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rw-------. 1 root root 819 Nov 18 08:53 anaconda-ks.cfg

chown

chown 命令于更改文件或目录的所有者和所属组。chownchgrp 命令在选项和用法上有许多相似之处,相比 chgrp 命令,chown 命令能更强大,可以同时更改文件或目录的所有者和所属组。

shell
chown [选项] 用户 [: 用户组] 文件或目录
常用选项描述
-c仅在发生更改时报告每个文件的操作详情。
-f不显示错误信息。
-h仅修改符号链接本身的属性,而不是符号链接所指向的目标文件或目录。
-R递归处理,将指定目录下的所有文件及子目录一并处理。
-v输出每个文件的处理详情。
--reference=<参考文件或目录>使用参考文件或目录的所有者和所属组来设置目标文件或目录的所有者和所属组。

chown 命令中,所有者(Owner)和用户组(Group)可以使用符号名称(如用户名或用户组名)来指定,也可以使用数字(UID 或 GID)来指定。

需要注意的是:

  • 如果在 chown 命令中没有指定所有者(Owner),则文件或目录的所有者不会被更改。
  • 如果在 chown 命令中没有指定用户组(Group),则文件或目录的所属组不会被更改。但是,如果在所有者名称后面有一个冒号(:),即使没有指定用户组名称,所属组也会被更改为所有者的登录组(login group)。
  1. 更改文件的所有者

    shell
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rw-------. 1 root root 819 Nov 18 08:53 anaconda-ks.cfg
    shell
    [root@localhost ~]# chown eva anaconda-ks.cfg
    shell
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rw-------. 1 eva root 819 Nov 18 08:53 anaconda-ks.cfg

    因为没有指定用户组,所以用户组保持不变。但是如果后面加上冒号 :,则表示只指定所有者,不指定用户组,但会将所属组更改为所有者的登录组。

    shell
    [root@localhost ~]# id eva
    uid=1005(eva) gid=1005(eva) groups=1005(eva),10(wheel),6000(test_group),6001(cloud_group)

    可以看到 eva 的登录组是 eva,如果使用 eva: 修改用户文件的所有者的话:

    shell
    [root@localhost ~]# chown eva: anaconda-ks.cfg
    shell
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rw-------. 1 eva eva 819 Nov 18 08:53 anaconda-ks.cfg

    可以看到文件 anaconda-ks.cfg 的所属组也更改为 eva 的登录组 eva 了。

  2. 更改文件的所属组

    shell
    [root@localhost ~]# chown :dev_team anaconda-ks.cfg
    shell
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rw-------. 1 eva test_group 819 Nov 18 08:53 anaconda-ks.cfg

    :dev_team 表示只指定用户组,不指定所有者。

  3. 同时更改所有者和所属组

shell
[root@localhost ~]# chown john:test_group anaconda-ks.cfg
shell
[root@localhost ~]# ll anaconda-ks.cfg 
-rw-------. 1 john test_group 819 Nov 18 08:53 anaconda-ks.cfg

修改文件或目录权限

在 Linux 系统中,文件和目录的权限管理是确保系统安全性和资源合理分配的重要机制。文件权限决定了用户对文件或目录的访问和操作能力。权限分为三类:读(read)、写(write)和执行(execute)。这些权限可以分别设置为所有者(owner)、用户组(group)和其他用户(others)。

chmod 命令用于修改文件的权限。它允更改文件的访问权限,包括设置文件所有者、组所有者、其他用户的访问权限。

shell
chmod [选项] 模式 文件或目录
常用选项描述
-c仅在发生更改时报告每个文件的操作详情。
-f不显示错误信息。
-h仅修改符号链接本身的属性,而不是符号链接所指向的目标文件或目录。
-R递归处理,将指定目录下的所有文件及子目录一并处理。
-v输出每个文件的处理详情。
--reference=<参考文件或目录>使用参考文件或目录的所有者和所属组来设置目标文件或目录的所有者和所属组。

chmod 命令中的「模式」是用于指定文件或目录权限的关键部分,模式可以使用符号表示法或数字表示法来定义权限。

符号表示法

符号表示法通过字母和符号组合,直观地修改权限。它适合对权限进行增量调整(如添加或移除某个权限),而无需指定完整权限,格式为:

shell
[ugoa][+-=][rwx]

用户类别:

  • u:文件所有者(User)
  • g:所属组(Group)
  • o:其他用户(Others)
  • a:所有用户(All,默认值,可省略)

操作符:

  • +:添加权限
  • -:移除权限
  • =:直接设置权限(覆盖原有)

权限:

  • r:读(Read)
  • w:写(Write)
  • x:执行(Execute)

执行权限

执行权限(x)允许用户运行文件作为程序或脚本,或者进入目录。它是一个重要的权限,因为它决定了用户是否可以执行文件或访问目录中的内容。

如果文件是一个可执行程序(如编译后的二进制文件)或脚本(如 Shell 脚本、Python 脚本等),执行权限允许用户运行该文件。没有执行权限,用户无法运行该文件,即使他们可以读取文件内容。

  1. 给文件所有者添加执行权限

    shell
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rw-------. 1 john test_group 819 Nov 18 08:53 anaconda-ks.cfg
    shell
    [root@localhost ~]# chmod u+x anaconda-ks.cfg
    shell
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rwx------. 1 john test_group 819 Nov 18 08:53 anaconda-ks.cfg

    可以看到文件 anaconda-ks.cfg 的所有者 john 现在有读、写和执行权限,而用户组和其他用户没有权限。

  2. 同时修改用户组和其他用户的权限

    shell
    [root@localhost ~]# chmod go+r anaconda-ks.cfg
    shell
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rwxr--r--. 1 john test_group 819 Nov 18 08:53 anaconda-ks.cfg

    chmod 可以指定一个或多个操作用户,用于同时对多个用户类别进行权限修改。

  3. 移除权限

    shell
    [root@localhost ~]# chmod go-r anaconda-ks.cfg
    shell
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rwx------. 1 john test_group 819 Nov 18 08:53 anaconda-ks.cfg
  4. 直接赋予权限:

    shell
    [root@localhost ~]# chmod u=rw,g=rw,o=r anaconda-ks.cfg
    shell
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rw-rw-r--. 1 john test_group 819 Nov 18 08:53 anaconda-ks.cfg

    chmod 命令的符号模式中,可以使用逗号(,)来分隔不同的用户类型及其对应的权限设置。这种方式允许你在一条命令中同时为多个用户类型设置权限。

数字表示法

数字表示法使用八进制数表示权限,每个权限组(用户、组、其他)用 3 位二进制数(0-7)表示。适合快速设置完整权限。格式为:

shell
chmod [用户组权限][组权限][其他用户权限] 文件名

数字表示法使用数字来表示权限,每个权限类型对应一个数字:

  • 4:读权限(r)
  • 2:写权限(w)
  • 1:执行权限(x)

权限数字可以相加,表示多种权限的组合:

  • 7:读、写、执行(4 + 2 + 1)
  • 6:读、写(4 + 2)
  • 5:读、执行(4 + 1)
  • 3:写、执行(2 + 1)
  • 0:无权限
  1. 设置所有者读写执行权限,用户组只读权限,其他用户只读权限

    shell
    [root@localhost ~]# chmod 744 anaconda-ks.cfg
    shell
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rwxr--r--. 1 john test_group 819 Nov 18 08:53 anaconda-ks.cfg
  2. 仅设置所有者读写权限

    shell
    [root@localhost ~]# chmod 600 anaconda-ks.cfg
    shell
    [root@localhost ~]# ll anaconda-ks.cfg 
    -rw-------. 1 john test_group 819 Nov 18 08:53 anaconda-ks.cfg