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

d_i*_*ble 6 single-sign-on ecryptfs pam

如何确保所有用户在第一次登录时都加密了他们的主目录?

我已将 pam 设置为使用 Kerberos 身份验证和 LDAP 授权(我认为这对 ecryptfs 没有任何影响)。

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

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

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

d_i*_*ble 7

我已经设法使用 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
    
    Run Code Online (Sandbox Code Playgroud)

    确保脚本是可执行的:

    sudo chmod a+rx /etc/security/ecryptfs
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加条目以在 auth 上使用 pam_exec 执行它:

    sudo vim /etc/pam.d/common_auth
    
    Run Code Online (Sandbox Code Playgroud)

    添加以下几行:

    auth    required        pam_exec.so     expose_authtok /etc/security/ecryptfs
    auth    optional        pam_ecryptfs.so unwrap
    
    Run Code Online (Sandbox Code Playgroud)

    pam_exec设置为必须的,因为它不会安装ecryptfs如果脚本不以root身份运行。如果su从非 root 用户使用,就是这种情况。因此,如果未设置并su使用ecryptfs (即用户首次尝试使用 登录时su),则他将被拒绝。因此,我们确保用户在没有 ecryptfs 设置的情况下无法登录。

  3. 创建另一个脚本来填充主目录以代替 pam_mkhomedir

    sudo vim /etc/security/mkhome
    
    Run Code Online (Sandbox Code Playgroud)

    如果文件 .donotremove 不存在,此脚本将复制 /etc/skel 中的所有内容。

    #!/bin/bash
    
    cd ~
    
    if [ ! -f .donotremove ] ; then
        echo Copying /etc/skel
        cp -ra /etc/skel/* ~
        touch .donotremove
    fi
    
    Run Code Online (Sandbox Code Playgroud)

    还要确保这个文件是可执行的:

    sudo chmod a+rx /etc/security/mkhome
    
    Run Code Online (Sandbox Code Playgroud)
  4. 添加另一个条目以在会话上执行此脚本

    sudo vim /etc/pam.d/common_session
    
    Run Code Online (Sandbox Code Playgroud)

    添加以下几行:

    session optional        pam_ecryptfs.so unwrap
    session optional        pam_exec.so     seteuid /etc/security/mkhome
    
    Run Code Online (Sandbox Code Playgroud)

现在 LDAP 用户可以登录并拥有一个 ecryptfs 加密的主目录。

更新

与其/etc/pam.d直接编辑文件(通常不建议这样做),不如将设置应用为PAMConfig配置文件。

只需将此代码粘贴到一个新文件中/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
Run Code Online (Sandbox Code Playgroud)

然后运行pam-auth-update

pam-auth-更新

检查Enable EcryptFS for users from remote directories such as LDAP.并确保eCryptfs Key/Mount Management选中。将所有其他选项留给您的偏好。

这将确保应用中的相关配置/etc/pam.d并且它们保持在那里。