1

我想在系统上创建一些具有不同命名模式的新用户:

  • 老:(firstname+initial of the second name例如johnk:)
  • 新的:(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
4

1 回答 1

1

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

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

您还必须处理主目录的名称,这可能与旧用户名有关。您可以只创建一个从新名称到旧名称的符号链接(或重命名目录并将旧名称符号链接到新名称;但请确保在您这样做时他们没有对他们的文件做任何事情)。

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

于 2012-11-28T17:19:11.247 回答