Linux服务器被黑99%都是权限设置出了问题

Lear 2025-07-17 09:00:00
Categories: > > Tags:

Linux服务器被黑?99%都是权限设置出了问题!

一、Linux权限系统概述


Linux作为多用户操作系统,其权限系统是保障系统安全和数据完整性的核心机制。权限系统通过控制用户对文件和目录的访问权限,确保只有授权用户才能执行相应操作。


1.1 权限系统的重要性






1.2 权限模型基础


Linux权限系统基于三个基本概念:





二、文件权限详解


2.1 基本权限类型


Linux文件系统中存在三种基本权限:


读权限(r - Read)





写权限(w - Write)





执行权限(x - Execute)





2.2 权限表示方法


符号表示法


-rwxr-xr-x 1 user group 1024 Jan 15 10:30 filename


权限字符串解析:






数字表示法


权限可以用三位八进制数表示:





常见权限组合:






2.3 文件类型标识









三、目录权限特殊性


3.1 目录权限含义


目录权限与文件权限有着本质区别:


目录读权限(r)





目录写权限(w)





目录执行权限(x)





3.2 目录权限组合效果


权限组合 效果
r-x 可以进入目录并列出文件
-wx 可以进入目录并创建/删除文件,但不能列出现有文件
–x 只能进入目录,不能列出文件
r– 可以列出文件名,但不能进入目录

四、权限管理命令


4.1 查看权限


ls命令


# 查看当前目录文件权限
ls -l

# 查看特定文件权限
ls -l filename

# 查看目录权限
ls -ld dirname

# 显示隐藏文件权限
ls -la


stat命令


# 详细查看文件信息
stat filename

# 只显示权限信息
stat -c ‘%A %n’ filename


4.2 修改权限


chmod命令


符号模式


# 给所有者添加执行权限
chmod u+x filename

# 给组去除写权限
chmod g-w filename

# 给其他用户设置只读权限
chmod o=r filename

# 给所有人添加读权限
chmod a+r filename

# 组合操作
chmod u+x,g-w,o=r filename


数字模式


# 设置权限为755
chmod 755 filename

# 设置权限为644
chmod 644 filename

# 递归修改目录权限
chmod -R 755 dirname


权限符号说明









4.3 修改所有者和组


chown命令


# 修改文件所有者
chown username filename

# 修改文件所有者和组
chown username:groupname filename

# 只修改组
chown :groupname filename

# 递归修改目录
chown -R username:groupname dirname


chgrp命令


# 修改文件组
chgrp groupname filename

# 递归修改目录组
chgrp -R groupname dirname


五、特殊权限


5.1 SUID(Set User ID)


概念





使用场景


# 设置SUID
chmod u+s filename
chmod 4755 filename

# 查看SUID文件
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 Jul 15 2021 /usr/bin/passwd


安全考虑





5.2 SGID(Set Group ID)


对文件的作用





对目录的作用




# 设置SGID
chmod g+s dirname
chmod 2755 dirname

# 查看效果
ls -ld dirname
drwxr-sr-x 2 user group 4096 Jan 15 10:30 dirname


5.3 Sticky Bit


概念





典型应用


# /tmp目录的权限
ls -ld /tmp
drwxrwxrwt 12 root root 4096 Jan 15 10:30 /tmp

# 设置sticky bit
chmod +t dirname
chmod 1755 dirname


六、默认权限与umask


6.1 umask概念


umask决定了新建文件和目录的默认权限:





6.2 umask使用


# 查看当前umask
umask

# 以符号形式显示
umask -S

# 设置umask
umask 022

# 临时设置umask
umask 077


6.3 常见umask值


umask 文件权限 目录权限 说明
022 644 755 默认设置,其他用户可读
077 600 700 安全设置,只有所有者可访问
002 664 775 组协作,组成员可写

七、访问控制列表(ACL)


7.1 ACL概述


ACL提供了比传统权限更精细的控制:





7.2 ACL命令


getfacl命令


# 查看文件ACL
getfacl filename

# 查看目录ACL
getfacl dirname


setfacl命令


# 给特定用户设置权限
setfacl -m u:username:rwx filename

# 给特定组设置权限
setfacl -m g:groupname:rw filename

# 设置默认ACL(目录)
setfacl -d -m u:username:rwx dirname

# 删除ACL
setfacl -x u:username filename

# 删除所有ACL
setfacl -b filename


7.3 ACL实例


# 创建测试文件
touch test.txt

# 设置ACL
setfacl -m u:alice:rw test.txt
setfacl -m u:bob:r test.txt

# 查看ACL
getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:alice:rw-
user:bob:r–
group::r–
mask::rw-
other::r–


八、权限故障排除


8.1 常见权限问题


无法访问文件


# 检查文件权限
ls -l filename

# 检查目录权限
ls -ld dirname

# 检查完整路径权限
namei -l /path/to/file


无法执行脚本


# 添加执行权限
chmod +x script.sh

# 检查脚本内容
file script.sh


8.2 权限诊断工具


使用find查找权限问题


# 查找具有SUID权限的文件
find /usr -perm -4000 -type f 2>/dev/null

# 查找世界可写的文件
find /home -perm -002 -type f 2>/dev/null

# 查找没有所有者的文件
find / -nouser -o -nogroup 2>/dev/null


权限修复脚本


#!/bin/bash
# 修复常见权限问题

# 修复家目录权限
chmod 755 /home/username
chmod 700 /home/username/.ssh
chmod 600 /home/username/.ssh/authorized_keys

