【问题标题】:OpenVPN: Is there a way to encrypt the file that contains the username/password in order to pass it as an argument to auth-user-pass?OpenVPN:有没有办法加密包含用户名/密码的文件,以便将其作为参数传递给 auth-user-pass?
【发布时间】:2019-10-09 09:46:26
【问题描述】:

我想通过 auth-user-pass 参数传递一个包含用户名/密码的文件,并且出于安全原因我想对其进行加密

openvpn ..... --auth-user-pass credentials.txt

【问题讨论】:

    标签: linux password-encryption openvpn


    【解决方案1】:

    我暂时写了以下脚本。 Credentials.txt 采用 base64 编码。它在临时文件中解码,并作为参数传递给 openvpn。 您可以相应地修改脚本以实现加密/解密功能。​​

    #!/bin/sh
    
    #Ensure TEMP file is deleted after execution of the script.
    # If script is terminated
    trap 'rm -f "$TEMP_FILE"' EXIT
    # If script is interrupted
    trap 'rm -f "$TEMP_FILE"' INT
    
    # Create TEMP file & if fails exit
    TEMP_FILE=$(mktemp)|| exit 1
    
    # Decode credentials & write to the TEMP file
    base64 -d credentials.txt > $TEMP_FILE
    
    # Connect to VPN
    sudo openvpn --config personal-config.ovpn --auth-user-pass $TEMP_FILE
    

    【讨论】:

    • base64 不是加密。只需查看文件就会立即发现它是 base64 编码的,并且可以很容易地恢复
    • 我同意 Aethalides。此外,由于我认为您的脚本在 openvpn 完成之前不会终止,因此只要界面启动,临时文件就会保留在纯文本文件中,这消除了与纯文本用户名/密码文件相比的任何潜在优势。事实上,它可能比受用户或组读取权限保护的文件更不安全,具体取决于您的默认 umask。但是,我认为可以修改您的脚本来解决这两个问题。
    • @Aethalides 评论清楚地表明我正在使用 base64 编码作为临时解决方案。由于我每天需要多次使用 OpenVPN,我觉得它非常方便。安全性是一个问题,但比将您的凭据存储在网络管理器(例如 Gnome)中要安全得多。
    • @CaseyJones 进程终止后临时文件被删除。
    • 是的,我确实看到临时文件在您的 shell 脚本终止后被删除。但是,这只发生在杀死 OpenVPN 并断开与 VPN 的连接之后。因此,在整个连接期间,明文密码在临时文件中仍然可用。
    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多