10.安全

分類 后端, linux

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

守护进程管理

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 # 导入吊销证书

留言與分享

9.TCP-IP

分類 后端, linux

TCP/IP 基础笔记整理

IPv4 地址分类

标准分类

类别 IP 地址范围 子网掩码
A 0.0.0.0 ~ 127.255.255.255 255.0.0.0
B 128.0.0.0 ~ 191.255.255.255 255.255.0.0
C 192.0.0.0 ~ 223.255.255.255 255.255.255.0

私有地址范围

类别 IP 地址范围
A 10.0.0.0 ~ 10.255.255.255
B 172.16.0.0 ~ 172.31.255.255
C 192.168.0.0 ~ 192.168.255.255

CIDR (Classless Inter-Domain Routing)

  • 无类别域间路由
  • 允许更灵活的子网划分方式,不再受传统 A/B/C 类限制

IPv6

  • 128 比特地址,用 16 进制表示,分为 8 个 block
  • 表示规则:
    1. 每个 block 开头的 0 可以省略
    2. 连续的 0 可以用 :: 表示,但整个地址中 :: 只能出现一次

IPv6 地址类型

类型 说明
单播地址 (Unicast) 标识单个接口,类似 IPv4 单播地址
组播地址 (Multicast) 标识一组接口,类似 IPv4 组播地址
任播地址 (Anycast) 新增类型,数据包发送给最近的一个接口

端口 (Port)

  • /etc/services:端口与服务对应关系文件
  • 常用端口:
端口 协议 服务 说明
20 TCP FTP 文件传输(数据)
21 TCP FTP 文件传输(控制)
22 TCP SSH 安全Shell
23 TCP Telnet 远程登录
25 TCP/UDP SMTP 邮件发送
53 TCP/UDP DNS 域名解析
80 TCP HTTP Web服务
110 TCP POP3 邮件接收
119 TCP NNTP 网络新闻
139 TCP/UDP NetBIOS Windows网络
143 TCP IMAP 邮件访问
161 UDP SNMP 网络管理
443 TCP HTTPS 安全Web
465 TCP SMTPS 安全SMTP
993 TCP IMAPS 安全IMAP
995 TCP POP3S 安全POP3

nsswitch.conf 文件

控制各种系统数据库的搜索顺序和方法

1. 信息类型(Info)

  • automount:自动挂载信息
  • bootparams:引导选项
  • ethers:MAC地址
  • group:用户组信息
  • hosts:主机名和IP
  • networks:网络信息
  • passwd:用户信息
  • protocols:网络协议
  • publickey:NIS+/NFS公钥
  • rpc:远程过程调用
  • services:网络服务
  • shadow:用户密码信息
  • aliases:邮件别名

2. 搜索方法(method)

  • files:搜索本地文件
  • nis:搜索NIS数据库
  • dns:查询DNS
  • compat:兼容模式(±语法)

3. 搜索顺序

从左到右依次尝试,先找到的结果优先

4. 动作项([action])

格式:[[!]STATUS=action]

  • STATUS:
    • NOTFOUND:未找到
    • SUCCESS:成功找到
    • UNAVAIL:永久不可用
    • TRYAGAIN:临时不可用
  • action:
    • return:返回结果
    • continue:继续尝试下个方法

5. compat方法

在passwd/group/shadow文件中使用+-来合并NIS信息

网络故障排除命令

ping

1
2
3
ping 主机名或IP地址
ping -c 次数 目标 # 指定发送次数
ping -i 间隔 目标 # 指定发送间隔
  • TTL:ICMP包最大生存时间
  • time:响应时间

traceroute/tracepath

1
2
traceroute 主机名或IP地址
tracepath 主机名或IP地址 [端口]
  • 显示到达目标的路径

host

1
2
host [选项] 主机名或IP [DNS服务器]
host -v 目标 # 显示详细信息
  • 查询DNS信息

hostname

1
2
hostname  # 显示当前主机名
hostname 新主机名 # 设置主机名

netstat

1
2
3
4
5
6
7
8
netstat -a  # 显示所有socket
netstat -c # 实时更新
netstat -i # 显示接口状态
netstat -n # 显示数字地址
netstat -p # 显示PID/进程名
netstat -r # 显示路由表
netstat -t # 只显示TCP
netstat -u # 只显示UDP

route

1
2
3
4
route  # 显示路由表
route add -net 目标网络 netmask 子网掩码 gw 网关
route add default gw 默认网关
route del -net 目标网络

路由表字段说明:

  • Destination:目标网络/主机
  • Gateway:网关
  • Genmask:子网掩码
  • Flags:标志(U=有效,H=主机,G=网关)
  • Metric:距离
  • Ref:引用数
  • Use:使用计数
  • Iface:接口

ifconfig

1
2
ifconfig 接口名 IP地址 netmask 子网掩码
ifconfig 接口名 up/down # 启用/禁用接口

ifup/ifdown

1
2
ifup 接口名  # 启用接口
ifdown 接口名 # 禁用接口

网络服务命令

telnet

1
telnet 主机 [端口]  # 默认端口23

ftp

1
2
3
4
5
6
7
8
9
10
ftp 主机
# 常用命令:
ls # 列出远程文件
pwd # 显示远程当前目录
get # 下载文件
mget # 下载多个文件
put # 上传文件
ascii # ASCII传输模式
binary # 二进制传输模式
quit # 退出

dig

1
2
3
4
5
6
7
dig [选项] @DNS服务器 主机名 域名 [查询类型]
dig -x IP地址 # 反向查询
# 查询类型:
a # IP地址
any # 所有信息
mx # 邮件服务器
ns # 名称服务器

whois

