我使用 encfs 加密我的 Dropbox 内容,因此我想在用户登录时而不是在系统启动时安装 encfs。但是,我无法做到这一点。我试过:
- 将 mount 命令添加到 .login/.profile。这不起作用,因为这些脚本是在 shell 启动时执行的,而不是在用户正常登录时执行的。
- 向 com.apple.loginwindow 添加 LoginHook。除了减慢我的登录过程外,这没有任何作用。系统日志文件中没有任何内容,因此我不确定如何调试它。
- 我查看了 /etc/fstab,但在 Mountain Lion 上该文件是空的,除了警告说该文件没有任何作用,因此向其中添加任何东西都无济于事。
对于那些不熟悉 encfs 但熟悉在 OSX 上完成操作的人来说,本质上我必须运行这个命令来挂载加密文件系统:
echo password | encfs -S encrypted_dir mount_point
非常感谢您的帮助。
答案1
您可以通过“系统偏好设置”->“用户和组”->“登录项”添加任何可执行文件(包括脚本),从而在登录时运行它。不要给脚本添加扩展名;使用类似foo
not 的名称foo.sh
。由于如果出现问题,没有关联窗口来显示错误消息,我建议将 stdout 和 stderr 重定向到 /tmp 中的文件中。
答案2
正确的做法是创建一个 launchctl 服务。登录时不会打开任何终端窗口。
创建一个脚本/usr/local/bin/encfs-mount
来加载 encfs,并附带所需的参数。这与您已加载的脚本类似。例如:
#!/bin/bash
/usr/local/bin/encfs -f --ondemand --extpass="security 2>&1 >/dev/null find-generic-password -gl encfs | grep password | cut -d \\\" -f 2" -i 15 ~/.sync ~/sync
请注意,上述脚本通过 security 命令使用 OSX Keychain 来提供密码,而不是将其保存在此脚本中。要添加密码,请打开 Keychain Access 工具,并将名为 encfs 的应用程序添加到您的一个钥匙串中。如果您不想被提示输入密码,请使用您的登录钥匙串;如果您希望每次使用以下方式挂载文件系统时都提示输入 encfs 密码,请使用系统钥匙串
--ondemand
如果您希望它有自己的密码,请使用新钥匙串。请参阅http://widerin.org/blog/secure-你的-dropbox。
创建服务文件以~/Library/LaunchAgents/com.arg0.encfs.plist
加载该脚本。替换YOUR_USERNAME
为您的用户名:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.arg0.encfs</string>
<key>Program</key>
<string>/usr/local/bin/encfs-mount</string>
<key>KeepAlive</key>
<true/>
<key>UserName</key>
<string>YOUR_USERNAME</string>
</dict>
</plist>
确保 encfs 尚未运行(如果没有,请卸载并停止它)。然后启动新服务:
launchctl load ~/Library/LaunchAgents/com.arg0.encfs.plist
您的 encfs 文件系统应该可以挂载。检查/var/log/system.log
以排除故障。