Linux权限管理的基本概念
Linux系统中的权限管理是保障系统安全的核心机制。每个文件和目录都有特定的权限设置,决定哪些用户或用户组可以对其进行读取、写入或执行操作。权限分为三类:
- 所有者权限(u):文件创建者拥有的权限
- 所属组权限(g):文件所属用户组成员拥有的权限
- 其他用户权限(o):系统中其他所有用户的权限
权限通过字符或数字表示:
- 字符表示法:
r(read):读取权限w(write):写入权限x(execute):执行权限
- 数字表示法(八进制):
4对应读取2对应写入1对应执行- 通过数字相加组合表示权限(如7=4+2+1表示rwx)
查看文件和目录权限
使用ls -l命令可以详细查看文件或目录的权限信息。典型输出格式如下:
-rw-r--r-- 1 user group 1024 Jan 1 10:00 file.txt
drwxr-xr-x 2 user group 4096 Jan 1 10:00 directory/
权限字段分解:
- 第1个字符:文件类型
-:普通文件d:目录l:符号链接- 其他特殊文件类型(如c,b,p,s等)
- 后续9个字符:每3个一组分别表示所有者、所属组和其他用户权限
rwx:可读可写可执行r--:仅可读r-x:可读可执行
修改文件权限
chmod命令用于修改文件或目录的权限,支持两种修改方式:
-
字符方式(适合对现有权限进行增量修改):
-
数字方式(适合批量设置精确权限):
修改文件所有者和所属组
-
chown命令:1chown user:group file.txt # 同时修改所有者和所属组 2chown user file.txt # 仅修改所有者 3chown :group file.txt # 仅修改所属组- 常用选项:
-R:递归修改目录下所有文件--reference=参照文件:使用参照文件的属性
- 常用选项:
-
chgrp命令:1chgrp developers project/ 2chgrp -R staff /shared # 递归修改
特殊权限设置
-
SetUID(suid):
-
SetGID(sgid):
-
Sticky Bit:
默认权限设置
umask决定了新建文件和目录的默认权限:
- umask值通过屏蔽权限位实现
- 文件默认权限:666 - umask
- 目录默认权限:777 - umask
查看当前umask:
1umask # 通常显示0022或0002
设置umask:
1umask 0027 # 结果权限:文件640,目录750 2umask 0002 # 更宽松的设置
永久设置:可添加到~/.bashrc或/etc/profile中
ACL权限管理
ACL(Access Control List)提供更细粒度的权限控制:
-
查看ACL:
1getfacl /shared/docs -
设置ACL:
1setfacl -m u:alice:rwx /shared/docs # 为用户alice添加权限 2setfacl -m g:developers:rw- /shared/docs 3setfacl -x u:bob /shared/docs # 移除bob的ACL条目 -
默认ACL(影响新建文件):
1setfacl -d -m u:alice:rwx /shared/docs -
递归设置:
1setfacl -R -m u:alice:r-x /projects
实际应用场景
-
Web服务器目录:
1chown -R www-data:www-data /var/www 2find /var/www -type d -exec chmod 755 {} \; 3find /var/www -type f -exec chmod 644 {} \; -
共享协作目录:
1mkdir /shared/team 2chgrp developers /shared/team 3chmod 2775 /shared/team # 设置SGID 4setfacl -d -m g:developers:rwx /shared/team -
用户私有目录:
1chmod 700 /home/username 2chmod 600 /home/username/.ssh/*
总结
Linux权限管理是一个层次化的安全体系:
- 基础权限:控制三类用户的基本访问
- 特殊权限:解决特定场景下的权限需求
- ACL:提供更精细的权限分配
最佳实践建议:
- 遵循最小权限原则
- 对敏感文件设置严格权限(如600)
- 定期审计关键目录的权限设置
- 在共享环境中合理使用SGID和Sticky bit
- 对复杂权限需求使用ACL而非过度放宽基础权限