AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 412857
Accepted
altman
altman
Asked: 2012-08-01 05:22:19 +0800 CST2012-08-01 05:22:19 +0800 CST 2012-08-01 05:22:19 +0800 CST

FreeBSD 加密概念:当被另一个系统挂载时,无需密码或密钥自动启动?

  • 772

最近,我为工作安装了 FreeBSD,为加密安装了 geli。(没有引导分区的全盘加密。) 当我完成设置时,我发现每次引导时,我都需要输入解析密码来挂载根磁盘。

这不适合我的需要。我只想让我的系统自动启动,这样我就可以通过 ssh 访问它。但是当其他人关闭我的机器,并尝试使用另一个 freeBSD 系统来挂载我的磁盘时,他们不能。如果他们用另一个 FreeBSD 系统挂载分区,他们只能看到 /boot 目录。所有文件都是安全的!

我的概念可能吗?(要让一个加密的系统在被另一个系统挂载时自动启动?)如果是这样,我如何使用 freeBSD 做到这一点?

freebsd
  • 3 3 个回答
  • 3349 Views

3 个回答

  • Voted
  1. Best Answer
    Hennes
    2012-08-01T05:31:25+08:002012-08-01T05:31:25+08:00

    tl: 博士:没有

    如果您希望在启动时自动使用该密钥,则该密钥必须在启动时可访问。这意味着在磁盘的未加密部分。

    如果它在磁盘的未加密部分,那么其他人可以将磁盘从您的系统中取出,读取密钥并解密磁盘的其余部分。

    没有办法正确保护磁盘而不存储密钥。

    • 3
  2. mulaz
    2012-08-01T05:34:50+08:002012-08-01T05:34:50+08:00

    不可以。如果您希望自动解密,您需要将密码以明文形式存储在磁盘上,或以某种(坏的)方式隐藏起来。有足够意志力的人将能够轻松获得该密码。如果只有“/boot”未加密,则密码必须存在,攻击者只需找到它即可。

    如果您只是不想亲自到场解锁服务器,可以通过安装未加密的系统来解决,该系统将启动,启动 ssh 等服务,使您能够从远程位置解锁数据分区。

    • 1
  3. Louis
    2014-11-13T14:15:25+08:002014-11-13T14:15:25+08:00

    我遇到过类似的问题,我只通过加密 /home 就解决了。问题是 /etc/rc.d/geli 想要在继续​​引导之前挂载它。一个 kludge 将是在引导后手动进行挂载,但我喜欢它建议在引导时进行挂载的方式 - 我只希望网络首先启动,因为 /、/var 和 /usr 未加密.

    我这样说:

    /dev/ada0p7.eli /home ufs rw,noauto 0 0

    在 /etc/fstab

    在 rc.conf 中创建匹配的“l”选项: lgeli_devices="ada0p7" lgeli_ada0p7_flags="-k /etc/geli/server.key" lgeli_ada0p7_autodetach="NO"

    然后是 /etc/rc.d 中的 lgeli,如下所示:

    #!/bin/sh
    
    # PROVIDE: lgeli
    # REQUIRE: sshd
    # KEYWORD: nojail
    
    . /etc/rc.subr
    
    lgeli_make_list()
    {
            local devices devices2
            local provider
    
            devices="${lgeli_devices}"
    
            for provider in ${devices}; do
                    provider=${provider%.eli}
                    provider=${provider#/dev/}
                    devices2="${devices2} ${provider}"
            done
    
            echo ${devices2}
    }
    
    name="lgeli"
    start_precmd='[ -n "$(lgeli_make_list)" ]'
    start_cmd="lgeli_start"
    stop_cmd="lgeli_stop"
    required_modules="geom_eli:g_eli"
    
    lgeli_start()
    {
            devices=`lgeli_make_list`
    
            if [ -z "${lgeli_tries}" ]; then
                    if [ -n "${lgeli_attach_attempts}" ]; then
                            # Compatibility with rc.d/gbde.
                            lgeli_tries=${lgeli_attach_attempts}
                    else
                            lgeli_tries=`${SYSCTL_N} kern.geom.eli.tries`
                    fi
            fi
    
            for provider in ${devices}; do
                    provider_=`ltr ${provider} '/-' '_'`
    
                    eval "flags=\${lgeli_${provider_}_flags}"
                    if [ -z "${flags}" ]; then
                            flags=${lgeli_default_flags}
                    fi
                    if [ -e "/dev/${provider}" -a ! -e "/dev/${provider}.eli" ]; then
                            echo "Configuring Disk Encryption for ${provider}."
                            count=1
                            while [ ${count} -le ${lgeli_tries} ]; do
                                    geli attach ${flags} ${provider}
                                    if [ -e "/dev/${provider}.eli" ]; then
                                            # LOUIS line below, so long as
                                            # /etc/fstab... noauto line
                                            # present, this works
                                            mount "/dev/${provider}.eli"
                                            break
                                    fi
                                    echo "Attach failed; attempt ${count} of ${lgeli_tries}."
                                    count=$((count+1))
                            done
                    fi
            done
    }
    
    lgeli_stop()
    {
            devices=`lgeli_make_list`
    
            for provider in ${devices}; do
                    if [ -e "/dev/${provider}.eli" ]; then
                            umount "/dev/${provider}.eli" 2>/dev/null
                            geli detach "${provider}"
                    fi
            done
    }
    
    load_rc_config $name
    run_rc_command "$1"
    

    这样,它相当干净,而且没有太多的杂乱。lgeli 中的 mount 命令确保在 geli 时挂载 noauto 内容。有点难看,但对我来说最主要的是,我可以远程登录并拯救我的桌面,以免在电源故障后无法访问,否则这是默认模式!

    • 0

相关问题

  • Mono 2.4 Ahead-Of-Time (AOT) 可以在 FreeBSD x86(或 x64)上编译吗?

  • FreeBSD 和 Linux 有什么区别?[关闭]

  • 在 FreeBSD 上安装和运行 MySql

  • 在 freeBSD 上安装 netbeans 的问题

  • 用于 Web 应用服务器的 FreeBSD 磁盘分区(Apache/MySQL/PHP)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve