当前位置: 首页 > news >正文

Linux 下实现“连 root 都无法查看和删除”的加密文件夹(附一键挂载 + 自动超时退出)

🌟 前言

在 Linux 系统中,root 用户几乎拥有“上帝权限”——可以读取、修改、删除任何文件。但你是否曾想过:能否创建一个连 root 都无法查看内容、甚至无法删除的加密文件夹?

虽然 完全阻止 root 删除文件在理论上不可能(root 可以卸载文件系统、加载内核模块等),但我们可以通过 加密 + 不可变属性 + 自动化脚本 的组合,实现一个“实际意义上防 root 访问”的安全文件夹。

本文将手把手教你:

✅ 使用 cryptsetup + LUKS 创建强加密容器
✅ 设置 chattr +i 防止 root 删除
✅ 实现 无操作 10 分钟自动卸载(可自定义)
✅ 创建 桌面一键挂载快捷方式,像 U 盘一样方便
✅ 全程脚本化管理,安全又省心


🧩 一、技术原理

1. 为什么 root 不能完全被限制?

  • root 可以:
    • 读取所有文件
    • 修改权限
    • 卸载磁盘
    • 进入单用户模式
  • 所以 “完全防 root” 是不可能的

✅ 但我们能实现:

目标是否可达实现方式
root 无法读取内容LUKS 加密,无密码无法解密
root 无法删除文件⚠️(有限)chattr +i 设置 immutable 属性
root 无法长期访问自动卸载 + 无操作超时关闭

🔐 核心思想:加密保护内容,属性保护文件,自动化提升安全性


🛠️ 二、创建加密容器(LUKS + cryptsetup)

1. 安装依赖

sudo apt update
sudo apt install cryptsetup inotify-tools libnotify-bin -y

⚠️ inotify-tools 用于监听文件操作,libnotify-bin 用于弹出通知。


2. 创建项目目录

我们统一管理所有加密相关文件:

mkdir -p ~/crypt_data/mount

3. 创建加密镜像文件(如 1GB)

dd if=/dev/zero of=~/crypt_data/container.img bs=1M count=1024

你也可以用 fallocate 更快:

fallocate -l 1G ~/crypt_data/container.img

4. 初始化 LUKS 加密

sudo cryptsetup luksFormat ~/crypt_data/container.img

💡 系统会提示你设置密码,请使用高强度密码


5. 格式化为 ext4 文件系统

sudo cryptsetup open ~/crypt_data/container.img crypt_data_volume --type luks
sudo mkfs.ext4 /dev/mapper/crypt_data_volume
sudo cryptsetup close crypt_data_volume

📜 三、自动化管理脚本(核心)

