透過 GUI 應用程式更改使用者密碼

透過 GUI 應用程式更改使用者密碼

我正在製作一個 GUI 應用程式來管理 Linux 中的使用者和群組!

我已經完成了創建新用戶的部分,但仍堅持為新創建的用戶提供新密碼的部分。我的應用程式所做的只是透過 GUI 取得所需的輸入(使用者名稱、群組清單和密碼),並執行將此資訊作為參數傳遞的腳本。假設我們有一個使用者帳戶 xyz。如果我想更改該帳戶的密碼,那麼我只需執行以下命令:

passwd xyz

這將要求輸入新密碼。現在我可以使用腳本建立一個新帳戶,因為所有必需的資訊都在命令列中傳遞。

useradd -m -G users -g "groups" -s /bin/bash "UserName"

我可以透過 Qt 應用程式運行腳本並建立用戶,但在 中passwd cmd,在另一行中要求輸入。人們如何處理這個問題?

答案1

我認為正確的答案是:不要使用命令列工具 - 使用庫調用。這將使您更好地處理錯誤,並避免在命令列上傳遞密碼的風險。

您可以使用的一個庫是庫用戶,它相對簡單並且具有 C 和 Python 綁定。

答案2

作為 root,您可以使用以下方法透過腳本系統地設定使用者密碼:

$ echo -n "$passwd" | passwd "$uname" --stdin

產生密碼

我喜歡使用命令列工具pwgen產生密碼。

$ passwd="`pwgen -1cny | sed 's/[\$\!]/%/g'`"

$ pwgen --help
Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]

Options supported by pwgen:
  -c or --capitalize
    Include at least one capital letter in the password
  -A or --no-capitalize
    Don't include capital letters in the password
  -n or --numerals
    Include at least one number in the password
  -0 or --no-numerals
    Don't include numbers in the password
  -y or --symbols
    Include at least one special symbol in the password
  -s or --secure
    Generate completely random passwords
  -B or --ambiguous
    Don't include ambiguous characters in the password
  -h or --help
    Print a help message
  -H or --sha1=path/to/file[#seed]
    Use sha1 hash of given file as a (not so) random generator
  -C
    Print the generated passwords in columns
  -1
    Don't print the generated passwords in columns
  -v or --no-vowels
    Do not use any vowels so as to avoid accidental nasty words

但這不是沒有安全感嗎?

passwd不會。pspasswd

例子

假設我在一個終端機中以 root 身分執行此命令:

$ ( sleep 10; echo "supersecret" | passwd "samtest" --stdin ) &
[1] 13989

然後我ps在另一個終端中運行:

$ ps -AOcmd | grep pass
14046 passwd samtest --stdin      R pts/11   00:00:00 passwd samtest --stdin

在第一個終端更改密碼後:

[root@greeneggs ~]# Changing password for user samtest.
passwd: all authentication tokens updated successfully.

對 passwd 的回顯怎麼樣?

即使這樣也不會洩漏密碼。這是另一個測試來證明這一點。首先,我們在輔助終端中啟動此命令。這將從 收集輸出ps

$ while [ 1 ]; do ps -eaf2>&1 | grep -E "echo|pass";done | tee ps.txt

然後我們運行密碼設定命令:

$ echo "supersecret" | passwd "samtest" --stdin &
[1] 20055
$ Changing password for user samtest.
passwd: all authentication tokens updated successfully.

[1]+  Done                    echo "supersecret" | passwd "samtest" --stdin

檢查內容ps.txt顯示密碼沒有外洩:

$ grep supersecret ps.txt
$

更改ps我們使用的命令ps -eaf也不會洩漏它。

答案3

passwd --help我的盒子上表示root可以運行它,以--stdin在標準輸入上向其提供新密碼。

答案4

chpasswd 命令從命令列讀取使用者名稱/密碼對清單以更新一組現有使用者。每行的格式如下

user_name:password

此命令旨在用於一次性建立多個帳戶的大型系統環境。若要了解此命令的更多選項,請鍵入

man chpasswd

相關內容