2012-11-28 43 views
1

我想在系統上創建一些新的用戶提供了不同的命名模式:BASH:Linux系統上重命名用戶

  • 老: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 
+0

舊用戶的密碼是MD5加密的,你不能(很容易地)得到它們的純文本版本。除非你可以破解MD5當然... – cdarke

+0

我打算使用「-p」開關useradd或usermod:'-p,--password密碼\t使用加密的密碼爲新密碼' – HTF

回答

1

您是否真的想創建新用戶,或者只是爲現有用戶添加登錄別名? (或更簡單的,更改用戶名?)

如果您創建一個新用戶,那麼您需要修復大量的文件權限,這可能很煩人。

您還必須處理主目錄的名稱,該名稱可能與舊用戶名有關。您可以創建一個從新名稱到舊名稱的符號鏈接(或者重命名目錄並將舊名稱符號鏈接到新名稱;但是確保他們在執行此操作時不會對文件執行任何操作)。

無論如何,無論如何,您可以使用數字用戶標識來關聯這兩個名稱。對於一個別名,你可以使用相同的數字用戶ID創建新的名字(你需要指定一個標誌給usermod以允許它工作),你仍然需要處理主目錄的名稱和可能的其他名稱,但是你不需要修復權限。如果你不想創建別名,你可以創建所有新的用戶名與數字用戶ID在一個固定的偏移量(如200以上,對於一些200的值)。請注意,getent允許通過用戶名或數字用戶標識進行查找。

+0

嗨,我只需要創建新用戶並僅複製影子密碼。 – HTF