1
whois 目标 [@whois服务器]
  • 查询域名注册信息

网络配置文件

/etc/hostname

  • 存储主机名
1
windsor.lpic.jp

/etc/hosts

  • 主机名与IP映射
1
2
127.0.0.1 localhost.localdomain localhost
192.168.0.1 windsor.example.com windsor

/etc/nsswitch.conf

  • 名称服务切换配置
1
hosts: files ldap dns  # 先查本地文件,再LDAP,最后DNS

/etc/resolv.conf

  • DNS配置
1
2
3
4
domain lpic.jp
search lpic.jp
nameserver 192.168.1.253
nameserver 192.168.1.2

/etc/sysconfig/network

  • 基本网络设置
1
2
3
NETWORKING=YES
HOSTNAME=lpic.example.net
GATEWAY=192.168.0.254

/etc/sysconfig/network-scripts/

  • 网络接口配置文件(如ifcfg-eth0)
1
2
3
4
5
6
7
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.0.6
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes

留言與分享

pytest基础

分類 devops, pytest

1. 概述

pytest 是一个功能强大的 Python 测试框架,具有以下特点:

  • 简单灵活,文档丰富
  • 支持参数化测试
  • 可用于单元测试、功能测试、自动化测试(如 Selenium/Appium)和接口测试
  • 丰富的插件生态系统
  • 支持测试跳过(skip)和预期失败(xfail)
  • 良好的 CI 工具集成(如 Jenkins)

主要插件

插件名称 功能描述
pytest-selenium Selenium 集成
pytest-html 生成 HTML 测试报告
pytest-rerunfailures 失败用例重试
pytest-xdist 多 CPU 并行测试

2. 使用介绍

2.1 安装

1
pip install pytest

2.2 编写规则

  • 测试文件:test_*.py*_test.py
  • 测试类:以 Test 开头,不能有 __init__ 方法
  • 测试函数:以 test_ 开头
  • 断言:使用 Python 原生 assert

2.3 示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# pytest1.py
import pytest

@pytest.fixture(scope='function')
def setup_function(request):
def teardown_function():
print("teardown_function called.")
request.addfinalizer(teardown_function)
print('setup_function called.')

@pytest.fixture(scope='module')
def setup_module(request):
def teardown_module():
print("teardown_module called.")
request.addfinalizer(teardown_module)
print('setup_module called.')

@pytest.mark.website
def test_1(setup_function):
print('Test_1 called.')

def test_2(setup_module):
print('Test_2 called.')

def test_3(setup_module):
print('Test_3 called.')

2.4 fixture 的 scope 参数

参数值 作用范围
function 每个测试函数运行一次(默认)
class 每个测试类运行一次
module 每个模块运行一次
session 每次会话运行一次

2.5 setup 和 teardown

  • setup:测试前的准备工作
  • teardown:测试后的清理工作
  • 替代方案:使用 yield 实现 setup/teardown

3. 测试执行

3.1 基本执行命令

命令 功能
pytest 运行当前目录下所有测试
pytest test_mod.py 运行指定模块的测试
pytest somepath/ 运行指定路径下的测试
pytest -k "stringexpr" 运行名称匹配表达式的测试
pytest test_mod.py::test_func 运行指定模块的特定测试函数

3.2 标记执行

1
2
3
4
5
# 执行标记为 website 的测试
pytest -v -m "website" pytest1.py

# 执行未标记为 website 的测试
pytest -v -m "not website" pytest1.py

3.3 常用命令行参数

参数 功能
-v 显示详细测试结果
-q 只显示简要结果
-s 显示 print 输出
-x 遇到第一个失败立即停止
--exitfirst -x
-h 显示帮助信息

4. 扩展插件

4.1 测试覆盖率 (pytest-cov)

1
2
3
4
pip install pytest-cov

# 生成 HTML 覆盖率报告
pytest --cov-report=html --cov=./ test_code_target_dir

覆盖率参数

参数 说明
--cov=[path] 指定计算覆盖率的路径
--cov-report=type 报告类型:term, html, xml 等
--cov-fail-under=MIN 设置覆盖率最低阈值

4.2 其他实用插件

插件 功能 安装命令
pytest-randomly 随机执行测试 pip install pytest-randomly
pytest-xdist 分布式测试 pip install pytest-xdist
pytest-instafail 立即显示失败 pip install pytest-instafail

5. 示例输出

5.1 详细模式 (-v)

1
2
3
4
5
6
7
8
$ pytest -v pytest1.py
==============================================================================
platform linux2 -- Python 2.7.14, pytest-3.0.0
collected 3 items

pytest1.py::test_1 PASSED
pytest1.py::test_3 PASSED
pytest1.py::test_2 PASSED

5.2 显示输出 (-s)

1
2
3
4
5
6
7
8
9
$ pytest -s pytest1.py
==============================================================================
setup_function called.
Test_1 called.
.teardown_function called.
setup_module called.
Test_2 called.
.Test_3 called.
.teardown_module called.

5.3 覆盖率报告

1
2
3
4
---------------------------------------------------------------- coverage: platform linux2, python 2.7.14-final-0 ----------------------------------------------------------------
Name Stmts Miss Cover
--------------------------------
pytest1.py 18 0 100%

6. 参考资源

  1. Python 测试工具大全
  2. 主流测试工具比较
  3. pytest 官方播客
  4. pytest 简介

留言與分享

  • 第 1 頁 共 1 頁
作者的圖片

Kein Chan

這是獨立全棧工程師Kein Chan的技術博客
分享一些技術教程,命令備忘(cheat-sheet)等


全棧工程師
資深技術顧問
數據科學家
Hit廣島觀光大使


Tokyo/Macau