BASH:在Linux系统上重命名用户

时间:2012-11-28 11:17:26

标签: bash

我想在系统上使用不同的命名架构创建一些新用户:

  • old:firstname+initial of the second name(例如:johnk
  • new:firstname.surname(例如:john.kennedy

我对新用户的密码更改感到困惑。理想情况下,我想从文件中提取影子密码,但我仍在学习BASH脚本,我认为它太先进了,所以现在我刚刚创建了一个包含旧用户和相应影子密码的列表。 我想用以下内容更新新用户密码:/usr/sbin/usermod $u -p "$HASH"但我不确定如何将旧用户列为新用户并将其与此用户匹配。

#!/usr/bin/env bash

OLD="
johnk="shadow_hash"
...
"

NEWUSERS="
john.kennedy
...
"

for u in $NEWUSERS; do

  if [ -z "$(getent passwd $u)" ]; then

    echo "User $u does NOT exist, creating..."

    /usr/sbin/useradd $u
#    /usr/sbin/usermod $u -p "$HASH"
  else
    echo "User $un DOES exist."
  fi
done

1 个答案:

答案 0 :(得分:1)

您真的想要创建新用户,还是仅为现有用户添加登录别名? (或者,更简单,更改用户名?)

如果你创建了一个新用户,那么你需要修复很多文件权限,这可能很烦人。

您还必须处理主目录的名称,该名称可能与旧用户名相关。您可以只创建一个从新名称到旧名称的符号链接(或重命名该目录并将旧名称符号链接到新名称;但请确保他们在执行此操作时不对其文件执行任何操作)。 / p>

无论如何,无论如何,您都可以使用数字用户ID来关联这两个名称。对于别名,您将使用相同的数字用户ID创建新名称(您需要为usermod指定一个标志以允许它工作)并且您仍然需要处理主目录的名称以及可能的其他名称,但是你不需要修改权限。如果您不想创建别名,则可以使用数字用户ID创建所有新用户名,这些用户名与旧用户ID的固定偏移量(如200更高,某些值为200)。请注意,getent允许按用户名或数字用户ID进行查找。