Linux中的权限管理(附加详细实验示例)
一、权限的概念
权限的三种基础类别:
权限 | 对文件的影响 | 对目录的影响 |
读(r) read | 查看文件的具体内容,无论是文本文件中的文字信息,还是配置文件里的参数设置。 | 可以运用ls命令,罗列目录中的所有文件与子目录,了解目录结构与内容分布。 |
写(w) write | 自由修改文件内容,无论是增添新的文字段落,还是修正既有数据。 | 可在目录中创建全新的文件与子目录,还能删除目录里已有的文件与子目录(删除需与x权限一起使用) |
执行(x) execute | 文件属于可执行文件时,用户得以运行该文件,让程序中的指令依序执行,实现各种功能。 | 允许用户运用cd命令顺利进入该目录。 |
二、权限的查看及读取
1.权限的查看
touch 文件 (建立文件)
mkdir 目录 (建立目录)ls -l 文件 (查看文件权限)ls -ld 目录 (查看目录权限)
2.文件权限的种类
文件的属性被叫做文件的元数据(meta data),一种元数据用1个 byte 来记录内容。
元数据:用来描述数据的数据
类型 u(所有者) g(所属组) o(其他人) | 链接数 | 大小 | 拥有者 | 拥有组 | 时间 | 文件/目录名 | |
文件权限信息 | - rw- r-- r-- | 1 | 0 | root | root | Mar 31 21:26 | test.sh |
目录权限信息 | d rwx r-x r-x | 2 | 6 | root | root | Mar 31 21:27 | lxt |
1)文件类型
- | d | l | b | c | s(socket) | p |
普通文件 | 目录 | 软连接 | 块设备(硬盘) | 字符设备 | 套接字(跨网络通信) | 管道 | |
2)文件权限说明
文件可能出现的权限: ---、r--、r-x、rw-、rwx
目录可能出现的权限:---、r-x、rwx
r:read,可读
w:write,可写
e:esecute,可执行
- :没有对应权限
3.用户对文件的身份识别及设定
owner:文件所有者/拥有者(默认为文档的创建者),缩写u
group:文件所属组/拥有组(与文件同组的用户),缩写g
others:其他用户(相对于所有者),缩写o
root:超级用户(权限最大,管理普通用户)
1)chown命令:更改文件的所有者\拥有者
格式:chown [-R] 新拥有者名称 文件名或目录名
①进入 mnt 目录,建立五个 lee 文件(lee1、lee2、lee3、lee4、lee5),建立 lxt 目录,并在 lxt 目录中建立三个 test 文件(test1、test2、test3),用作测试。
②进入监控界面,实时观察数据的变化
③新开一个命令界面,切换到 mnt 目录,用相对路径,并查看 lee 文件和 lxt 目录是否存在,若不存在,需建立。
④更改 lee1、lee2 文件的拥有者,分别为 lee、lxt 。
⑤更改 lxt 目录的拥有者为 lee ,但只能该更改主目录的拥有者,无法更改子目录。
⑥若要将子目录的拥有者一起更改,需加上 -R(递归),使得主目录与子目录的拥有者一起更改。
2)chgrp命令:更改文件所属组\拥有组
格式:chgrp [-R] 新拥有组名称 文件名或目录名
①更改 lee3 文件的拥有组为 lee 。
② 更改 lxt 目录的拥有组为 lee 。
③若将子目录的拥有组一起更改,加上 -R(递归),使得主目录与子目录的拥有者一起更改。
3)同时更改文件和目录的拥有者和拥有组
①更改 lee2 文件的拥有者和拥有组
格式:chown 新拥有者:新拥有组 文件名 (冒号或点都可以)
②同时更改 lxt 目录以及子目录的拥有者和拥有组
格式:chown -R 新拥有者.新拥有组 目录名 (冒号或点都可以)
4.设定普通权限
1)复制权限
chmod --reference=/lxt lee5 (复制目录lxt的权限到文件lee5上)
chmod -R --reference=/lxt 目录/子文件 (复制目录/lxt的权限到该目录及其子文件上)
复制 lxt 目录的权限到 lee5 文件上
2)设定权限
格式:chmod <a|u|g|o><+|-|=><r|w|x> file
权限定义:
u(user) | 文件所有者/拥有者 |
g(group) | 文件所属组/拥有组 |
o(others) | 其他用户 |
a(all) | 所有 |
+ | 增加 |
- | 移除 |
= | 设定 |
r(read) | 可读权限 |
w(write) | 可写权限 |
x(execute) | 可执行权限 |
设定权限前:
设定权限后:
3)数字方式设定权限
bool:(on off )(true faluse)(yes no)(0 1)
权限波尔指表示方式:
例如:755 = rwx | r-x | r-x =7 5 5 r-x rw- --x = 561
将 lee1 文件的权限改为561,也就是 r-xrw---x。
字符表示 | 二进制表示 | 数字表示 |
rwx | 111 | 7 |
rw- | 110 | 6 |
r-x | 101 | 5 |
r-- | 100 | 4 |
-wx | 011 | 3 |
-w- | 010 | 2 |
--x | 001 | 1 |
--- | 000 | 0 |
5. 特殊权限
在 Linux 系统中,用户对文件或目录的访问权限除了 r、w、x 三种一般权限外,还有 SUID(Set Uid) 、SGID(Set Gid) 、Sticky Bit( 粘滞位 ) 三种特殊权限,用于对文件或目录进行更加灵活方便的访问控制。
1)SUID(Set Uid)——冒险位
当一个设置了 SUID 权限的程序被执行时,内核会将进程的有效用户 ID(Effective User ID)临时设置为文件所有者的用户 ID,而实际用户 ID(Real User ID)保持不变。这样,在程序执行期间,该进程就具有了文件所有者的权限。
SUID 只针对二进制可执行文件,当二进制可执行文件开启 SUID ,那么任何人在运行这个文件时产生的进程都以文件拥有者的身份运行,与运行者的身份没有任何关系。
①实时监控进程信息
命令说明:
watch -n 1 | 实时监控 |
ps | 显示进程信息 |
ax | 所有信息 |
user | 进程拥有者 |
group | 进程拥有组 |
comm | 进程名称 |
grep cat | 过滤(将含有cat名称的挑出来) |
ls -l /bin/cat | 查看/bin/cat的权限 |
①haha 用户建立的进程中,所有人和所有组与 /bin/cat 文件的所有人和所有组无关。
②先退出 haha 用户界面,用 root 用户身份对 /bin/cat 文件建立 SUID 权限,将 u 中的 x 变为 s 。然后再次进入 haha 用户,建立 /bin/cat 进程,受 s 的影响,此时 haha 用户由 /bin/cat 进程的拥有者运行。
2)SGID(Set Gid)——强制位
对于可执行文件,当设置了 SGID 权限的程序被执行时,进程的有效组 ID(Effective Group ID)会临时被设置为文件所属组的组 ID。对于目录,设置了 SGID 权限后,在该目录下创建的新文件和子目录将自动继承该目录的组,而不是创建者的默认组。
对目录:
①进入 mnt 目录界面,建立 lxt 目录,并建立 lxt 目录的拥有组为 lee , 随后打开监控界面。
②建立 haha 用户,不能更改用户的主组,于是更改用户附加组为 lee , 查看用户id信息,确定 haha 用户的主组为 haha ,附加组为 lee 。
③若在 lxt 目录中建立文件,文件拥有组应为目录的拥有组。切换到 haha 用户的界面,在 lxt 目录中建立名为 hahafile1 的文件,但其拥有组是它的主组 haha ,这在 lxt 目录中不合适。
③为了让在 lxt 目录中建立文件时,拥有组都与 lxt 目录的拥有组相同,可设置 SGID ,让该目录下创建的文件和子目录都继承该目录的拥有组。( g 中的 x 变为 s )
格式:chmod 2原文件权限 目录 或 chmod g+s 目录(Set Gid 的权限值为2)
随后再进入 haha 用户界面,在 lxt 目录中建立 hahafile2 文件,可看到 hahafile2 文件的拥有组为它的附加组 lee ,而不是它的主组 haha ,对于已经存在的 hahafile1 文件不生效。
对文件:
SGID 对于文件,仅对二进制可执行文件生效,当开启 SGID 的二进制可执行文件被任何用户产生进程时,都属于二进制可执行文件的所有者和所有组无关。
①实时监控进程信息
①haha 用户建立的进程中,所有人和所有组与 /bin/cat 文件的所有人和所有组无关。
②先退出 haha 用户界面,用 root 用户身份对 /bin/cat 文件建立 SGID 权限,将 g 中的 x 变为 s 。然后再次进入 haha 用户,建立 /bin/cat 进程,受 s 的影响,此时 haha 用户的拥有组为 /bin/cat 进程的拥有组。
3)Sticky Bit——粘滞位
①进入 mnt 目录界面,建立 pub 目录,并设定 pub 目录的权限为777,随后进入监控界面。同时,另外打开两个命令界面,分别切换到叫做 lee 和 admin 的用户(若无用户,自行建立)。
切换用户命令:su 用户名 建立用户命令:useradd 用户名


