本文目录导读:

- Docker容器数据卷加密(使用LUKS)
- 使用Docker的密钥管理
- 使用Podman和系统层加密(叠加文件系统)
- 使用TLS/SSL加密容器通信
- 完整的自动化部署脚本(使用Docker Compose + 加密)
- 最佳实践建议
在Shell脚本中配置容器数据加密,主要涉及存储加密和传输加密两个维度,以下是几种主流的方法和对应的Shell脚本配置示例:
Docker容器数据卷加密(使用LUKS)
LUKS(Linux Unified Key Setup)是Linux下最常用的磁盘加密方案。
创建加密数据卷
#!/bin/bash # 配置变量 DATA_DIR="/data/encrypted-data" KEY_FILE="/root/keys/container.key" PASSWORD="your-strong-password-here" # 创建加密文件(例如创建10GB的加密文件) mkdir -p /data dd if=/dev/zero of=$DATA_DIR bs=1M count=10240 # 使用LUKS格式化 echo -n "$PASSWORD" | cryptsetup luksFormat $DATA_DIR --key-file=- --batch-mode # 打开加密设备 echo -n "$PASSWORD" | cryptsetup open --key-file=- $DATA_DIR encrypted_vol # 格式化为ext4文件系统 mkfs.ext4 /dev/mapper/encrypted_vol # 挂载 mkdir -p /mnt/encrypted mount /dev/mapper/encrypted_vol /mnt/encrypted # 使用加密卷运行容器 docker run -d \ --name encrypted-app \ -v /mnt/encrypted:/data:Z \ nginx:latest
使用Docker的密钥管理
创建并管理Docker密钥
#!/bin/bash # 创建密钥文件 echo "my-super-secret-db-password" | docker secret create db_password - # 创建加密配置文件 cat > config.sh << 'EOF' #!/bin/bash # 在Swarm模式下使用密钥 docker service create \ --name encrypted-service \ --secret db_password \ --env DB_PASSWORD_FILE=/run/secrets/db_password \ -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_password \ mysql:8.0 EOF # 运行脚本 chmod +x config.sh ./config.sh
使用Podman和系统层加密(叠加文件系统)
使用fscrypt或eCryptfs
#!/bin/bash # 安装fscrypt(需要内核支持) apt-get install fscrypt -y # Debian/Ubuntu # yum install fscrypt -y # RHEL/CentOS # 设置加密保护策略 mkdir -p /var/lib/containers/storage fscrypt setup /var/lib/containers/storage # 为特定目录启用加密 fscrypt encrypt /var/lib/containers/storage/encrypted-layer # 创建使用加密目录的Podman容器 podman run -d \ --name encrypted-podman \ -v /var/lib/containers/storage/encrypted-layer:/data \ nginx:latest
使用TLS/SSL加密容器通信
生成自签名证书并配置
#!/bin/bash # 配置变量 CERTS_DIR="/etc/docker/certs.d" DOMAIN="myregistry.internal" PASSWORD="cert-password" # 生成CA证书 openssl genrsa -aes256 -passout pass:$PASSWORD -out ca-private.key 4096 openssl req -new -x509 -days 365 -key ca-private.key -passin pass:$PASSWORD \ -out ca.pem -subj "/CN=My CA" # 生成服务器证书 openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr -subj "/CN=$DOMAIN" openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-private.key \ -passin pass:$PASSWORD -CAcreateserial -out server.crt # 部署证书到Docker配置 cp ca.pem server.crt server.key /etc/docker/certs.d/$DOMAIN:5000/ # 重启Docker服务 systemctl restart docker # 启动加密的私人仓库 docker run -d \ -p 5000:5000 \ --restart=always \ --name registry \ -v /etc/docker/certs.d:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/$DOMAIN:5000/server.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/$DOMAIN:5000/server.key \ registry:2
完整的自动化部署脚本(使用Docker Compose + 加密)
#!/bin/bash
set -e
# 配置
ENCRYPTION_KEY=$(openssl rand -hex 32)
STORAGE_PATH="/opt/encrypted-containers"
DB_PASSWORD=$(openssl rand -base64 24)
# 创建加密存储
create_encrypted_storage() {
local size=${1:-10G}
local mount_point=${2:-/mnt/encrypted}
dd if=/dev/zero of=$STORAGE_PATH bs=1 count=0 seek=$size
# 使用密钥加密
echo "$ENCRYPTION_KEY" | cryptsetup luksFormat $STORAGE_PATH --key-file=-
echo "$ENCRYPTION_KEY" | cryptsetup open --key-file=- $STORAGE_PATH encrypted_volume
mkfs.ext4 /dev/mapper/encrypted_volume
mount /dev/mapper/encrypted_volume $mount_point
}
# 生成docker-compose文件
generate_compose() {
cat > docker-compose.encrypted.yml << EOF
version: '3.8'
services:
app:
image: nginx:alpine
volumes:
- encrypted_data:/usr/share/nginx/html
secrets:
- db_password
environment:
- DB_PASSWORD_FILE=/run/secrets/db_password
volumes:
encrypted_data:
driver: local
driver_opts:
type: ext4
device: /dev/mapper/encrypted_volume
secrets:
db_password:
file: ./secrets/db_password.txt
EOF
}
# 实现加密配置文件
create_encrypted_config() {
mkdir -p secrets
echo "$DB_PASSWORD" > secrets/db_password.txt
chmod 600 secrets/db_password.txt
# 可选:使用gpg加密配置文件
gpg --symmetric --cipher-algo AES256 --batch --passphrase "$ENCRYPTION_KEY" \
secrets/db_password.txt secrets/db_password.enc
}
# 部署加密容器
deploy_encrypted() {
docker stack deploy -c docker-compose.encrypted.yml encrypted-app
}
# 清理函数
cleanup() {
umount /mnt/encrypted
cryptsetup close encrypted_volume
rm -f $STORAGE_PATH
}
# 主流程
main() {
echo "配置容器数据加密..."
create_encrypted_storage "5G" "/mnt/encrypted"
generate_compose
create_encrypted_config
deploy_encrypted
echo "加密部署完成!"
echo "加密密钥: $ENCRYPTION_KEY(请安全保存)"
}
main "$@"
最佳实践建议
-
密钥管理:
- 使用硬件安全模块(HSM)或密钥管理服务(KMS)
- 定期轮换密钥
- 使用环境变量或Secret文件而非硬编码
-
性能考虑:
- 使用硬件加速(如Intel AES-NI)
- 选择合适的加密块大小
- 考虑使用dm-crypt的no_read_workqueue和no_write_workqueue优化
-
备份策略:
# 加密备份脚本 tar czf - /encrypted/data | gpg --symmetric --cipher-algo AES256 \ --batch --passphrase "$BACKUP_PASSPHRASE" -o backup.tar.gz.gpg
-
审计与监控:
# 配置审计规则 auditctl -w /etc/docker -p wa -k docker_config auditctl -w /var/lib/docker -p wa -k docker_data
这些脚本可以根据具体需求调整,生产环境中建议使用专门的密钥管理系统(如HashiCorp Vault)来管理加密密钥,而非直接存储在脚本中。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播