我们将创建一个功能完整的脚本,支持:

  • init:初始化容器
  • start:挂载(支持 --timeout=N
  • stop:关闭
  • protect:启用防删除
  • unprotect:取消保护
  • 自动超时退出

1. 创建脚本文件

nano ~/crypt_data/crypt-container

2. 粘贴以下脚本内容

#!/bin/bash# === 配置区 ===
CRYPT_DIR="$HOME/crypt_data"
CONTAINER_IMG="$CRYPT_DIR/container.img"
MOUNT_POINT="$CRYPT_DIR/mount"
MAPPER_NAME="crypt_data_volume"
SCRIPT_PATH="$CRYPT_DIR/crypt-container"TIMEOUT=600  # 默认 10 分钟自动退出(秒)if [[ $EUID -eq 0 ]]; thenecho "❌ 错误:请不要以 root 身份运行此脚本。"exit 1
fisetup_crypt_dir() {[[ ! -d "$CRYPT_DIR" ]] && mkdir -p "$CRYPT_DIR"
}check_and_install_deps() {local missing=()for cmd in cryptsetup mount chattr lsblk inotifywait; doif ! command -v $cmd &> /dev/null; thencase $cmd incryptsetup) missing+=("cryptsetup") ;;chattr|lsattr) missing+=("e2fsprogs") ;;inotifywait) missing+=("inotify-tools") ;;esacfidoneif [[ ${#missing[@]} -gt 0 ]]; thensudo apt update && sudo apt install -y "${missing[@]}" || exit 1fi
}show_help() {cat << EOF
🔐 加密容器管理器
用法: $SCRIPT_PATH {init|start|stop|status|protect|unprotect} [--timeout=N]选项:--timeout=N  设置无操作自动退出时间(秒)示例:$SCRIPT_PATH start --timeout=300  # 5分钟后自动关闭
EOF
}do_init() {read -p "请输入大小(MB,默认 512): " sizesize=${size:-512}fallocate -l ${size}M "$CONTAINER_IMG" || dd if=/dev/zero of="$CONTAINER_IMG" bs=1M count="$size"sudo cryptsetup luksFormat "$CONTAINER_IMG"sudo cryptsetup open "$CONTAINER_IMG" "$MAPPER_NAME" --type lukssudo mkfs.ext4 /dev/mapper/$MAPPER_NAMEsudo cryptsetup close "$MAPPER_NAME"echo "✅ 初始化完成!"
}check_container() {[[ ! -f "$CONTAINER_IMG" ]] && echo "❌ 容器不存在,请先 init" && exit 1
}do_start() {while [[ $# -gt 0 ]]; docase $1 in--timeout=*)TIMEOUT="${1#*=}"[[ "$TIMEOUT" =~ ^[0-9]+$ ]] || exit 1shift;;*) shift ;;esacdonecheck_containerdo_unprotect_silentsudo cryptsetup open "$CONTAINER_IMG" "$MAPPER_NAME" --type luks || exit 1sudo mount /dev/mapper/$MAPPER_NAME "$MOUNT_POINT" || { sudo cryptsetup close "$MAPPER_NAME"; exit 1; }sudo chown -R $USER:$USER "$MOUNT_POINT"echo "✅ 已挂载到 $MOUNT_POINT"echo "⏱️  ${TIMEOUT}秒无操作将自动关闭"touch "$MOUNT_POINT/.last_access"while mount | grep -q "$MOUNT_POINT"; doinotifywait -t 1 -q -r -e modify,access "$MOUNT_POINT" > /dev/null 2>&1 && touch "$MOUNT_POINT/.last_access"find "$MOUNT_POINT/.last_access" -mmin +$((TIMEOUT/60)) > /dev/null 2>&1 && {echo "⏰ 超时!正在关闭..."do_stop_silentbreak}sleep 2done
}do_stop_silent() {mount | grep -q "$MOUNT_POINT" && sudo umount "$MOUNT_POINT" 2>/dev/null || truesudo lsblk -o NAME | grep -q "$MAPPER_NAME" && sudo cryptsetup close "$MAPPER_NAME" 2>/dev/null || truedo_unprotect_silent
}do_stop() {do_stop_silentecho "✅ 已关闭"
}do_status() {echo "容器: $CONTAINER_IMG"sudo lsblk -o NAME | grep -q "$MAPPER_NAME" && echo "🔐 已打开" || echo "🔓 未打开"mount | grep -q "$MOUNT_POINT" && echo "📁 已挂载" || echo "⚠️ 未挂载"[[ -f "$CONTAINER_IMG" ]] && sudo lsattr "$CONTAINER_IMG" | grep -q 'i' && echo "🛡️ 保护: 已启用"
}do_protect() {[[ -f "$CONTAINER_IMG" ]] && sudo chattr +i "$CONTAINER_IMG" && echo "✅ 已启用防删除"
}do_unprotect_silent() {[[ -f "$CONTAINER_IMG" ]] && sudo chattr -i "$CONTAINER_IMG" 2>/dev/null || true
}
do_unprotect() {do_unprotect_silentecho "🔓 保护已关闭"
}main() {setup_crypt_dircheck_and_install_depscase "${1:-}" ininit)     do_init ;;start)    shift; do_start "$@" ;;stop)     do_stop ;;status)   do_status ;;protect)  do_protect ;;unprotect) do_unprotect ;;*)        show_help; exit 1 ;;esac
}main "$@"

3. 添加可执行权限

chmod +x ~/crypt_data/crypt-container

⏱️ 四、启用自动超时退出(无操作自动关闭)

脚本已支持:

# 5 分钟无操作自动关闭
~/crypt_data/crypt-container start --timeout=300# 30 分钟
~/crypt_data/crypt-container start --timeout=1800

✅ 适合办公、公共电脑等场景,防止忘记卸载。


🛡️ 五、防止 root 删除文件(chattr +i)

1. 启用保护

~/crypt_data/crypt-container protect

2. 验证

sudo rm ~/crypt_data/container.img
# 提示:Operation not permitted

3. 取消保护(升级前)

~/crypt_data/crypt-container unprotect

🖱️ 六、创建桌面快捷方式(一键挂载)

1. 创建启动脚本

