Linux 权限与安全
# Linux 权限与安全
Linux 的权限管理和安全机制是保证系统稳定性和数据安全的重要组成部分。本章将介绍 Linux 的权限模型、文件权限管理、用户权限提升、SELinux 和 AppArmor 安全机制,以及防火墙基础。
# 1. Linux 用户与权限模型
# (1)用户类型
Linux 是一个多用户操作系统,每个用户在系统中都有不同的权限。常见用户类型:
- 超级用户(root):UID 为
0
,拥有系统最高权限,可执行任何操作。 - 普通用户:系统中创建的普通账户,权限受限。
- 系统用户:由系统创建,用于运行服务,如
www-data
(Nginx)、mysql
(MySQL)。
# (2)权限模型
Linux 使用 "所有者(Owner)、用户组(Group)、其他用户(Others)" 的权限模型,每个文件和目录都归属于特定的用户和组,并赋予不同的访问权限:
- 读(r,4):允许查看文件内容或列出目录。
- 写(w,2):允许修改文件或在目录中创建/删除文件。
- 执行(x,1):允许执行文件或访问目录。
使用 ls -l
查看权限:
ls -l file.txt
-rw-r--r-- 1 alice users 1234 Mar 3 12:00 file.txt
1
2
2
解析:
-rw-r--r--
:文件权限(Owner =rw-
,Group =r--
,Others =r--
)。alice
:文件所有者。users
:所属用户组。
# 2. 文件权限管理(chmod, chown, umask)
# (1)修改文件权限(chmod)
chmod
命令用于更改文件权限:
chmod [模式] 文件名
1
常见用法:
chmod 755 script.sh # 赋予所有者 rwx,组和其他用户 rx
chmod u+x script.sh # 仅给所有者增加执行权限
chmod g-w file.txt # 移除用户组写权限
chmod o-r file.txt # 移除其他用户的读取权限
1
2
3
4
2
3
4
# (2)修改文件所有者(chown)
chown
命令用于更改文件所有者或所属组:
chown 用户名 文件名
chown 用户名:组名 文件名
1
2
2
示例:
chown bob file.txt # 变更所有者为 bob
chown bob:developers project # 变更所有者为 bob,组为 developers
1
2
2
# (3)默认权限(umask)
umask
设置新建文件的默认权限:
umask 0022 # 默认文件权限 644(-rw-r--r--),目录 755(drwxr-xr-x)
1
# 3. sudo 与 su 命令
# (1)su 命令
su
(switch user)用于切换用户:
su - 用户名
1
示例:
su - root # 切换到 root 用户
1
# (2)sudo 命令
sudo
允许普通用户以管理员权限执行命令:
sudo 命令
1
示例:
sudo systemctl restart nginx # 以 root 权限重启 nginx
1
配置 sudo
:
visudo
1
示例:
alice ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx
1
允许 alice
以 root 权限重启 nginx,无需输入密码。
# 4. SELinux 与 AppArmor 简介
Linux 额外提供 SELinux 和 AppArmor 作为增强安全机制。
# (1)SELinux
全称:Security-Enhanced Linux,由 NSA 维护。
强制访问控制(MAC):不同于传统的用户权限(DAC),SELinux 通过安全策略限制进程访问资源。
模式
:
Enforcing
(强制):严格执行安全策略。Permissive
(宽容):记录违规行为但不阻止。Disabled
(禁用)。
查看当前状态:
sestatus
1
设置模式:
setenforce 0 # 切换到 Permissive 模式
setenforce 1 # 切换到 Enforcing 模式
1
2
2
# (2)AppArmor
基于路径的访问控制:使用配置文件限制进程权限。
常用于 Ubuntu 和 Debian。
命令
:
aa-status # 查看 AppArmor 状态 aa-enforce /etc/apparmor.d/usr.sbin.nginx # 启用规则
1
2
# 5. 防火墙基础(iptables, firewalld)
防火墙用于控制网络流量,Linux 主要使用 iptables
和 firewalld
。
# (1)iptables
iptables
通过规则表管理数据包的过滤和转发:
iptables -L # 查看规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 SSH 端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许 HTTP 端口
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 允许 HTTPS 端口
iptables -A INPUT -j DROP # 默认拒绝其他流量
iptables -D INPUT -p tcp --dport 80 -j ACCEPT # 删除规则
1
2
3
4
5
6
2
3
4
5
6
保存规则:
iptables-save > /etc/iptables.rules
1
# (2)firewalld
firewalld
是 iptables
的替代方案,支持动态规则:
firewall-cmd --list-all # 查看防火墙状态
firewall-cmd --add-port=22/tcp --permanent # 允许 SSH
firewall-cmd --reload # 重新加载配置
firewall-cmd --remove-port=22/tcp --permanent # 删除规则
1
2
3
4
2
3
4
编辑 (opens new window)
上次更新: 2025/04/01, 01:48:12