Linux中的权限管理
一、权限的概念
1.权限的三种基础类别:
权限 | 对文件的影响 | 对目录的影响 |
读(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)——冒险位
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 的二进制可执行文件被任何用户产生进程时,都属于二进制可执行文件的所有者和所有组无关。
①实时监控进程信息
命令说明:
watch -n 1 | 实时监控 |
ps | 显示进程信息 |
ax | 所有信息 |
user | 进程拥有者 |
group | 进程拥有组 |
comm | 进程名称 |
grep cat | 过滤(将含有cat名称的挑出来) |
ls -l /bin/cat | 查看/bin/cat的权限 |
①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 用户删除不了不属于它的文件,只能由文件所有者删除。