学习目标
- 理解本节涉及的核心主题:Linux 安全管理、用户认证与授权、配置
sudo权限、配置用户组与访问控制。 - 掌握重点命令或工具:
sudo、ufw、firewalld。 - 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:Linux 安全管理、用户认证与授权、配置
sudo权限、配置用户组与访问控制、系统安全基础、防火墙配置 - 重点命令:
sudo、ufw、firewalld - 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
Linux 安全管理
用户认证与授权
用户认证与授权是确保只有经过授权的用户才能访问系统资源的关键机制。合理配置用户权限和访问控制策略,可以有效防止未经授权的访问和潜在的安全威胁。
配置 sudo 权限
sudo(Super User Do)允许授权用户以超级用户或其他用户的身份执行命令,提升了系统管理的灵活性和安全性。
添加用户到 sudo 组
在多数Linux发行版中,sudo 权限通过将用户添加到特定的组(如 sudo 或 wheel)来管理。
步骤:
-
添加用户到
sudo组sudo usermod -aG sudo username说明:
-aG:将用户追加到指定组,而不从其他组中移除。sudo:目标组名称。username:要添加到组的用户名。
-
验证用户是否已添加到
sudo组groups username示例输出:
username : username sudo
编辑 /etc/sudoers 文件(使用 visudo)
直接编辑 /etc/sudoers 文件可以细化和定制 sudo 权限配置。为了避免语法错误,建议使用 visudo 工具进行编辑。
步骤:
-
打开
sudoers文件sudo visudo -
配置全局
sudo权限
在文件中添加以下行,允许sudo组的所有成员拥有sudo权限:%sudo ALL=(ALL:ALL) ALL -
配置特定用户或组的
sudo权限
为特定用户赋予sudo权限:username ALL=(ALL) ALL为特定组赋予
sudo权限:%admin ALL=(ALL) ALL -
配置
NOPASSWD选项
NOPASSWD选项允许用户在使用sudo时不需要输入密码。谨慎使用此选项,以免降低系统安全性。
示例:username ALL=(ALL) NOPASSWD:ALL或为整个组配置:
%sudo ALL=(ALL) NOPASSWD:ALL
注意事项:
- 始终使用
visudo进行编辑,以确保文件语法正确。 - 最小化授予
NOPASSWD权限的用户数量,遵循最小权限原则。
配置用户组与访问控制
用户组与访问控制(Access Control)允许系统管理员对文件和目录的访问权限进行精细管理,确保只有特定用户或组能够访问敏感资源。
创建与管理用户组
创建新用户组
sudo groupadd groupname
示例:
sudo groupadd developers
将用户添加到用户组
sudo usermod -aG groupname username
示例:
sudo usermod -aG developers alice
验证用户所属组
groups username
示例输出:
alice : alice developers sudo
设置组权限
通过修改文件的所属组和设置组权限,可以控制特定组的访问权限。
使用 chgrp 修改文件所属组
sudo chgrp groupname /path/to/file
示例:
sudo chgrp developers /var/www/html/index.html
使用 chmod 设置组权限
r:读取权限w:写入权限x:执行权限
示例:
sudo chmod 750 /var/www/html/index.html
说明:
7(所有者):读、写、执行5(组):读、执行0(其他):无权限
设置目录及其子目录的组权限
sudo chmod -R 750 /var/www/html/
使用 ACL(访问控制列表)
ACL 提供了比传统 Unix 权限更细粒度的权限控制,允许为单个用户或组设置特定的权限。
安装 ACL 工具(如 acl)
在Debian/Ubuntu:
sudo apt install acl
在CentOS/RHEL:
sudo yum install acl
使用 setfacl 设置 ACL 规则
基本语法:
setfacl -m u:username:permissions /path/to/file
setfacl -m g:groupname:permissions /path/to/file
示例:
- 为用户
bob赋予读取和写入权限:sudo setfacl -m u:bob:rw /var/www/html/index.html - 为组
developers赋予读取权限:sudo setfacl -m g:developers:r /var/www/html/index.html
使用 getfacl 查看 ACL 规则
基本用法:
getfacl /path/to/file
示例:
getfacl /var/www/html/index.html
示例输出:
user::rw-
user:bob:rw-
group::r--
mask::rw-
other::---
说明:
user:::文件所有者的权限user:bob::特定用户bob的权限group:::文件所属组的权限mask:::最大权限other:::其他用户的权限
系统安全基础
系统安全基础涉及防火墙配置和系统安全强化。通过配置防火墙,可以有效控制网络流量;通过安全强化措施,如SELinux和AppArmor,可以增强系统的安全性和稳定性。
防火墙配置
防火墙是网络安全的第一道防线,通过定义规则来控制进入和离开的网络流量,防止未授权访问和潜在的网络攻击。
iptables
iptables 是 Linux 内核的一个用户空间工具,用于配置和管理网络包过滤规则。虽然现代发行版逐渐转向更高级的工具(如 firewalld 或 ufw),但了解 iptables 的基础知识仍然十分重要。
基本概念与链(INPUT, OUTPUT, FORWARD)
- 表(Table):
iptables使用不同的表来处理不同类型的规则,如filter(默认)、nat、mangle。 - 链(Chain)
:每个表包含多个链,链是规则的有序列表。主要链包括:- INPUT:处理进入系统的数据包。
- OUTPUT:处理从系统发送出去的数据包。
- FORWARD:处理通过系统转发的数据包。
添加与删除规则
添加规则
sudo iptables -A CHAIN -p protocol --dport port -j ACTION
示例:允许所有来自本地回环接口的流量
sudo iptables -A INPUT -i lo -j ACCEPT
示例:允许SSH(端口22)流量
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
删除规则
sudo iptables -D CHAIN -p protocol --dport port -j ACTION
示例:删除允许SSH(端口22)流量的规则
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT
保存与恢复规则
iptables 规则在系统重启后不会自动保留,需要手动保存和恢复。
保存规则
在Debian/Ubuntu:
sudo apt install iptables-persistent
sudo netfilter-persistent save
在CentOS/RHEL:
sudo service iptables save
恢复规则
在Debian/Ubuntu:
sudo netfilter-persistent reload
在CentOS/R
HEL:
sudo systemctl enable iptables
sudo systemctl start iptables
常用规则示例
默认策略设置
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
允许已建立和相关的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
允许HTTP和HTTPS流量
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
拒绝所有其他流量
sudo iptables -A INPUT -j DROP
保存规则
sudo iptables-save | sudo tee /etc/iptables/rules.v4
ufw
ufw(Uncomplicated Firewall)是一个用户友好的防火墙管理工具,简化了 iptables 的配置过程,特别适用于Debian和Ubuntu系统。
基本用法
启用 ufw
sudo ufw enable
禁用 ufw
sudo ufw disable
查看 ufw 状态
sudo ufw status verbose
常用命令与配置
允许特定端口
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
拒绝特定端口
sudo ufw deny 23/tcp
允许特定IP访问端口
sudo ufw allow from 192.168.1.100 to any port 22
删除规则
sudo ufw delete allow 22/tcp
启用日志记录
sudo ufw logging on
示例与应用场景
示例1:设置基本防火墙规则
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
应用场景:
- Web服务器配置:允许HTTP和HTTPS流量,确保Web服务正常运行。
- 开发环境:允许SSH访问,禁止其他入站流量,确保远程管理的安全性。
firewalld
firewalld 是一个动态防火墙管理工具,提供了更高级和灵活的防火墙配置方式,支持区域和服务的概念,适用于CentOS、RHEL和Fedora等发行版。
基本概念与用法
- 区域(Zone):定义不同的信任级别,适用于不同的网络环境(如家庭网络、公共网络)。
- 服务(Service):预定义的一组防火墙规则,简化常见服务(如HTTP、SSH)的配置。
- 持久性:防火墙规则可以在运行时动态调整,而无需重启服务。
配置区域与服务
查看当前区域
sudo firewall-cmd --get-active-zones
示例输出:
public
interfaces: eth0
查看区域中的服务
sudo firewall-cmd --zone=public --list-services
示例输出:
ssh dhcpv6-client
添加服务到区域
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
移除服务从区域
sudo firewall-cmd --zone=public --remove-service=ssh --permanent
sudo firewall-cmd --reload
允许特定端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
常用命令与示例
查看所有可用区域
sudo firewall-cmd --get-zones
查看所有可用服务
sudo firewall-cmd --get-services
允许SSH连接
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reload
拒绝HTTP流量
sudo firewall-cmd --zone=public --remove-service=http --permanent
sudo firewall-cmd --reload
实时监控防火墙状态
sudo firewall-cmd --state
应用场景:
- 企业网络:使用不同的区域配置内外网络流量,提高网络安全性。
- 动态环境:根据网络环境的变化,动态添加或移除服务规则,确保系统灵活应对。
安全强化
安全强化措施通过限制系统和应用程序的权限和行为,减少潜在的攻击面,提升系统的整体安全性。
SELinux
SELinux(Security-Enhanced Linux)是一个内核模块,提供强制访问控制(MAC)机制,增强系统的安全性。
基本概念与模式(Enforcing, Permissive, Disabled)
- Enforcing:SELinux 强制执行策略,阻止未授权的访问并记录日志。
- Permissive:SELinux 不阻止访问,但会记录警告信息,适用于调试和策略制定。
- Disabled:完全禁用 SELinux,不进行任何安全策略的应用。
查看 SELinux 状态
sestatus
示例输出:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
配置与管理 SELinux 策略
更改 SELinux 模式
sudo setenforce 0 # Permissive
sudo setenforce 1 # Enforcing
sudo nano /etc/selinux/config
编辑 /etc/selinux/config 文件
SELINUX=enforcing
SELINUXTYPE=targeted
安装并管理 SELinux 工具
sudo yum install policycoreutils selinux-policy-targeted
创建自定义 SELinux 策略
创建和管理自定义策略需要深入理解SELinux的策略语言和上下文。以下是一个简单的示例,展示如何为新服务创建策略。
示例:为自定义服务创建 SELinux 策略
-
创建策略文件
nano myservice.te内容:
module myservice 1.0; require { type httpd_t; class tcp_socket name_bind; } # Allow myservice to bind to port 8080 allow httpd_t self:tcp_socket name_bind; -
编译并安装策略
sudo checkmodule -M -m -o myservice.mod myservice.te sudo semodule_package -o myservice.pp -m myservice.mod sudo semodule -i myservice.pp
常用命令与示例
-
查看 SELinux 上下文
ls -Z /path/to/file示例:
ls -Z /var/www/html/index.html -
更改文件的 SELinux 上下文
sudo chcon -t httpd_sys_content_t /var/www/html/index.html -
恢复默认上下文
sudo restorecon -v /var/www/html/index.html
应用场景:
- Web服务器安全:使用SELinux限制Web服务器的文件访问权限,防止潜在的文件泄露和篡改。
- 自定义服务安全:为自定义开发的服务配置SELinux策略,确保其只能执行特定的操作。
AppArmor
AppArmor(Application Armor)是另一种Linux安全模块,提供基于路径的访问控制,旨在简化和增强系统的安全性。
基本概念与作用
- 基于路径的访问控制:AppArmor通过配置文件定义应用程序可以访问的资源和权限。
- 配置文件:每个受保护的程序都有一个AppArmor配置文件,通常位于
/etc/apparmor.d/目录下。
查看 AppArmor 状态(aa-status)
sudo aa-status
示例输出:
apparmor module is loaded.
22 profiles are loaded.
22 profiles are in enforce mode.
0 profiles are in complain mode.
0 processes have a profile defined.
配置与管理 AppArmor 配置文件
编辑 AppArmor 配置文件
sudo nano /etc/apparmor.d/usr.sbin.nginx
示例内容:
/usr/sbin/nginx {
# Include common AppArmor abstractions
#include <abstractions/base>
#include <abstractions/nginx>
/var/www/** r,
/var/log/nginx/** rw,
/etc/nginx/** r,
/usr/share/nginx/html/** r,
/usr/sbin/nginx mr,
}
添加新配置文件
为新应用程序创建配置文件:
sudo nano /etc/apparmor.d/usr.bin.myapp
示例内容:
/usr/bin/myapp {
# Include common AppArmor abstractions
#include <abstractions/base>
/etc/myapp/** r,
/var/log/myapp/** rw,
/usr/bin/myapp mr,
}
常用命令与示例
- 启用 AppArmor
sudo systemctl enable apparmor sudo systemctl start apparmor - 加载配置文件
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx - 禁用配置文件
sudo aa-disable /etc/apparmor.d/usr.sbin.nginx - 重新加载 AppArmor 配置
sudo systemctl reload apparmor
应用场景:
- Web服务器安全:限制Web服务器的文件访问权限,防止潜在的文件泄露和篡改。
- 数据库安全:为数据库服务配置严格的访问控制,确保数据的完整性和保密性。
- 自定义应用程序安全:为自定义开发的应用程序创建AppArmor配置文件,限制其操作范围,防止滥用。
本节总结
- 本节主要围绕 Linux 安全管理、用户认证与授权、配置
sudo权限、配置用户组与访问控制、系统安全基础 展开。 - 需要重点掌握的命令或工具包括:
sudo、ufw、firewalld。 - 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
- 可优先复习这些高频命令:
sudo、ufw、firewalld。