我有一个 A.sh 脚本,用于查询服务器;检索挂载密码并在客户端中挂载私人文件夹。
然后我有一个 Init.sh 脚本,它首先检查互联网连接状态,然后执行 A.sh。
如果我手动执行 A.sh,则 Private 文件夹将在所有用户会话中可用。但如果我通过 cron 作业执行 Init.sh 或 A.sh,输出将显示该文件夹已挂载,但这不会反映在其他地方。
- A.sh检索文件夹的挂载密码
- 将其添加到钥匙圈
printf "%s" "$PASS" | sudo ecryptfs-add-passphrase --fnek -
- 从输出中检索签名和 fnek 哈希。
- 最后使用以下命令挂载文件夹
sudo mount -t ecryptfs -o ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_sig="$SIGNATURE",ecryptfs_fnek_sig="$FNEK",ecryptfs_unlink_sigs,ecryptfs_passthrough=no,no_sig_cache,key=passphrase:passphrase_passwd="$PASS" "$PRIVATE_FOLDER" "$MOUNT_POINT"
我知道它已挂载,因为日志中的输出Mounted eCryptfs
显示了该行。我不知道为什么它在脚本结束时被卸载。
cron 作业在该用户 crontab 下运行。
答案1
根据https://wiki.archlinux.org/index.php/ECryptfs
自动挂载、自动卸载 [空文件] - 如果存在,pam_ecryptfs.so 模块将(假设已加载)在用户登录/注销时自动挂载/卸载此加密目录
“如果它们存在”是指~/.ecryptfs/
目录中的文件。
如果您想在 ssh 或本地会话结束时自动卸载私人文件夹touch ~/.ecryptfs/auto-umount
就足够了。
但似乎这种自动卸载行为将一直持续下去加密文件系统像 cron 作业一样,在非交互式会话中加载到内存中。即使没有~/.ecryptfs/auto-umount
设置文件。
注释掉此行
session optional pam_ecryptfs.so unwrap
on/etc/pam.d/common-session-noninteractive
将停止在非交互式会话(如 cron 作业)上自动卸载。