假设我有一个home.tgz
并且想将其放在一个刚刚安装的 ubuntu 盒子上。
解压文件之前我需要做什么?创建用户?用户 ID 呢?群组呢?加密呢?
答案1
- 创建用户帐户,可选择使用与之前相同的 UID 和 GID,并将主目录置于同一位置(例如
/home/
sid
) - 设置密码
- 将文件解压到用户的主目录中
- 如果您使用的 UID 和 GID 与之前不同,请更改所有权
- 将用户添加到所需的任何其他组
如果您想简化流程,您需要做几件事。下面我假设用户名为mark
。
- 记录用户的组成员身份:
cd ~mark && id mark > mark.identity
- 从其父目录备份主目录 - 例如,如果它是,
/home/mark
那么你需要cd /home && tar jcpf mark.tar.bz2 mark
- 在新主机上将其还原到 /home(
cd /home && tar xjpf mark.tar.bz2
) - 识别组、用户名和组成员身份,然后恢复它们。这应该很容易编写脚本,大致如下:
/bin/bash #!/bin/bash 用户="${1}" 如果 [ !-e "${USER}".identity ]; 那么 echo “没有身份文件” 出口 菲 GD =`awk'{打印$ 2“ $ {USER}” .identity}'| sed -e“ s /。*(// g“ -e“ s /)*// g“` GLIST =`awk'{打印$NF“{USER}”.identity}'|sed-e“s / [az] * = //g”-e“s / [0-9] *( //g”-e“s /) //g”` 对于 ${GD} ${GLIST} 中的 GROUP;执行 getent 组 ${GROUP} >/dev/null 状态=${?} 如果 [ ${STATUS} -ne 0 ]; 那么 groupadd ${群组} 菲 完毕 useradd -g "${GD}" -G "${GLIST}" "${USER}"
请注意,我只是在这里写了它,我还没有测试过它。
是的,它假设所有组都存在。扩展脚本来检查每个组是否存在并创建它并不难。上述更改应该可以解决这个问题。
还要注意的是,这不会处理通过 sudo 获得的权限。如果您有本地电子邮件或其他任何东西,它也不会有帮助。它所做的只是将用户设置为与以前相同的组。此外,如果目录已经存在,它会覆盖它,因此需要注意。
答案2
在我的测试虚拟机中,我添加了 bob (1001) 和 alice (1002)。我删除了 bob,并添加了 joe (1001)。抱歉,我错了。您只需为每个用户重新分配主文件夹所有者和组即可。
这可能看起来很乏味,但这只是对这 3 个步骤的详细解释。
您需要超级用户权限才能执行这些维护任务,因此我们在每个命令前加上前缀sudo
,以赋予我们这些权限。
在我们新安装的 Ubuntu 上:
- #1 创建用户账户:
sudo adduser alice
- #2 将备份文件解压到她的新主目录中
- #3 让 Alice 成为文件所有者:
sudo chown -R alice\:alice /home/alice
解释这些命令:
- #1 adduser 为我们创建 /home/alice 目录(以及其他内容)
- #3 该选项意味着递归应用所有权,alice\:alice 是我们为文件
-R
指定新内容的方式,我们告诉 chown 在 上执行此任务。owner\:group
/home/alice
现在 /home/alice 下的所有文件都属于她了,她应该可以毫无问题地访问她的文件。希望这更有意义。
创建具有相同名称的新用户帐户,那么它将具有与旧用户帐户相同的 UID。我记得在某个邮件列表中读到过它,但我找不到我读到它的来源。