Linux权限深入
Linux 是一个多用户、多任务的操作系统,其权限管理系统是保障系统安全性的重要组成部分。
通过合理的权限设置,Linux 能有效地控制用户对文件和目录的访问,防止恶意操作。
1. Linux权限基础
1) 文件权限概述
Linux系统中每个文件或目录都与三组权限相关。
- 所有者(Owner):文件的创建者,默认情况下对文件拥有完全控制权。
- 所属组(Group):文件所属的用户组,组内用户共享特定权限。
- 其他用户(Others):除所有者和所属组外的其他用户。
2) 文件权限
每个文件或目录的权限可以用一个 10 位字符串表示,如:
[文件类型][所有者权限][所属组权限][其他人权限] -rw-r--r-- drwxr-xr--
说明:
第1位:[文件类型]
- - :普通文件
- d :目录
- l :符号链接
- b :块设备文件
- c :字符设备文件
- s :套接字
- p :命名管道
第2~10位:权限
2~4位:[所有者权限] == 被分配的用户;5~7位:[所属组权限] == 该组下的用户的权限;8~10位:[其他人权限] == 非所有者或非该组下的用户;
- r (read):读取文件或列出目录内容;
- w (write):修改文件或创建、删除目录内容;
- x (execute):执行文件或进入目录;
如:
-rw-r--r--:普通文件,所有者有读写权限,所属组和其它用户只有读取权限。
drwxr-xr-x:目录,所有者有读、写、执行权限,组和其他用户有读和执行权限。
说明: [drwxr-xr-x]为目录,所有者有读、写、执行权限,组和其他用户有读和执行权限。
- [2或19]等值,为链接数。可以理解为它自身目录和父目录。
- [root或user]为该目录的所有者。
- [root或user]为该目录的所属组。
- [4096]为该目录占据的磁盘空间大小,单位为字节。
- [Aug 14 22:09] 为时间。
- [static / user] 文件目录。
注意:在使用命令操作时,如:cp-拷贝、zip打包时。使用 用户userA 去文件A去打包文件,通过其他用户的读或执行权限是不可以的,必须有写的权限。所以在设置权限时其他用户是不会给予写的权限。
2. 常见权限管理命令
1) 查看命令:ls -l
通过 ls -l 名称可以查看文件和目录的权限信息:
ls -l usr 或 ls -l /usr/home
ls -l /usr 输出: total 172 drwxr-xr-x 2 root root 69632 Nov 19 06:48 bin 等等...
说明:
权限:drwxr-xr-x
硬链接数:2
所有者:root
所属组:root
文件大小:69632字节
修改时间:Nov 19 06:48
文件名:bin
注意:
注意: ll 命令查看时可能会出现 ll: command not found 的情况。 使用 ls 看看。配合使用。
ll命令不可用:https://www.cnblogs.com/warmNest-llb/p/18555371
2) 修改权限:chmod
chmod 命令用于更改文件或目录的权限,支持两种模式。
a) 数字模式
每种权限使用一个数字表示:
r = 4,w = 2, x = 1将权限相加得出最终值。
数字模式格式为 chmod [权限值] 文件名:
chmod [权限值] 文件名 chmod 755 wenjian.txt
说明:
所有者:7(4+2+1,读、写执行权限)
所属组:5(4+1,读、执行权限)
其他用户:5(4+1,读、执行权限)
b) 符号模式
符号模式格式为 chmod [who][operator][permission] 文件名:
who:u(所有者),g(所属组),o(其他用户),a(所有用户)。
operator:+(添加权限),-(移除权限),=(设置为指定权限)
permission:r,w,x。
如:
chmod [who][operator][permission] 文件名 chmod u+x wenjian.txt # 给所有者添加文件执行权限 chmod g-w wenjian.txt # 移除所属组的写权限 chmod a=r wenjian.txt # 给所有用户只读
3) 修改所有者和组:chmod 和 chgrp
a) 修改所有者
chmod [新所有者] 文件名
chmod [新所有者] 文件名 chmod userA wenjian.txt
b) 修改所属组
chgrp [新组名] 文件名
chgrp [新组名] 文件名 chgrp groupA wenjian.txt
c) 同时修改所有者和组
chown [新所有者]:[新组名] 文件名
chown [新所有者]:[新组名] 文件名 chown userA:groupA wenjian.txt
4) 特殊权限
a) SUID(Set User ID)
- 适用于可执行文件。
- 文件在执行时临时以文件所有者的权限执行。
设置方式与权限显示:
设置: chmod u+s file 显示: -rwsr-xr-x
b) SGID(Set Group ID)
- 适用于可执行文件和目录
- 文件在执行时以所属组权限运行;目录下新文件继承组属性。
设置方式与权限显示:
设置: chmod g+s file 或 目录 显示: -rwxr-sr-x
c) Sticky Bit
- 仅适用于目录
- 目录中的文件只能被其所有者删除或修改。
设置方式与权限显示:
设置: chmod +t 目录 显示: drwxrwxrwt
3. 权限管理实战
场景一:共享目录
在开发环境中,团队成员可能共享文件。通过设置 SGID 和 Sticky Bit,可以实现安全的文件共享。
mkdir /shared # 创建目录shared chmod 2770 /shared # 权限模式 更改权限,其中 2 是特殊权限位,770 是标准权限位。 chgrp developers /shared # 更改目录所属组developers
目录权限为:drwxrws---。
组内可以共享文件,但无法删除其他人的文件。
场景二:防止误删
为了保护重要文件,可以移除写权限:
# 为文件移除写权限 chmod a-w wenjian
如果需要编辑文件,临时添加权限:
# 为文件临时添加权限 chmod u+w wenjian
场景三:设置web服务器目录权限
Web服务器通常运行在特定用户(如:www-data)下,设置合理的权限非常重要。
chmod -R www-data:www-data /var/www/html # www-data:www-data :新的所有者:新的所属组 chmod -R 755 /var/www/html # -r:递归选项,表示递归地更改目录及其所有子目录和文件的所有者和所属组。 # 755:权限模式。 # /var/www/html:要更改所有者和所属组的目录路径。
确保所有者可以完全控制文件。
其他用户只能读取和执行文件。
4. 总结与建议
1) 最小权限原则:只授予必要的权限,避免开放过度。
2) 合理分组:将用户分组以简化权限管理。
3) 定期审理:定期检查权限,及时清理不必要的权限。
4) 特殊权限谨慎使用:SUID、SGID和Sticky Bit等特殊权限可能带来安全隐患,合理配置。