nano ~/crypt_data/mount-secure.sh
#!/bin/bash
CRYPT_DIR="$HOME/crypt_data"
CONTAINER_SCRIPT="$CRYPT_DIR/crypt-container"
TIMEOUT=600if [[ ! -x "$CONTAINER_SCRIPT" ]]; thennotify-send -u critical "❌ 错误" "未找到脚本"exit 1
fiif mount | grep -q "$CRYPT_DIR/mount"; thennotify-send "⚠️ 已挂载"exit 0
fiif command -v gnome-terminal &> /dev/null; thenexec gnome-terminal --title="🔐 加密容器" -- bash -c "\
echo '🔓 正在打开...';
$CONTAINER_SCRIPT start --timeout=$TIMEOUT;
echo '✅ 完成,5秒后关闭...';
sleep 5;
"
elsenotify-send -u critical "⚠️ 缺少终端"echo "请安装 gnome-terminal"sleep 10
fi
chmod +x ~/crypt_data/mount-secure.sh

2. 创建桌面快捷方式

nano ~/Desktop/挂载加密文件夹.desktop
[Desktop Entry]
Version=1.0
Name=🔐 挂载加密文件夹
Comment=一键挂载,10分钟无操作自动关闭
Exec=/home/$USER/crypt_data/mount-secure.sh
Icon=folder-locked
Terminal=false
Type=Application
Categories=Utility;Security;
chmod +x ~/Desktop/挂载加密文件夹.desktop

✅ 双击即可弹出终端输入密码,实现“傻瓜式”操作。


📊 七、使用流程总结

步骤命令
首次初始化~/crypt_data/crypt-container init
挂载使用双击桌面图标 或 start --timeout=600
查看状态status
启用保护protect
手动关闭stop

🎯 八、安全性总结

安全特性是否实现说明
内容加密LUKS + 密码,root 无法读
防 root 删除⚠️chattr +i 可防常规删除
自动卸载无人操作自动关闭
一键使用桌面快捷方式,降低使用门槛

📌 九、注意事项

  1. 物理安全第一:如果别人能接触你的硬盘,仍可能暴力破解。
  2. 备份加密文件container.img 一旦损坏,数据无法恢复。
  3. 不要共享脚本:否则他人可修改逻辑绕过保护。
  4. 定期测试:确保 protect 和自动卸载正常工作。

🎁 十、结语

通过本文的方法,你已经拥有了一个:

“连 root 都无法轻易查看和删除” 的加密文件夹!

它不仅安全,还通过脚本和桌面快捷方式实现了 极简操作,真正做到了“高安全性 + 高可用性”的平衡。


🔗 相关资源

  • LUKS 官方文档
  • inotify-tools GitHub
http://www.dtcms.com/a/340825.html

相关文章:

  • 【P7071 [CSP-J2020] 优秀的拆分 - 洛谷 https://www.luogu.com.cn/problem/P7071】
  • 织梦素材站网站源码 资源付费下载交易平台源码
  • 棒子出品,无须破解!
  • PyTorch API 6
  • 深度学习实战116-基于Qwen大模型与层次化对齐评分模型(HASM)的中学数学主观题自动批改系统
  • 常见开源协议详解:哪些行为被允许?哪些被限制?
  • AV1视频编码器2024-2025技术进展与行业应用分析
  • 本地部署的终极多面手:Qwen2.5-Omni-3B,视频剪、音频混、图像生、文本写全搞定
  • 第四章:大模型(LLM)】07.Prompt工程-(5)self-consistency prompt
  • PyTorch 深度学习常用函数总结
  • 使用 SSH 方式克隆 GitHub 仓库没有权限解决办法
  • [递归回溯]679. 24 点游戏
  • LINUX 820 shell:shift,expect
  • 第5.8节:awk自增自减运算
  • linux的内核符号表
  • 服装外贸系统软件怎么用才高效防风险?
  • 曲面的交线的切向量计算及其在坐标平面投影的几何分析
  • 有向图(Directed Graph)和有向无环图(Directed Acyclic Graph,DAG)代码实践
  • 反向Shell(Reverse Shell)
  • Meta 再次重组人工智能部门
  • Visual Studio 2010 简体中文旗舰版 安装全过程详解(附安装包下载)
  • 常见的学术文献数据库
  • 华为数通认证学习
  • 微服务网关中数据权限传递的那些坑:从 Feign 兼容性问题到解决方案
  • 【鸿蒙心迹】7×24小时极限求生:当Origin_null遇上鸿蒙,我如何用100杯咖啡换一条跨域活路?
  • IDM 下载失败排查全攻略
  • HT6881:重塑便携式音频体验的高效能功率放大器
  • 【运维进阶】Linux 正则表达式
  • 怎么确定mysql 链接成功了呢?
  • Electron开发的核心功能要点总结,旨在帮助快速掌握Electron开发核心逻辑