Linux基础教程 第十课:安全基础和权限管理

浏览量:24 次 发布时间:2026-01-18 14:59 作者:明扬工控商城 下载docx

最近更新:Linux基础教程 第15课:Linux内核和驱动管理


好的,我们继续第十课。今天学习Linux安全基础和权限管理,这是保护系统安全的核心知识。


第一部分:用户和组的安全管理

1.1 安全原则:最小权限原则

最小权限原则:每个用户和程序只能获得完成工作所需的最小权限。


1.2 查看敏感文件权限

bash

# 查看关键系统文件的权限

ls -l /etc/passwd

ls -l /etc/shadow

ls -l /etc/sudoers

ls -l /etc/ssh/sshd_config


# 这些文件应该只有root能修改

# /etc/passwd: 644 (rw-r--r--)

# /etc/shadow: 600 (rw-------)

# /etc/sudoers: 440 (r--r-----)

1.3 检查用户账户安全

bash

# 检查空密码账户

sudo awk -F: '($2 == "") {print $1}' /etc/shadow


# 检查UID为0的用户(除了root不应该有)

sudo awk -F: '($3 == 0) {print $1}' /etc/passwd


# 检查没有密码过期限制的用户

sudo awk -F: '($5 == 99999) {print $1}' /etc/shadow


# 检查可登录的账户

sudo awk -F: '($7 != "/sbin/nologin" && $7 != "/bin/false") {print $1}' /etc/passwd

1.4 密码策略配置

bash

# 安装密码策略工具

sudo apt install libpam-pwquality


# 配置密码策略

sudo vim /etc/pam.d/common-password

# 添加或修改:password requisite pam_pwquality.so retry=3 minlen=12 difok=3


# 编辑pwquality配置

sudo vim /etc/security/pwquality.conf

示例配置:


text

minlen = 12          # 最小长度12位

dcredit = -1         # 至少1个数字

ucredit = -1         # 至少1个大写字母

lcredit = -1         # 至少1个小写字母

ocredit = -1         # 至少1个特殊字符

minclass = 4         # 至少包含4种字符类型

maxrepeat = 3        # 相同字符最多连续3个

1.5 设置账户过期和锁定

bash

# 设置密码过期策略

sudo chage -M 90 username      # 90天必须修改密码

sudo chage -W 7 username       # 过期前7天提醒

sudo chage -I 30 username      # 过期后30天锁定账户


# 查看密码过期信息

sudo chage -l username


# 立即锁定账户

sudo passwd -l username

sudo usermod -L username


# 解锁账户

sudo passwd -u username

sudo usermod -U username


# 设置账户过期时间

sudo usermod -e 2024-12-31 username  # 指定日期过期

第二部分:文件系统安全

2.1 文件权限深度理解

bash

# 查看文件的完整权限信息

ls -la file.txt

# 输出:-rwxr-xr-x 1 user group 1024 Jan 1 12:00 file.txt


# 第一个字符:文件类型

# - 普通文件

# d 目录

# l 符号链接

# c 字符设备

# b 块设备

# s socket文件

# p 管道文件

2.2 SUID、SGID和Sticky Bit

SUID(Set User ID):执行时以文件所有者身份运行


bash

# 设置SUID(所有者执行位变成s)

chmod u+s file

chmod 4755 file  # 数字设置


# 查看SUID文件(可能有安全风险)

find / -type f -perm -4000 2>/dev/null | head -20

SGID(Set Group ID):目录中新建文件继承目录的组


bash

# 设置SGID(组执行位变成s)

chmod g+s directory

chmod 2755 directory  # 数字设置


# 查看SGID文件

find / -type f -perm -2000 2>/dev/null | head -20

Sticky Bit:只有文件所有者能删除自己的文件


bash

# 设置Sticky Bit(其他人执行位变成t)

chmod o+t directory

chmod 1777 directory  # 数字设置,如/tmp目录

2.3 特殊权限的安全风险

bash

# 检查危险权限的文件

# 任何人都可写的文件

find / -type f -perm -0002 ! -path "/proc/*" 2>/dev/null | head -20


# SUID/SGID的可执行文件

find / -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null


# 查找没有所有者的文件

find / -nouser -o -nogroup 2>/dev/null | head -20


# 检查home目录权限

