Я пытаюсь автоматически расшифровать каталог Private
внутри пользователя $HOME
при запуске системы. Это система Debian GNU/Linux 10 (, на самом деле Raspbian, но я предполагаю, что в этом отношении она ничем не отличается ), которая использует NoDM для запуска Xorg.
РЕДАКТИРОВАТЬ 1:Я попытался установить чистый Debian 11 с Nodm на виртуальной машине и столкнулся с точно такой же проблемой, описанной здесь ниже.
Nodm автоматически регистрирует непривилегированного пользователя и запускает сценарий запуска $HOME/.xsession
.
У меня есть следующий скрипт, который вызывается.xsession:
#!/bin/bash -x
# Original by Michael Halcrow, IBM
# Extracted to a stand-alone script by Dustin Kirkland
# Edited on 2021-10-28 by Lucio Crusca
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PD="Private"
WPF="$HOME/.ecryptfs/wrapped-passphrase"
MPSF="$HOME/.ecryptfs/$PD.sig"
if /sbin/mount.ecryptfs_private ; then
exit 0
fi
if [ -f "$WPF" -a -f "$MPSF" ]; then
if [ $(wc -l < "$MPSF") = "1" ]; then
if printf "%s\0" "$LP" | ecryptfs-unwrap-passphrase "$WPF" - | ecryptfs-add-passphrase -; then
echo Ok
else
echo incorrect LP
exit 1
fi
else
if printf "%s\0" "$LP" | ecryptfs-insert-wrapped-passphrase-into-keyring "$WPF" - ; then
echo Ok
else
echo incorrect LP
exit 1
fi
fi
/sbin/mount.ecryptfs_private
else
echo Setup error
exit 1
fi
exit 0
Это урезанная версия /usr/bin/ecryptfs-mount-private
. Он выполняет те же самые команды, но ожидает, что переменная среды LP будет содержать фразу-пароль, а не запрашивать фразу-пароль в интерактивном режиме.
Я сохранил этот скрипт как $HOME/el-mount.sh
. Когда моя система загружается и запускается NoDM, он выполняет.xsession, который, в свою очередь, вызывает мой скрипт, перенаправляя stdout
и stderr
в файл журнала для отладки. Дело не в том, что он выводит это :
...
+ /sbin/mount.ecryptfs_private
mount: No such file or directory
. Однако, если я подключаюсь к системе через ssh
и запускаю тот же скрипт el-mount.sh
, войдя в систему как тот же пользователь, настроенный в NoDM, скрипт работает безупречно. На всякий случай, если вам интересно, переменная LP установлена правильно в обоих случаях (уже проверено в лог-файле).
Я уже пытался переключиться с NoDM на lightdm-autologin-greeter, но результат тот же.
Как заставить mount.ecryptfs_private
работать при вызове во время автоматического входа в систему?
Наконец-то разобрался. Проблема заключается в ошибке Debian 870126 , которая все еще открыта. Пока кто-нибудь не исправит это, вам придется обойти это, вручную добавив:
session optional pam_keyinit.so force revoke
в/etc/pam.d/nodm
(или другой файл конфигурации pam
, в зависимости от вашего диспетчера дисплея).