为所有新用户启用 ecryptfs,包括通过 kerberos 和 ldap 进行身份验证的用户

为所有新用户启用 ecryptfs,包括通过 kerberos 和 ldap 进行身份验证的用户

如何确保所有用户首次登录时其主目录均已加密?

我已经设置 pam 来使用 Kerberos 身份验证和 LDAP 授权(我认为这对 ecryptfs 不会产生任何影响)。

我还设置了 pam-mkhomedir 来从 /etc/skel 创建主目录,其中我放置了一些标准配置。

查看已启用 ecryptfs 的用户帐户中的 .ecryptfs 目录,有一些用户特定的配置,例如挂载点(设置为 /home/d_inevitable),这在 /etc/skel 中是没有用的。

还需要复制 /etc/skel 中的配置主目录已经使用 ecryptfs 挂载。

答案1

我已设法使用 pam_exec 使其工作:

  1. 创建一个脚本来为所有新用户设置 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
    
  2. 添加条目以在身份验证时使用 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 的情况下登录。

  3. 创建另一个脚本来代替 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
    
  4. 添加另一个条目以在会话中执行此脚本

    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

pam-auth-更新

检查Enable EcryptFS for users from remote directories such as LDAP.并确保eCryptfs Key/Mount Management未选中. 其余选项则按照您的喜好决定。

这将确保相关配置/etc/pam.d被应用并且保留在那里。

相关内容