如何确保所有用户首次登录时其主目录均已加密?
我已经设置 pam 来使用 Kerberos 身份验证和 LDAP 授权(我认为这对 ecryptfs 不会产生任何影响)。
我还设置了 pam-mkhomedir 来从 /etc/skel 创建主目录,其中我放置了一些标准配置。
查看已启用 ecryptfs 的用户帐户中的 .ecryptfs 目录,有一些用户特定的配置,例如挂载点(设置为 /home/d_inevitable),这在 /etc/skel 中是没有用的。
还需要复制 /etc/skel 中的配置后主目录已经使用 ecryptfs 挂载。
答案1
我已设法使用 pam_exec 使其工作:
创建一个脚本来为所有新用户设置 ecryptfs
/etc/security/ecryptfs
:#!/bin/bash home=`eval echo ~$PAM_USER` ecryptfs=/home/.ecryptfs/$PAM_USER/.ecryptfs read password if [ -d $ecryptfs ]; then # ecryptfs is set echo "Ecryptfs is already configured" exit 0 elif [ `id -u` == 0 ]; then # Setup ecryptfs and make home umask 077 mkdir -p $home group=`id -gn $PAM_USER` chown $PAM_USER:$group $home ecryptfs-setup-private -u $PAM_USER -l "$password" -b --nopwcheck exit 0 else # NOT ROOT echo "Cannot login with 'su' for the first time" exit 1 fi
确保脚本是可执行的:
sudo chmod a+rx /etc/security/ecryptfs
添加条目以在身份验证时使用 pam_exec 执行它:
sudo vim /etc/pam.d/common_auth
添加以下行:
auth required pam_exec.so expose_authtok /etc/security/ecryptfs auth optional pam_ecryptfs.so unwrap
设置
pam_exec
为必需,因为如果脚本未以 root 身份运行,它将不会设置 ecryptfs。如果su
非 root 用户使用,情况就是如此。因此,如果未设置 ecryptfs 并su
使用(即当用户首次尝试使用 登录时su
),则将被拒绝。因此,我们确保用户无法在没有设置 ecryptfs 的情况下登录。创建另一个脚本来代替 pam_mkhomedir 填充主目录
sudo vim /etc/security/mkhome
如果文件 .donotremove 不存在,此脚本将复制 /etc/skel 中的所有内容。
#!/bin/bash cd ~ if [ ! -f .donotremove ] ; then echo Copying /etc/skel cp -ra /etc/skel/* ~ touch .donotremove fi
还要确保此文件是可执行的:
sudo chmod a+rx /etc/security/mkhome
添加另一个条目以在会话中执行此脚本
sudo vim /etc/pam.d/common_session
添加以下行:
session optional pam_ecryptfs.so unwrap session optional pam_exec.so seteuid /etc/security/mkhome
现在 LDAP 用户可以登录并拥有 ecryptfs 加密的主目录。
更新
不要直接编辑文件/etc/pam.d
(通常不推荐),最好将设置应用为PAM配置轮廓。
只需将此代码粘贴到新文件中/usr/share/pam-configs/ecryptfs-nonlocal
:
Name: Enable EcryptFS for users from remote directories such as LDAP.
Default: no
Priority: 0
Conflicts: ecryptfs-utils
Auth-Type: Additional
Auth-Final:
required pam_exec.so expose_authtok /etc/security/ecryptfs
optional pam_ecryptfs.so unwrap
Session-Type: Additional
Session-Final:
optional pam_ecryptfs.so unwrap
optional pam_exec.so seteuid /etc/security/mkhome
Password-Type: Additional
Password-Final:
optional pam_ecryptfs.so
然后运行pam-auth-update
:
检查Enable EcryptFS for users from remote directories such as LDAP.
并确保eCryptfs Key/Mount Management
并未选中. 其余选项则按照您的喜好决定。
这将确保相关配置/etc/pam.d
被应用并且保留在那里。