10.安全
守护进程管理与系统安全笔记整理
守护进程管理
Super Server (超级服务器)
- 作用:代替其他服务监视服务请求,建立连接后转交给实际服务处理
- 优势:降低系统负载,不需要为每个服务都启动独立进程
inetd (Internet Daemon)
- 传统的超级服务器守护进程
- 配置文件:
/etc/inetd.conf
inetd.conf 字段说明
字段 | 说明 |
---|---|
service_name | /etc/services 中定义的服务名 |
socket_type | socket类型(TCP=stream, UDP=dgram) |
protocol | 协议类型(通常TCP/UDP) |
flags | 请求处理方式(wait=等待处理完成, nowait=立即处理下一个) |
user | 执行用户 |
program | 程序绝对路径 |
args | 转发参数 |
重启inetd
1 | kill -HUP inetd的PID |
TCP Wrapper
- 访问控制机制,检查顺序:
- 先查
/etc/hosts.allow
→ 匹配则允许 - 再查
/etc/hosts.deny
→ 匹配则拒绝 - 都不匹配则允许
- 先查
通配符说明
通配符 | 说明 |
---|---|
ALL | 所有服务和主机 |
A EXCEPT B | 除B以外的A |
LOCAL | 本地主机(不含.) |
PARANOID | 主机名与DNS解析IP不一致的情况 |
示例配置
1 | in.telnetd: .lpic.jp # 允许lpic.jp域访问telnet |
xinetd (扩展的inetd)
- 更安全的超级服务器,支持分服务配置
- 主配置文件:
/etc/xinetd.conf
- 服务配置文件:
/etc/xinetd.d/
xinetd.conf 主要参数
1 | default |
服务配置示例(telnet)
1 | service telnet |
重启xinetd
1 | /etc/init.d/xinetd restart |
端口安全
检查开放端口
1 | netstat -atun # 显示所有TCP/UDP端口 |
nmap 扫描
1 | nmap 目标主机 # 扫描主机开放端口 |
查找特殊权限文件
1 | find / -perm -u+s -ls # 查找SUID文件 |
用户安全
密码有效期设置(chage)
1 | chage [选项] 用户名 |
选项 | 说明 |
---|---|
-l | 显示有效期 |
-m 天数 | 密码最小使用天数 |
-M 天数 | 密码最大有效期 |
-d 日期 | 最后修改日期 |
-W 天数 | 密码过期前警告天数 |
-I 天数 | 密码过期后锁定前天数 |
-E 日期 | 账号失效日期 |
禁止登录方法
- 创建
/etc/nologin
文件:禁止所有非root用户登录1
touch /etc/nologin
- 修改用户shell:
1
usermod -s /sbin/nologin 用户名 # 禁止指定用户登录
su/sudo
su (切换用户)
1 | su - 用户名 # 完全切换(加载环境变量) |
sudo (超级用户权限)
- 配置文件:
/etc/sudoers
(使用visudo
编辑) - 示例配置:
1
2
3
4
5# 允许student用户执行shutdown
student ALL=(ALL) /sbin/shutdown
# 允许wheel组成员执行所有命令且不输密码
%wheel ALL=(ALL) NOPASSWD:ALL
资源限制(ulimit)
1 | ulimit [选项] [限制值] |
选项 | 说明 |
---|---|
-a | 显示所有限制 |
-c size | 核心文件大小 |
-f size | 最大文件大小 |
-n num | 打开文件数限制 |
-u num | 用户最大进程数 |
-v size | 最大虚拟内存 |
OpenSSH 安全
SSH密钥文件
文件名 | 说明 |
---|---|
ssh_host_key | SSH1私钥 |
ssh_host_dsa_key | SSH2 DSA私钥 |
ssh_host_rsa_key | SSH2 RSA私钥 |
*.pub | 对应公钥 |
sshd配置(/etc/ssh/sshd_config)
参数 | 说明 |
---|---|
Port | SSH端口(默认22) |
Protocol | SSH版本(1,2) |
HostKey | 私钥文件路径 |
PermitRootLogin | 是否允许root登录 |
RSAAuthentication | 是否启用SSH1公钥认证 |
PubkeyAuthentication | 是否启用SSH2公钥认证 |
AuthorizedKeysFile | 授权公钥文件路径 |
PermitEmptyPasswords | 是否允许空密码 |
PasswordAuthentication | 是否启用密码认证 |
X11Forwarding | 是否允许X11转发 |
SSH密钥认证流程
- 客户端生成密钥对:
1
ssh-keygen -t rsa # 生成RSA密钥对
- 上传公钥到服务器:
1
ssh-copy-id 用户名@服务器
- 服务器端公钥存储在:
~/.ssh/authorized_keys
SSH实用命令
scp (安全复制)
1 | scp 文件 用户@主机:路径 # 上传 |
ssh-agent (密钥代理)
1 | eval `ssh-agent` # 启动代理 |
端口转发
1 | # 本地端口转发 |
GnuPG 文件加密
密钥管理
1 | gpg --gen-key # 生成密钥对 |
文件加密/解密
1 | # 加密文件(给指定用户) |
密钥吊销
1 | gpg --gen-revoke 用户邮件 > revoke.asc # 生成吊销证书 |