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等特殊权限可能带来安全隐患,合理配置。

 


 

posted @ 2024-11-19 17:59  学Java的`Bei  阅读(7)  评论(0编辑  收藏  举报