在 Mac OS X 上挂载 EncFS 卷可以通过用户帐户进行,但使用 su 以 root 身份失败

在 Mac OS X 上挂载 EncFS 卷可以通过用户帐户进行,但使用 su 以 root 身份失败

我正在尝试使用 Mac OS X 上的登录/注销挂钩脚本自动挂载 EncFS 卷。这些脚本以 root 身份运行,并在用户登录或注销时自动运行用户定义的挂钩。主要脚本是 in和/usr/local/sbin。以下是登录脚本:loginhooklogouthook

#!/bin/bash

LOCAL_HOOK="/Users/$1/.loginhook"

if [ -e "$LOCAL_HOOK" ]
then
  su - $1 -c "bash $LOCAL_HOOK"
fi

该脚本已注册为在登录时执行:

sudo defaults write com.apple.loginwindow LoginHook /usr/local/sbin/loginhook

用户自定义.loginhook

ENCFS=/path/to/encfs
PWD=$(security find-generic-password -ga EncFS 2>&1 >/dev/null | cut -d'"' -f2)
echo $PWD | $ENCFS -S $HOME/.encrypted/Vault $HOME/Documents/Vault

该命令的重定向security是必要的,因为正常输出转到 stdout,但密码转到 stderr 并且看起来像password: "mypass"

如果我.localhook从我的用户帐户执行,脚本可以正常工作,但如果通过使用“父”脚本(以 root 身份运行)执行该脚本,su我会得到一个空白密码。

使用调试bash -x显示一切运行正常,但env命令显示环境不是尽管使用了脚本,但结果和我登录时一样su -。我怀疑问题就出在这里,但我不知道问题是什么。

我在这里做错了什么?

编辑:LaunchAgent 解决方案基于 Gordon Davisson 提供的信息。

encfsd.sh

#!/bin/bash

ENCFS="/path/to/encfs"
ENCDIR="$HOME/.encrypted/Vault"
DECDIR="$HOME/Documents/Vault"

function cleanup {
  # Kill sleep command ($! is PID of last command launched in background)
  kill $!
  umount "$DECDIR"
  exit
}
trap cleanup 1 2 3 6 15

security find-generic-password -ga EncFS 2>&1 >/dev/null | cut -d'"' -f2 | "$ENCFS" -S "$ENCDIR" "$DECDIR"

# Wait for exit
while true; do
  # Sleeping ignores normal signals so start it in a subprocess and wait for it
  sleep 3600 &
  wait
done

~/Library/LaunchAgents/localhost.encfsd.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>KeepAlive</key>
  <false/>
  <key>Label</key>
  <string>localhost.encfsd</string>
  <key>LimitLoadToSessionType</key>
  <string>Background</string>
  <key>Program</key>
  <string>/Users/asdf/bin/encfsd.sh</string>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

答案1

登录和 logouthook 脚本分别在用户会话之前和之后运行,而不是在会话内运行。我怀疑由于您的 loginhook 在用户会话开始之前运行,因此用户的钥匙串尚未解锁,因此您无法从中恢复密码。LaunchAgent 可能更适合这种情况...

相关内容