ls -ld /home/*

# 每个用户的家目录应该是700或750

2.4 文件属性扩展(chattr)

bash

# 安装工具

sudo apt install e2fsprogs


# 添加不可删除属性(即使是root)

sudo chattr +i important_file.txt


# 添加只能追加属性(日志文件)

sudo chattr +a /var/log/syslog


# 查看文件属性

lsattr important_file.txt


# 移除属性

sudo chattr -i important_file.txt


# 常用属性:

# a:只能追加,不能删除或修改

# i:不可修改,不可删除,不可重命名

# A:不更新访问时间

# S:同步写入

第三部分:SELinux和AppArmor

3.1 SELinux(安全增强Linux)

bash

# 检查SELinux状态

getenforce

sestatus


# 安装SELinux工具

sudo apt install selinux-utils selinux-basics


# 切换模式

sudo setenforce 0      # 宽容模式(Permissive)

sudo setenforce 1      # 强制模式(Enforcing)


# 永久设置

sudo vim /etc/selinux/config

# 修改:SELINUX=enforcing 或 SELINUX=permissive


# 查看SELinux日志

sudo ausearch -m avc -ts recent


# 查看文件的安全上下文

ls -Z /etc/passwd

ps -Z  # 查看进程的安全上下文

3.2 AppArmor(Ubuntu默认)

bash

# 检查AppArmor状态

sudo apparmor_status


# 启用/禁用配置文件

sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx

sudo aa-complain /etc/apparmor.d/usr.sbin.nginx

sudo aa-disable /etc/apparmor.d/usr.sbin.nginx


# 重新加载配置

sudo systemctl reload apparmor


# 查看AppArmor日志

sudo dmesg | grep apparmor

sudo journalctl -u apparmor --since today

3.3 创建简单的AppArmor配置文件

bash

# 1. 创建配置文件

sudo vim /etc/apparmor.d/usr.local.myapp

输入内容:


text

#include <tunables/global>


/usr/local/bin/myapp {

 #include <abstractions/base>

 

 # 允许读写自己的日志文件

 /var/log/myapp.log rw,

 

 # 允许读取配置文件

 /etc/myapp.conf r,

 

 # 允许网络连接

 network inet tcp,

 

 # 拒绝其他所有访问

 deny /** rwlkx,

}

bash

# 2. 加载配置文件

sudo apparmor_parser -r /etc/apparmor.d/usr.local.myapp


# 3. 设置为enforce模式

sudo aa-enforce /etc/apparmor.d/usr.local.myapp

第四部分:SSH安全加固

4.1 基本SSH安全配置

bash

# 备份原始配置

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup


# 编辑SSH配置

sudo vim /etc/ssh/sshd_config

推荐配置:


bash

# 修改默认端口(避免22端口扫描)

Port 2222


# 禁用root登录

PermitRootLogin no


# 使用密钥认证,禁用密码认证

PasswordAuthentication no

PubkeyAuthentication yes


# 限制登录用户

AllowUsers alice bob charlie

# 或 AllowGroups ssh-users


# 限制登录IP(可选)

AllowUsers alice@192.168.1.* bob@10.0.0.*


# 限制最大尝试次数

MaxAuthTries 3

MaxSessions 5


# 启用空闲超时

ClientAliveInterval 300

ClientAliveCountMax 2


# 禁用不安全的认证方法

ChallengeResponseAuthentication no

UsePAM yes


# 只允许使用安全的协议

Protocol 2


# 禁用端口转发(如不需要)

AllowTcpForwarding no

4.2 SSH密钥管理

bash

# 生成更强的密钥

ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519

# 或

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_strong


# 在authorized_keys中限制密钥使用

vim ~/.ssh/authorized_keys


# 添加限制选项:

# command="限制命令":只能执行特定命令

# from="192.168.1.*":只允许从特定IP连接

# no-port-forwarding:禁用端口转发

# no-X11-forwarding:禁用X11转发

# no-agent-forwarding:禁用代理转发


# 示例:

from="192.168.1.*",command="/usr/bin/backup-script",no-port-forwarding,no-X11-forwarding ssh-ed25519 AAAAC3...

4.3 使用Fail2Ban防止暴力破解

bash

# 安装Fail2Ban

sudo apt install fail2ban


# 复制默认配置

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local


# 编辑配置

sudo vim /etc/fail2ban/jail.local

添加配置:


ini

[sshd]

enabled = true

port = ssh,2222  # 修改为你使用的端口

filter = sshd

logpath = /var/log/auth.log

maxretry = 3

bantime = 3600

findtime = 600

bash

# 启动服务

sudo systemctl start fail2ban

sudo systemctl enable fail2ban


# 查看状态

sudo fail2ban-client status

sudo fail2ban-client status sshd


# 手动解封IP

sudo fail2ban-client set sshd unbanip 192.168.1.100

第五部分:防火墙深度配置

5.1 UFW高级配置

bash

# 默认策略

sudo ufw default deny incoming  # 默认拒绝所有入站

sudo ufw default allow outgoing # 默认允许所有出站


# 允许特定IP范围

sudo ufw allow from 192.168.1.0/24 to any port 22

sudo ufw allow from 10.0.0.0/8 to any port 3306


# 限制访问频率

sudo ufw limit 22/tcp  # 限制SSH连接尝试


# 允许特定网络接口

sudo ufw allow in on eth0 to any port 80


# 删除规则

sudo ufw status numbered

sudo ufw delete 3  # 删除编号3的规则


# 应用配置

sudo ufw disable  # 临时禁用

sudo ufw enable   # 启用

sudo ufw reload   # 重新加载

5.2 使用iptables(底层防火墙)

bash

# 查看当前规则

sudo iptables -L -n -v


# 保存iptables规则

sudo iptables-save > /etc/iptables.rules


# 恢复规则

sudo iptables-restore < /etc/iptables.rules


# 设置开机加载

sudo vim /etc/rc.local

# 添加:iptables-restore < /etc/iptables.rules


# 常用规则示例:

# 允许已建立的连接

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# 允许本地回环

sudo iptables -A INPUT -i lo -j ACCEPT


# 允许SSH(端口2222)

sudo iptables -A INPUT -p tcp --dport 2222 -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 -P INPUT DROP

sudo iptables -P FORWARD DROP

sudo iptables -P OUTPUT ACCEPT

第六部分:系统审计和监控

6.1 使用auditd审计系统

bash

# 安装auditd

sudo apt install auditd audispd-plugins


# 启动服务

sudo systemctl start auditd

sudo systemctl enable auditd


# 查看审计规则

sudo auditctl -l


# 添加审计规则

sudo auditctl -w /etc/passwd -p wa -k passwd_change

sudo auditctl -w /etc/shadow -p wa -k shadow_change

sudo auditctl -w /etc/sudoers -p wa -k sudoers_change

sudo auditctl -a always,exit -F arch=b64 -S open -S openat -F success=0 -k file_access_fail


# 查看审计日志

sudo ausearch -k passwd_change

sudo ausearch --start today


# 生成报告

sudo aureport

sudo aureport -f  # 文件访问报告

sudo aureport -au # 认证报告

6.2 安全扫描工具

bash

# 安装安全扫描工具

sudo apt install lynis chkrootkit rkhunter


# 使用Lynis进行安全审计

sudo lynis audit system


# 检查rootkit

sudo chkrootkit

sudo rkhunter --check


# 安装ClamAV进行病毒扫描

sudo apt install clamav clamav-daemon

sudo freshclam  # 更新病毒库

sudo clamscan -r /home  # 扫描home目录

6.3 系统完整性检查

bash

# 安装AIDE(高级入侵检测环境)

sudo apt install aide aide-common


# 初始化数据库

sudo aideinit

sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db


# 手动检查

sudo aide --check


# 更新数据库(修改系统后)

sudo aide --update

sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db


# 定时检查

sudo vim /etc/cron.daily/aide-check

aide-check脚本内容:


bash

#!/bin/bash

/usr/bin/aide --check > /var/log/aide/check_$(date +%Y%m%d).log 2>&1

if [ $? -ne 0 ]; then

   echo "AIDE检测到文件变更!" | mail -s "AIDE Alert" admin@example.com

fi

第七部分:安全实践和加固

7.1 系统加固检查清单

bash

# 1. 禁用不必要的服务

sudo systemctl list-unit-files --type=service | grep enabled

sudo systemctl disable unnecessary-service


# 2. 移除不必要的软件包

sudo apt list --installed | grep -E '(telnet|rsh|rlogin|ftp|nfs|ypserv)'

sudo apt purge telnetd rsh-server


# 3. 配置内核安全参数

sudo vim /etc/sysctl.conf

添加以下内容:


bash

# 防止SYN洪水攻击

net.ipv4.tcp_syncookies = 1


# 不响应ICMP广播,避免被放大攻击

net.ipv4.icmp_echo_ignore_broadcasts = 1


# 忽略ICMP重定向

net.ipv4.conf.all.accept_redirects = 0

net.ipv6.conf.all.accept_redirects = 0


# 禁止转发源路由数据包

net.ipv4.conf.all.accept_source_route = 0

net.ipv6.conf.all.accept_source_route = 0


# 开启反向路径过滤

net.ipv4.conf.all.rp_filter = 1


# 记录可疑数据包

net.ipv4.conf.all.log_martians = 1

bash

# 应用配置

sudo sysctl -p

7.2 文件和目录安全基线

bash

# 创建安全基线脚本

vim security_baseline.sh

脚本内容:


bash

#!/bin/bash

echo "=== 文件权限安全检查 ==="


# 检查关键文件权限

check_file() {

   file="$1"

   expected="$2"

   actual=$(stat -c "%a" "$file" 2>/dev/null)

   if [ "$actual" != "$expected" ]; then

       echo "警告: $file 权限为 $actual (应为 $expected)"

   fi

}


check_file /etc/passwd "644"

check_file /etc/shadow "600"

check_file /etc/group "644"

check_file /etc/sudoers "440"


echo "=== SUID/SGID文件检查 ==="

find / -type f \( -perm -4000 -o -perm -2000 \) ! -path "/proc/*" 2>/dev/null | head -20


echo "=== 任何人都可写的文件 ==="

find / -type f -perm -0002 ! -path "/proc/*" 2>/dev/null | head -10


echo "=== 检查完成 ==="

7.3 用户活动监控

bash

# 安装监控工具

sudo apt install acct


# 启用进程记账

sudo systemctl enable acct

sudo systemctl start acct


# 查看用户命令历史

sudo lastcomm username


# 查看用户登录记录

last

lastlog


# 实时监控用户活动

sudo watch -n 1 'w; echo; ps auxf'

第八部分:应急响应

8.1 入侵检测步骤

bash

# 1. 检查当前登录用户

w

who

last


# 2. 检查异常进程

ps aux --sort=-%cpu | head -20

ps aux --sort=-%mem | head -20

ps aux | grep -E '(crypt|miner|backdoor|bot)'


# 3. 检查网络连接

sudo netstat -tulnp

sudo ss -tulnp

sudo lsof -i


# 4. 检查定时任务

crontab -l

ls -la /etc/cron*

cat /etc/crontab


# 5. 检查启动项

ls -la /etc/init.d/

ls -la /etc/systemd/system/


# 6. 检查最近修改的文件

find / -type f -mtime -1 ! -path "/proc/*" ! -path "/sys/*" 2>/dev/null | head -20

8.2 安全事件响应流程

隔离系统:断开网络连接


收集证据:保存日志和可疑文件


分析影响:确定受影响的范围


清除威胁:移除恶意软件


恢复系统:从备份恢复或重装


总结经验:改进安全措施


第九部分:练习任务

练习1:SSH安全加固

修改SSH默认端口为2222


禁用root登录


配置密钥认证,禁用密码认证


限制允许登录的用户


配置Fail2Ban保护SSH


练习2:文件权限审计

检查系统中所有SUID/SGID文件


检查任何人都可写的文件


检查关键系统文件的权限


修正不安全的权限设置


练习3:创建安全基线

编写脚本检查系统安全配置


设置定期安全扫描任务


配置日志监控和报警


练习4:应急响应演练

模拟发现可疑进程


执行入侵检查步骤


记录并分析结果


今日总结

今天我们学习了:


用户和组安全:密码策略、账户锁定、权限检查


文件系统安全:特殊权限、文件属性、权限审计


安全模块:SELinux和AppArmor配置


SSH安全:端口修改、密钥认证、防暴力破解


防火墙:UFW和iptables配置


系统审计:auditd、安全扫描、完整性检查


安全实践:系统加固、监控、应急响应


安全重要原则:


最小权限原则


纵深防御(多层防护)


定期审计和更新


及时备份和恢复计划


安全是一个持续的过程,不是一次性的任务。建议定期检查和更新安全配置。


有问题吗?完成练习后,我们可以继续第十一课:性能监控和优化。





明扬工控商城

推荐阅读:

Linux基础教程 第20课:Linux安全攻防和渗透测试基础

Linux基础教程 第19课:性能调优和容量规划

Linux基础教程 第18课:Linux云计算基础

Linux基础教程 第17课:自动化运维工具

Linux基础教程 第16课:集群和高可用性

Linux基础教程 第15课:Linux内核和驱动管理

热门标签:
Linux基础教程 第十课:安全基础和权限管理.docx

将本文的Word文档下载到电脑

推荐度:

下载

全部评论

请登录
产业新闻-明扬资讯网
科技资讯-明扬资讯网