文章目录
文件的一般权限
文件的权限针对三类对象进行定义:
- owner 属主,缩写u
- group 属组,缩写g
- other 其他,缩写o
每个文件针对每类访问者定义了三种主要权限:
- r:Read 读
- w:Write 写
- x:eXecute 执行
注意:root账户不受文件权限的读写限制,执行权限受限制
所属者/所属组/其他用户权限的字符表示 | 二进制表示 | 八进制表示 |
---|---|---|
— | 000 | 0 |
–x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r– | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
修改文件或目录的权限—chmod(change mode)命令
命令格式 1: chmod [选项] [ugoa][+-=][rwx] 文件或目录...
命令格式2: chmod [选项] nnn 文件或目录...
常用的选项 -R ,递归修改指定目录下所有文件、子目录的权限。
ugoa
:表示权限设置所针对的用户类别,可以是其中字母中的一个或组合,u(user)表示文件或目
录的属主(所有者);g(group)表示属组内的用户;o(others)表示其他用户;a(all)表示所有用户(即
u+g+o)。- +或-或= :表示设置权限的操作动作,+代表添加某个权限;-代表取消某个权限;=表示只赋予给定
的权限,并取消原有的权限。 rwx
:用字符形式表示的所设置的权限,可以是其中一个字母或组合。nnn
:用三位八进制数字表示的权限
对于文件和目录来说,r,w,x有着不同的作用和含义
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
r(read) | 可以读取文件的内容 | 可以列出目录的内容,即目录下的文件的文件名 |
w(write) | 可以更改文件的内容 | 可以创建或者删除目录中的任一文件(只有w权限无法创建删除文件,需要和x权限一起使用) |
e(execute) | 可以作为可执行文件 | 可以切换到目录 |
对于文件和目录可能出现的权限:
文件可能出现的权限 | 目录可能出现的 |
---|---|
—、r–、r-x、rw-、rwx | —、r-x、rwx |
修改文件或目录的属主和属组
修改文件或目录的所属者
命令格式 : chown [选项] 新属主[:[新属组]] 文件或目录……
选项: -R
可递归设置指定目录下的全部文件(包括子目录和子目录中的文件)的所属关系。
修改文件或目录的属组
命令1: chown [选项] :新属组 文件或目录……
命令2: chgrp [选项] 新属组 文件或目录……
文件和目录的特殊权限
在Linux系统中,用户对文件或目录的访问权限除了r、w、x三种一般权限外,还有SET UID(SUID)、SETGID(SGID)、Sticky Bit(粘滞位)三种特殊权限,用于对文件或目录进行更加灵活方便的访问控制。
SUID 权限
SUID 权限的含义:是为了让一般用户在执行某些程序的时候, 在程序的运行期间, 暂时获得该程
序文件所属者的权限。
注意:
- suid仅对二进制文件有效。
- 在执行过程中,调用者会暂时获得该文件的所有者权限。
- 该权限只在程序执行的过程中有效。
SGID 权限
SGID 可以用在两个方面:
- 文件: 如 果 SGID 设置在二进制文件上, 则不论用户是谁,在执行该程序的时候,程序的所属组将
会变成该程序文件的所属组。 - 目录, 如 果 SGID 是设置在 A 目录上, 则在 A 目录内所建立的文件或目录的所属组, 将会是此 A
目录的所属组。
一 般来说, SGID 多用在特定的多人团队的项目开发上,在系统中用的很少。
Sticky Bit权限
Sticky Bit (SBit) 当前只针对目录有效, 对文件没有效果。其对目录的作用是:
- 在 具 有 SBit 的目录下, 用户若在该目录下具有 w 及 x 权限 , 则当用户在该目录下建立文件或目
录时, 只有文件拥有者与 root 才有权力删除。
例如:当 student 用户属于 A 目录的组成员或属于 other ,且拥有 wx 权限时, 可以对该目录内任何人
建立的目录或文件进行“ 删除/重命名/移动” 等操作。 如果将 A 目录加上了 Sticky Bit 权限, 则 student
用户只能针对自己建立的文件或目录进行“ 删除/重命名/移动” 等操作。
设置文件和目录的特殊权限
为文件或目录添加三种特殊权限同样可以通过chmod
命令来实施,使用“u±s
”、“g±s
”、“o±t
”的字符权限模
式分别用于添加和移除SUID
、GUID
、sticky
权限。
若使用数字形式的权限模式,可采用“nnnn
”格式的四位八进制数字表示,其中:后面三位是一般权限的数
字表示,前面第一位则是特殊权限的标志数字:
0——表示不设置特殊权限
1——表示只设置sticky
2——表示只设置GUID权限
3——表示只设置SGID和sticky权限
4——表示只设置SUID权限
5——表示只设置SUID和sticky权限
6——表示只设置SUID和SGID
7——表示同时设置SUID、GUID、sticky3种权限
ACL权限
ACL 权限分配:给指定的用户指定目录分配指定的权限。
ACL权限管理命令
查看ACL权限
命令格式:[root@server ~]# getfacle 文件名
设定ACL权限
命令格式:setfacl 选项 文件名
选项:
-m
:设定 ACL 权限。如果是给予用户 ACL 权限,则使用 u:用户名:权限 格式赋予;如果是给予组
ACL 权限,则使用 g:组名:权限" 格式赋予;
-x
:删除指定的 ACL 权限;
-b
:删除所有的 ACL 权限;
-d
:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;
-k
:删除默认 ACL 权限;
-R
:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效;
删除ACL权限
-
删除指定用户的 ACL 权限:
setfacl -x u:用户名 文件名
-
删除指定用户组的 ACL 权限:
setfacl -x g:组名 文件名
-
删除文件的所有 ACL 权限:
setfacl -b 文件名
最大有效权限 mask
给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限“相与”之后的权限才
是用户的真正权限,一般默认mask权限都是rwx,与我们所设定的权限相与就是我们设定的权限。
通过 getfacl
可以查看 mask
的权限.
权限设置命令格式:setfacl -m m:权限 文件名
权限掩码umask
设置新建文件或目录的默认权限
在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该
默认权限与umask值有关,其具体关系是:
新建文件的默认权限=0666-umask值
新建目录的默认权限=0777-umask值
分别查看、修改用户当前默认的umask值
修改文件的扩展属性
设置文件的扩展属性
命令格式 : chattr [ -R ] [+-=acdijsuADS] 文件或目录名
选项:
-R
:递归设置指定目录及其目录下的所有文件和子目录的属性;
-V
:详细显示目录和文件的属性设置情况。
+
增加某项属性;
-
取消某项属性;
=
设置文件或目录 只具有哪些属性;
a
只允许向文件追加数据,不允许任何进程覆盖重写文件的内容。
A
设置不允许系统更新文件的最后访问时间。
i
不可修改属性。具有该属性的文件不能被删除、更名或修改其内容。
c
压缩属性,写入或读取时,系统会自动进行压缩或解压缩。
s
安全删除属性。即在删除一个文件时,会使用0填充原文件所在的存贮区,以使恢复工具无法
恢复出文件的内容。
u
可恢复性的删除。对于具有该属性的文件,在删除时,系统会保留其数据块以便以后能恢复
该文件的内容。
查看文件的扩展属性
命令格式 : lsattr [-adR] 文件名或目录名
选项:
-a
:列出目录中的所有文件(包括隐藏文件)。
-d
:列出目录文件的扩展属性。
-R
:以递归的方式列出目录的属性及其内容。
案例
-
创建文件,并赋予权限611(两种方式,一种guoa,一种nnn)
-
创建目录,并赋予权限755(两种方式,一种guoa,一种nnn)
-
创建文件,并将文件的属主和属组修改其他用户
-
设置suid,为文件设置suid(两种方式 u+s和nnnn)的方式
-
设置sgid, 为文件设置sgid(两种方式 g+s和nnnn)的方式
-
设置sbit,为目录设置sbit(两种方式 o+t和nnnn)的方式
-
创建文件,查询文件的ACL
为文件设置acl 用户为testuser1 权限为 rwx
为文件设置acl的mask: 权限为r-x