② lee 和 admin 用户分别在 pub 目录建立 leefile 和 adminfile 文件,是成功的。
③ admin 用户可以删除自己和 lee 用户在 pub 目录建立的文件,在日常生活中这是不安全的行为。
④在根目录里开启 pub 目录的 t 权限(以下两条命令任何一条都可以),那么这个目录中的文件只能被文件所有者删除。
开启 t 权限的命令:chmod 1777 目录名 或 chmod o+t 目录名
⑤开启 t 权限后,再重新建立 leefile 和 adminfile 文件,再由 admin 用户删除,结果是 admin 用户删除不了不属于它的文件,只能由文件所有者删除。
三、ACL权限列表
1. ACL简介
ACL(Access Control Lists,访问控制列表)是一种灵活的权限管理机制,用于在 Linux 系统中对文件和目录设置更细致的权限。传统的 Linux 文件权限模型基于所有者(owner)、所属组(group)和其他用户(others)进行权限分配,分别对应读(r)、写(w)、执行(x)权限。
然而,这种模型在一些复杂的场景下显得不够灵活。例如,当需要给特定用户或组超出传统权限模型的权限时,ACL 就派上了用场。通过 ACL,可以针对单个用户或组设置独立的读、写、执行权限,从而实现更精细的访问控制。
2.ACL权限列表的读取
①监控,实时查看 lxt 目录的权限变化。
②建立用户 admin ,设定 /mnt/lxt/ 目录中的 admin 用户的权限为 rwx ,此时 lxt 目录的权限后出现 + ,说明 ACL 列表功能开启。
当文件或目录权限为后出现 + 代表权限列表开启,那么 ls -l 查看到的权限将被弃用。
设定权限命令:setfacl -m u:文件名:权限 目录名
③显示内容分析
查看内容命令:getfcal 目录名
getfacl: Removing leading '/' from absolute path names #把文件最前面的 / 符合去掉
# file: mnt/lxt/ #文件名称
# owner: root #文件拥有者
# group: root #文件拥有组
user::rwx #文件拥有者权限
user:admin:rwx #特殊指定用户权限
group::r-x #文件拥有组权限
mask::rwx #
other::r-x #其他用户权限
④进入监控,更改 user 的权限为 rx ,增加拥有组 lee 且权限为 0,删除列表中的 admin ,随后关闭 ACL 列表功能(无 + ) 。
设定权限:-m
setfacl -m u:用户名:权限 指定文件名
setfacl -m u:组名:权限 指定文件名
删除权限:-x
setfacl -x u:用户名 指定文件名
setfacl -x g:组名 指定文件名
关闭ACL列表功能(删除所有ACL权限):-b
setfacl -b 文件名
注意: 若开启了 ACL 列表功能(出现 + ),则不能使用 chmod 更改权限!
3.ACL的默认权限
设置默认 ACL,仅对目录有效,当在该目录下创建新文件或子目录时,新创建的对象将继承该目录的默认 ACL 规则。
1)实现用户在目录中可写
仅对目录本身生效。
②让 admin 用户在 lxt 目录可写,开启 ACL 列表功能,设定指定用户 admin 的权限。在另一个命令界面切换到 admin 用户,进入 /mnt/lxt 目录界面,显示 admin 用户可以在 /mnt/lxt 目录中建立新文件 file 。
格式:setfacl -m u:文件名: 权限 目录名
2)实现用户在目录及子目录中可写
对于 /mnt/lxt 目录和目录中已经存在的内容生效。
①在 /mnt/lxt 目录中建立 test 和 test1 两个子目录,并查看 /mnt/lxt 目录权限,+ 表示开启了 ACL 列表功能,然后查看 /mnt/lxt 目录内容的权限,都还未开启 ACL 列表功能。
②为让目录和里面的内容都开启 ACL 列表,并且对 admin 生效,在设定指定用户 admin 的权限的命令上加上 -R ,随后查看 /mnt/lxt 目录内容的权限,无论是文件还是子目录都开启了 ACL 列表。
格式:setfacl -Rm u:文件名: 权限 目录名 (-R 递归)
3)实现用户在新建文件中可写
针对与/mnt/westosdir目录中新建文件生效。
①先在 /mnt/lxt 目录下新建子目录 test2 ,查看 lxt/test2 的 权限,并无开启 ACL 列表功能。
②在设定指定用户 admin 的权限的命令上加上 d ,表示 /mnt/lxt 目录中建立的目录会自动复制 default 权限到文件或目录的 ACL 列表中,开启 ACL 列表功能。
格式:setfacl -m d:u:文件名: 权限 目录名
四、attr 权限(文件属性权限)
attr 权限是 Linux 系统中一种对文件或目录赋予额外属性的机制。它能进一步增强对文件访问和操作的控制,提供了比传统 r(读)、w(写)、x(执行)权限更细致的管控维度。这些属性可以限制文件的某些操作,如防止文件被删除、修改,或者使其只能追加写入等。
attr 权限限制所有用户(包括 root 超级用户)i: 不能作任何的更改a: 只能添加不能删除chattr +a 文件或目录 (开启 a 权限)chattr -a 文件或目录 (关闭 a 权限)chattr +i 文件或目录 (开启 i 权限)chattr -i 文件或目录 (关闭 i 权限)lsattr 文件或目录 (查看 attr 权限)
1.实现任何用户只能添加文件内容,不可更改和删除
1)对目录
①超级用户可对文件进行读和写,但不可执行文件。先在桌面建立 lxt 目录,并在目录里面建立 lee 文件,在 root 用户里,可将 123456 写入 lee 文件中,也可查看其内容。
②设定 attr 的 a 权限给 lxt 目录,并查看是否成功添加权限。随后可以在 lxt 目录中建立 lee1 文件,但不可以删除 lee1 文件。
2)对文件
①虽然 lxt 目录有 a 权限,但其中的 lee 文件没有 a 权限, root 用户仍然可以清空 lee 文件中的内容。
②将 112233 写入 /lxt/lee 文件中,设定 attr 的 a 权限给 lee 文件,并查看是否成功添加权限,然后可以追加 haha 写入 lee 文件内容的后面,但不可清空 lee 文件的内容,也不可更改。
3)关闭权限
关闭 attr 的 a 权限后,便可以成功清除 lee 文件的内容。
2.实现任何用户只能查看文件内容,不可更改、添加、删除内容
此处以 lee 文件为例,i 权限与 a 权限设定方式相同,只是功能不同。
①将 aabbcc 写入 /lxt/lee 文件中,设定 attr 的 i 权限给 lee 文件,并查看是否成功添加权限,随后可看到无法追加内容写入 lee 文件,也不可清空 lee 文件的内容,只能查看 lee 文件内容。
②关闭 attr 的 i 权限后,便可以追加和删除 lee 文件的内容。