# 修复Web目录权限
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;


九、安全最佳实践


9.1 权限设置原则


最小权限原则





权限分离





9.2 权限审计


定期检查


# 检查SUID/SGID文件
find / -perm -4000 -o -perm -2000 -type f 2>/dev/null

# 检查世界可写文件
find / -perm -002 -type f 2>/dev/null

# 检查无主文件
find / -nouser -o -nogroup 2>/dev/null


权限监控


# 使用auditd监控权限变化
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/shadow -p wa -k shadow_changes


9.3 权限管理策略


用户管理





组管理





十、高级权限管理


10.1 SELinux集成


SELinux提供了强制访问控制(MAC):


# 查看SELinux状态
sestatus

# 查看文件SELinux上下文
ls -Z filename

# 设置SELinux上下文
chcon -t httpd_exec_t /var/www/cgi-bin/script.cgi


10.2 sudo权限管理


sudoers文件配置


# 编辑sudoers文件
visudo

# 示例配置
username ALL=(ALL:ALL) ALL
%wheel ALL=(ALL:ALL) ALL
username ALL=(ALL) NOPASSWD: /usr/bin/systemctl


sudo使用技巧


# 以其他用户身份运行
sudo -u username command

# 保持环境变量
sudo -E command

# 切换到root shell
sudo -i


10.3 文件系统挂载选项


安全挂载选项


# /etc/fstab示例
/dev/sda1 /tmp ext4 defaults,nodev,nosuid,noexec 0 2
/dev/sda2 /home ext4 defaults,nodev,nosuid 0 2


挂载选项说明





十一、实战案例


11.1 Web服务器权限配置


Apache/Nginx权限设置


# 创建web用户和组
groupadd webgroup
useradd -g webgroup webuser

# 设置网站目录权限
chown -R webuser:webgroup /var/www/html
chmod -R 755 /var/www/html

# 设置特殊目录权限
chmod 750 /var/www/html/config
chmod 600 /var/www/html/config/database.conf


上传目录权限


# 创建上传目录
mkdir /var/www/uploads
chown webuser:webgroup /var/www/uploads
chmod 755 /var/www/uploads

# 设置文件上传权限
chmod g+w /var/www/uploads


11.2 数据库权限配置


MySQL数据目录


# 设置MySQL数据目录权限
chown -R mysql:mysql /var/lib/mysql
chmod 700 /var/lib/mysql
chmod 600 /var/lib/mysql/*


备份目录权限


# 创建备份目录
mkdir /backup/mysql
chown mysql:mysql /backup/mysql
chmod 700 /backup/mysql


11.3 日志文件权限


系统日志权限


# 设置日志目录权限
chmod 755 /var/log
chmod 644 /var/log/messages
chmod 640 /var/log/secure


应用日志权限


# 创建应用日志目录
mkdir /var/log/myapp
chown appuser:appgroup /var/log/myapp
chmod 750 /var/log/myapp


十二、权限管理脚本


12.1 权限检查脚本


#!/bin/bash
# 权限安全检查脚本

echo “=== 权限安全检查报告 ===”
echo “检查时间: $(date)”
echo

# 检查SUID文件
echo “1. SUID文件检查:”
find / -perm -4000 -type f 2>/dev/null | head -10

# 检查世界可写文件
echo “2. 世界可写文件检查:”
find /home -perm -002 -type f 2>/dev/null | head -10

# 检查无主文件
echo “3. 无主文件检查:”
find / -nouser -o -nogroup 2>/dev/null | head -10

# 检查重要文件权限
echo “4. 重要文件权限检查:”
ls -l /etc/passwd /etc/shadow /etc/sudoers 2>/dev/null


12.2 权限修复脚本


#!/bin/bash
# 权限修复脚本

# 修复系统文件权限
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 440 /etc/sudoers

# 修复用户家目录权限
for user in $(awk -F: ‘$3 >= 1000 {print $1}’ /etc/passwd); do
if [ -d “/home/$user” ]; then
chmod 755 “/home/$user”
chown “$user:$user” “/home/$user”
fi
done

# 修复临时目录权限
chmod 1777 /tmp
chmod 1777 /var/tmp


十三、总结


Linux文件及目录权限系统是系统安全的基础,正确理解和使用权限系统对于运维工程师至关重要。通过本文的详细介绍,您应该能够:


  1. 1. 掌握基本概念:理解用户、组、权限的基本概念

  1. 2. 熟练使用命令:掌握chmod、chown、chgrp等权限管理命令

  1. 3. 理解特殊权限:了解SUID、SGID、Sticky Bit的作用和使用

  1. 4. 应用安全实践:遵循最小权限原则,定期进行权限审计

  1. 5. 解决实际问题:能够诊断和解决常见的权限问题

权限管理是一个需要不断学习和实践的领域,随着系统复杂性的增加,还需要结合SELinux、ACL等高级功能来构建更加安全的系统环境。


学习建议


  1. 1. 动手实践:通过实际操作加深理解

  1. 2. 定期审查:建立权限审查机制

  1. 3. 关注安全:及时了解最新的安全威胁

  1. 4. 文档记录:记录权限设置的原因和过程

  1. 5. 团队协作:制定团队权限管理规范

掌握Linux权限系统不仅能够提高系统安全性,也是成为优秀运维工程师的必备技能。希望本文能够帮助您在实际工作中更好地管理和维护Linux系统。