我有一个带有单独的 /root 和 /home 分区的 debian 系统。我已经在 /home 分区中有一些用户帐户。我需要该系统中的另一个用户帐户。问题是我想在便携式 USB 磁盘上为其创建 /home 分区。
这个想法是,如果 USB 未插入,那么我只能以本地用户之一的身份登录。如果 USB 已插入,系统应该检测到它,挂载 USB 分区并允许我以 portableUser 身份登录,以便我可以访问其配置文件。
最简单的方法是什么?我想到了两种方法:
a) 将 usbdisk/portableUser 目录符号链接到 /home/portableUser 目录
b) 在 fstab 中将 usbdisk 安装为 /home 分区,但是..是否可以安装它并访问“本地”/home 分区用户帐户?
我用 fstab 和符号链接玩了一整天,但没有成功。我也找不到任何简单的描述如何做到这一点。任何帮助表示赞赏,最好是 bash 命令的形式......:)
答案1
不要更改 USB 的安装点。相反,只需更改HOME
您的目录portableuser
,使其位于已安装的 USB 上。
例如,如果您的 USB 安装为,则创建目录为/media/portable
的用户帐户。HOME
/media/portable/portableuser
但这不会停止portableuser
登录;为此,我将使用登录 shell 的变体。这是一个有效的例子。
- 假设 USB 安装为
/media/portable
. 创建
portableuser
带有主目录/media/portable/portableuser
和登录 shell 的文件/usr/local/bin/bash-if-mounted
。这是来自的条目/etc/passwd
:portableuser:x:1004:1004:Portable user:/media/portable/portableuser:/usr/local/bin/bash-if-mounted
创建可执行的shell脚本
/usr/local/bin/bash-if-mounted
如下:#!/bin/bash # # bash-if-mounted ################################################################ # name="${0##*/}" shell=$(type -p "${name%%-*}" 2>/dev/null) if [[ -d "$HOME" ]] then [[ -n "$shell" ]] && export SHELL="$shell" exec "$SHELL" "$@" echo "No shell" >&2 else echo "No home directory at $HOME" >&2 fi sleep 2 exit 1
在目录
/media/portable/portableuser
存在和不存在的情况下进行测试。
如果您想使用 以外的 shell bash
,请相应地重命名可执行文件(例如dash-if-mounted
,zsh-if-mounted
)。
答案2
正如所问,这可能是不可能的当前的代码。
进行身份验证和日志记录的软件工具链与处理自动挂载的工具链是分开的。
你什么可能能够做的是使用 UniounFS-FUSE 和(假设是 bash)你的 bashrc 文件来检查是否存在具有特定 UUID(或其他)的 USB 文件系统,并在登录时联合挂载它。
或者放弃要求安装磁盘才能登录的想法,只需将 /etc/fstab 挂载到 /home/portableUser 上,并创建一个仅包含“logout”的 .bashrc 文件。这样,如果未安装 USB 磁盘,登录将触发立即注销。如果它被挂载(使用非联合挂载),.bashrc 将被挂载的文件系统屏蔽(测试一下,它完全来自 15 年前另一个问题的记忆),并且登录将成功。
另请注意,您可以将 portableUser 的主目录设置为任何内容,它不必位于 /home 中,它可以位于磁盘通常安装的任何位置。
答案3
感谢您的所有回复。最后,问题并不在我怀疑的地方。事实证明,我能够在文本模式 shell 中登录系统。只有 KDE 在登录时冻结。我的 USB 分区只是我办公室计算机上的 /home 分区的克隆,我在办公室计算机上安装了 Debian Buster(使用plasmashell 5.14.5),并且我想将其安装在我的家用笔记本电脑上,我的家庭笔记本电脑上安装了 Ubuntu 16(使用plasmashell 5.5.5)。现在我相信这两个版本的 KDE 之间的一些不兼容性是我出现问题的原因,因为现在,在我的家用笔记本电脑上安装 Buster 后,如果我在 fstab 中添加两行,一切都会正常工作
UUID=xxxxxxxxxxxxxx... /mnt/portableUserUSB ext4 nofail 0 2
/mnt/portableUserUSB/portableUser /home/portableUser none bind,nofail 0 0
(nofail参数很重要!)