守护进程管理与系统安全笔记整理

守护进程管理

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
2
3
kill -HUP inetd的PID
killall -HUP inetd
/etc/init.d/inetd restart

TCP Wrapper

  • 访问控制机制,检查顺序:
    1. 先查/etc/hosts.allow → 匹配则允许
    2. 再查/etc/hosts.deny → 匹配则拒绝
    3. 都不匹配则允许

通配符说明

通配符 说明
ALL 所有服务和主机
A EXCEPT B 除B以外的A
LOCAL 本地主机(不含.)
PARANOID 主机名与DNS解析IP不一致的情况

示例配置

1
2
in.telnetd: .lpic.jp  # 允许lpic.jp域访问telnet
ALL: 192.168.2. # 允许192.168.2.x网段所有服务

xinetd (扩展的inetd)

  • 更安全的超级服务器,支持分服务配置
  • 主配置文件:/etc/xinetd.conf
  • 服务配置文件:/etc/xinetd.d/

xinetd.conf 主要参数

1
2
3
4
5
6
7
8
9
default
{
instance = 60 # 最大守护进程数
log_type = SYSLOG authpriv # 日志类型
log_on_success = HOST PID # 成功日志内容
log_on_failure = HOST # 失败日志内容
cps = 25 30 # 每秒最大连接数(超限后暂停30秒)
}
includedir /etc/xinetd.d # 包含服务配置目录

服务配置示例(telnet)

1
2
3
4
5
6
7
8
9
service telnet
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}

重启xinetd

1
/etc/init.d/xinetd restart

端口安全

检查开放端口

1
2
3
4
netstat -atun       # 显示所有TCP/UDP端口
lsof -i -n # 查看网络连接
lsof -i :22 # 查看指定端口
lsof -c ssh # 查看指定进程

nmap 扫描

1
nmap 目标主机       # 扫描主机开放端口

查找特殊权限文件

1
2
3
find / -perm -u+s -ls   # 查找SUID文件
find / -perm -g+s -ls # 查找SGID文件
find / -perm -o+t -ls # 查找sticky bit文件

用户安全

密码有效期设置(chage)

1
chage [选项] 用户名
选项 说明
-l 显示有效期
-m 天数 密码最小使用天数
-M 天数 密码最大有效期
-d 日期 最后修改日期
-W 天数 密码过期前警告天数
-I 天数 密码过期后锁定前天数
-E 日期 账号失效日期

禁止登录方法

  1. 创建/etc/nologin文件:禁止所有非root用户登录
    1
    touch /etc/nologin
  2. 修改用户shell:
    1
    usermod -s /sbin/nologin 用户名  # 禁止指定用户登录

su/sudo

su (切换用户)

1
2
su - 用户名   # 完全切换(加载环境变量)
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. 客户端生成密钥对:
    1
    ssh-keygen -t rsa   # 生成RSA密钥对
  2. 上传公钥到服务器:
    1
    ssh-copy-id 用户名@服务器
  3. 服务器端公钥存储在:~/.ssh/authorized_keys

SSH实用命令

scp (安全复制)

1
2
scp 文件 用户@主机:路径   # 上传
scp -r 目录 用户@主机:路径 # 递归复制目录

ssh-agent (密钥代理)

1
2
3
eval `ssh-agent`   # 启动代理
ssh-add # 添加密钥
ssh-add -l # 列出已加载密钥

端口转发

1
2
3
4
5
# 本地端口转发
ssh -L 本地端口:远程主机:远程端口 用户@网关

# X11转发
ssh -X 用户@主机

GnuPG 文件加密

密钥管理

1
2
3
4
gpg --gen-key              # 生成密钥对
gpg --list-keys # 列出密钥
gpg --export -a "用户" > pubkey.asc # 导出公钥
gpg --import pubkey.asc # 导入公钥

文件加密/解密

1
2
3
4
5
# 加密文件(给指定用户)
gpg -e -a -r 接收者邮件 文件

# 解密文件
gpg 加密文件.asc

密钥吊销

1
2
gpg --gen-revoke 用户邮件 > revoke.asc  # 生成吊销证书
gpg --import revoke.asc # 导入吊销证书