Linux chmod chgrp chown

文件权限

image.png

用户权限(**user**) 组权限(group) 其他用户
r w x r w x r w x
4 2 1 4 2 1 4 2 1
  • 每一类用户都有3个权限
    • r:读取权限, 只读
    • w: 写入权限 , 可以编辑文件
    • x: 执行权限, 由于某些文件是可以执行的,如有有执行权限才可以执行
  • 操作权限
    • 添加权限:chmod 用户或组+权限 资源文件或目录
    • 删除权限:chmod 用户或组-权限 资源文件或目录
    • 修改权限:chmod 用户或组=权限 资源文件或目录

      权限操作命令

      chmod-更改文件或目录的用户权限

      语法格式:chmod [参数] [文件]
      常用参数:
-c 若该文件权限确实已经更改,才显示其更改动作
-f 若该文件权限无法被更改也不显示错误讯息
-v 显示权限变更的详细资料
-R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)

chgrp-更改文件的用户组

语法格式: chgrp [参数] [目录]
常用参数:

-c 效果类似”-v”参数,但仅回报更改的部分
-f 不显示错误信息
-h 对符号连接的文件作修改,而不更动其他任何相关文件
-R 递归处理,将指定目录下的所有文件及子目录一并处理

chown-更改文件或目录的用户和用户组

语法格式:chown [参数]
常用参数:

-R 对目前目录下的所有文件与子目录进行相同的拥有者变更
-c 若该文件拥有者确实已经更改,才显示其更改动作
-f 若该文件拥有者无法被更改也不要显示错误讯息
-h 只对于连结(link)进行变更,而非该 link 真正指向的文件
-v 显示拥有者变更的详细资料

常见的权限操作

授权

  1. $ chmod 777 file/dir

添加可执行权限

  1. $ chmod +x file

导出以及恢复文件的权限

导出文件的权限

$ getfacl -R ./ > chmod.txt

从导出的权限文件中恢复文件的权限

$ setfacl --restore=chmod.txt

Linux下的s、t、i、a权限

s:文件属主和组设置SUID和GUID

文件在被设置了s权限后将以root身份执行。在设置s权限时文件属主、属组必须先设置相应的x权限,否则s权限并不能正真生效(chmod命令不进行必要的完整性检查,即使不设置x权限就设置s权限,chmod也不会报错,当ls -l时看到rwS,大写S说明s权限未生效)。Linux修改密码的passwd便是一个设置了SUID的程序,普通用户无读写/etc/shadow文件的权限但是却可以修改自己的密码。

ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 32988 2008-12-08 17:17 /usr/bin/passwd

可以通过字符模式设置s权限:chmod a+s filename,也可以使用绝对模式进行设置:

设置suid:将相应的权限位之前的那一位设置为4; 设置guid:将相应的权限位之前的那一位设置为2; 两者都置位:将相应的权限位之前的那一位设置为4+2=6。

如:

chmod 4764 filename   //设置SUID

t :设置粘着位

一个文件可读写的用户并一定想让他有删除此文件的权限,如果文件设置了t权限则只用属主和root有删除文件的权限,通过chmod +t filename 来设置t权限。

i:不可修改权限

例:chattr +i filename 则filename文件就不可修改,无论任何人,如果需要修改需要先删除i权限,用chattr -i filename就可以了。查看文件是否设置了i权限用lsattr filename命令。

a:只追加权限

对于日志系统很好用,这个权限让目标文件只能追加,不能删除,而且不能通过编辑器追加。可以使用chattr +a设置追加权限。