翻譯
password
英音:['pɑ:sw?:d]美音:['pæs,w?d]
名詞n.
口令;密碼;通行密碼;暗語
計算機中用途
Linux - passwd 命令
用途
更改用戶密碼。
語法
passwd [ -R load_module ] [-f| -s] [ User ]
描述
passwd 命令設定和更改用戶密碼。使用此命令更改自己或者另一個用戶的密碼。使用 passwd 命令也能更改與登錄名關聯的全名(gecos)和用來作為作業系統界面的 shell。
根據用戶的定義,用戶的密碼可以存在於本地或遠程。本地密碼存在於 /etc/security/passwd 資料庫中。遠程密碼存在於網路信息服務(NIS)或者分散式計算環境(DCE)資料庫。
要更改自己的密碼,請輸入 passwd 命令。passwd 命令提示非 root 用戶輸入舊密碼(如果存在),然後提示輸入兩次新密碼。(密碼不顯示在螢幕上。)如果兩次新密碼的輸入不一致, passwd 命令提示重新輸入新密碼。
註:
passwd 命令只使用密碼的頭八個字元作為本地和 NIS 密碼。在密碼中只支持 7 位字元。由於這個原因,本地語言支持(NLS)代碼點不允許出現在密碼中。
要更改另一個用戶的密碼,請輸入 passwd 命令和用戶的登錄名(User 參數)。只有 root 用戶或者安全組成員才允許更改另一個用戶的密碼。passwd 命令提示輸入用戶的舊密碼以及用戶的新密碼。然而,passwd 命令並不提示 root 用戶舊用戶密碼、root 密碼以及加給 root 用戶任何密碼限制。
/etc/passwd 檔案記錄全名和使用的 shell 的路徑名。要更改記錄名,請輸入 passwd -f 命令。要更改登錄 shell,請輸入 passwd -s 命令。
根據密碼限制,在 /etc/security/user 配置檔案中構造本地定義的密碼。此檔案包含下列限制:
minalpha 指定字母字元的最小數目。
minother 指定其它字元的最小數目。
minlen 指定字元的最小數目。
註:
此值由 minalpha 值加上 minother 值和 minlen 值中的大者。
mindiff 指定出現在新密碼中但沒出現在舊密碼中的字元的最小數。
註:
此限制並不考慮位置。如果新密碼是 abcd 並且舊密碼是 edcb ,不同字元數就是 1。
maxrepeats 指定在密碼中單個字元使用的最大次數。
minage 指定密碼能夠更改的最小壽命。密碼必須保持一個最小周期。此值用周來評測。
maxage 指定密碼的最大壽命。密碼必須在指定的周數後更改。
maxexpired 指定用戶可以更改密碼的超出最大壽命 maxage 的最大周數。
histexpire 指定用戶不能重用密碼的周數。
histsize 指定用戶不能重用的前幾個密碼的數目。
dictionlist 指定更改密碼時要檢查的字典檔案列表。
pwdchecks 指定更改密碼時要調用的外部密碼限制方法的列表。
如果 root 用戶添加了 NOCHECK 屬性到在 /etc/security/passwd 檔案中的標誌條目中,密碼就不必滿足這些限制。另外,root 用戶也可指定新密碼給其它用戶而不遵循密碼的限制。
如果 root 用戶在標誌條目中添加了 ADMIN 屬性或者如果在 /etc/passwd 檔案中的 password 欄位包含 * (星號),則只有 root 用戶才能更改密碼。如果在 /etc/passwd 中的 password 欄位包含有 !(感嘆號)和在 /etc/security/passwd 檔案中的 password 欄位包含有 * (星號),則 root 用戶擁有更改您的密碼的超級特權。
如果 root 用更改您的密碼,則 ADMCHG 屬性就會自動地添加到在 /etc/security/passwd 檔案中的標誌條目上。這種情況下,您必須在下次登錄時更改密碼。
如果 /etc/security/user 檔案中用戶的 registry 值是 DCE 或者 NIS,則密碼更改只能在指定的資料庫中進行。
標誌
-f 更改由 finger 命令訪問的用戶信息。可以使用此標誌提供在 /etc/passwd 檔案中的全名。
-s 更改登錄 shell。
-R load_module 指定可裝入 I&A 模組,來更改用戶的密碼。
安全性
訪問控制:安裝此程式為可信計算庫的一部分,並可讓所有用戶執行。另外,此程式應該運行 setuid 以成為 root 用戶來獲取對密碼檔案的寫訪問。
檔案存取:
方式 檔案
r /etc/security/user
rx /usr/lib/security/DCE
rx /usr/lib/security/NIS
rw /etc/passwd
rw /etc/security/passwd
r /etc/security/login.cfg
審計事件:
事件 信息
PASSWORD_Change user
示例
1. 要更改密碼,請輸入:
passwd
passwd 命令提示輸入舊密碼,如果它存在並且您不是 root 用戶。輸入舊密碼後,命令提示輸入兩次新密碼。
2. 要更改 /etc/passwd 檔案中的全名,請輸入:
passwd-f
passwd 命令顯示為您的用戶標識存儲的名稱。例如,對於登錄名 sam , passwd 命令能夠顯示以下訊息:
sam's current gecos:
"Sam Smith"
是否更改?>
如果輸入 Y(是),passwd 命令提示輸入新名。passwd 命令記錄輸入的名稱到 /etc/passwd 檔案中。
3. 要在下次登錄時使用不同的 shell,請輸入:
passwd - s
passwd 命令列出可用的和當前使用的 shell 的路徑名。此命令也顯示提示:
是否更改?>
如果輸入 Y(是),passwd 命令提示輸入要使用的 shell。下次登錄時系統提供在此指定的 shell。
檔案
/usr/bin/passwd 包含 passwd 命令。
/etc/passwd 包含用戶 ID、用戶名、主目錄、登錄 shell 和 finger 的信息
/etc/security/passwd 包含加密的密碼和安全性信息。
MySql - PASSWORD函式
簡介
將一串文本轉換成哈希值。
詳細介紹
MySQL用戶賬戶列於mysql資料庫中的user表內。每個MySQL賬戶指定一個密碼,儘管保存在user表Password列的密碼不是明文,但哈希值是從表中的記錄計算的。用PASSWORD()函式來計算密碼的哈希值。
MySQL在客戶端/伺服器通信的兩個階段使用密碼:
· 如果客戶端試圖連線伺服器,有一個初始鑑定步驟,客戶必須提供一個密碼,並且必須與客戶想要使用的賬戶在user表保存的哈希值匹配。
· 客戶端連線後,它可以(如果有充分的許可權) 設定或更改user表內所列的賬戶的密碼哈希值值。客戶端可以通過PASSWORD()函式來生成密碼哈希值,或使用GRANT或SET PASSWORD語句。
換句話說,當客戶端首次試圖連線時,伺服器使用哈希值進行鑑定。如果連線的客戶端調用PASSWORD()函式或使用GRANT或SET語句來設定或更改密碼,則伺服器 產生哈希值。
在MySQL 4.1中密碼哈希算法已經更新,提供了更好的安全性並降低了密碼被截取的風險。但是,該新機制只能在MySQL 4.1(和更新版本的)伺服器和客戶端中使用,會產生一些兼容性問題。4.1或新客戶端可以連線4.1之前的伺服器,因為客戶端可以同時理解舊的和新的密碼哈希機制。但是,4.1之前的客戶端試圖連線4.1版或更新版的伺服器時會遇到困難。例如,3.23版 mysql客戶端試圖連線5.1伺服器時會失敗並出現下面的錯誤訊息:
shell> mysql -h localhost -u rootClient does not support authentication protocol requestedby server; consider upgrading MySQL client
出現該問題的另一個普通例子是在升級到MySQL 4.1或更新版後,試圖使用舊版本的PHP mysql擴展名。(參見25.3.1節,“使用MySQL和PHP的常見問題”)。
下面討論了新、舊密碼機制之間的差別,以及如果你升級了伺服器但需要為4.1版以前的客戶端保持向後兼容性該怎樣做。A.2.3節,“客戶端不支持鑑定協定”中有更詳細的信息。該信息將MySQL資料庫從4.0版本或更低版升級到4.1版或更高版的PHP編程人員特別重要。
注釋:該討論對比了4.1版的行為和4.1前的行為,這兒描述的4.1中的行為實際上從4.1.1開始。MySQL 4.1.0是一個“舊”的發布,因為它的實施機制與4.1.1版和更新版中的稍有不同。在MySQL 5.0 參考手冊中詳細描述了4.1.0和最新版之間的差別。
在MySQL 4.1之前,用PASSWORD()函式計算的密碼哈希值有16個位元組長。應為:
mysql> SELECT PASSWORD('mypass');
+--------------------+
| PASSWORD('mypass') |
+--------------------+
| 6f8c114b58f2ce9e |
+--------------------+
在MySQL 4.1之前,user表的Password列(保存了哈希值)也是16位元組長。
在MySQL 4.1中,已經對PASSWORD()函式進行了修改,可以生成41位元組的哈希值:
mysql> SELECT PASSWORD('mypass');
+-------------------------------------------+
| PASSWORD('mypass')
|+-------------------------------------------+|
*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |
+-------------------------------------------+
同樣,user表的Password列必須有41位元組長來保存這些值:
· 如果你新安裝MySQL 5.1,Password列自動為41位元組長。
· 從MySQL 4.1(4.1.1或4.1系列的更新版)升級到MySQL 5.1,應不會出現相關問題,因為兩個版本使用相同的密碼哈希機制。如果你想要將更早版本的MySQL升級到MySQL5.1,你應先升級到4.1,然後將4.1升級到5.1。
加寬的Password列可以同時保存新、舊格式的密碼哈希值。可以有兩種方式確定任何給定格式的密碼哈希值:
· 明顯的不同之處是長度(16位元組和41位元組)。
· 第2個不同之處是新格式的密碼哈希值都以‘*’字元開頭,而舊格式的密碼絕對不是。
長密碼哈希值具有更好的加密屬性,並且客戶端根據長哈希值進行鑑定比舊的短哈希值更加安全。
短密碼哈希值和長密碼哈希值之間的不同之處與伺服器如何使用密碼進行鑑定以及如何為執行密碼更改操作的連線的客戶端生成密碼哈希值都有關。
伺服器使用密碼哈希值進行鑑定的方式受Password列的寬度影響:
· 如果列較短,只用短哈希鑑定。
· 如果列較長,可以有短或長哈希值,並且伺服器可以使用任何一種格式:
o 4.1之前的客戶端可以連線,它們只可以使用舊的哈希機制,它們可以只鑑定有短哈希的賬戶。
o 4.1及以後版本的客戶端可以鑑定有短哈希或長哈希的賬戶。
對於短哈希賬戶的鑑定過程,4.1和以後版本的客戶端比為舊版本的客戶端實際要安全得多。從安全性角度,從最低安全到最安全的梯度為:
· 4.1之前的客戶端用短密碼哈希值進行鑑定
· 4.1或以後版本的客戶端用短密碼哈希值進行鑑定
· 4.1或以後版本的客戶端用長密碼哈希值進行鑑定
伺服器為連線的客戶端生成密碼哈希值的方式受Password列寬度和--old-passwords選項的影響。4.1或更新版本的伺服器只有滿足某個條件才生成長哈希:Password列必須足夠寬以容納長哈希值並且未給定--old-passwords選項。這些條件適合:
· Password列必須足夠寬以容納長哈希(41位元組)值。如果列沒有更新,仍然為4.1之前的16位元組寬,當客戶端使用PASSWORD()、GRANT或SET PASSWORD執行密碼更改操作時,伺服器注意到長哈希不適合,只生成短哈希。如果你已經升級到4.1但還沒有運行 mysql_fix_privilege_tables腳本來擴寬Password列時會出現這種行為。
· 如果Password列足夠寬,則可以保存短或長密碼哈希值。在這種情況下,PASSWORD()、GRANT或SET PASSWORD生成長哈希,除非 用--old-passwords選項啟動伺服器。該選項強制伺服器生成短密碼哈希值。
--old-passwords選項的目的是當伺服器生成長密碼哈希值時,允許你維持同4.1之前的客戶端的向後兼容性。該選項不影響鑑定(4.1和以後版本的客戶端仍然可以使用有長密碼哈希值的賬戶),但它防止在密碼更改操作中在user表中創建長密碼哈希值。在這種情況下,該賬戶不能再用於4.1之前的客戶端。沒有--old-passwords選項,可能會出現下面的不期望的情況:
· 舊客戶端連線有短密碼哈希值的賬戶。
· 客戶更改自己的密碼。沒有--old-passwords,可以為該賬戶生成長密碼哈希值。
· 下次舊客戶試圖連線賬戶時不能連線上,因為賬戶有長密碼哈希值,需要新的哈希機制進行鑑定。(一旦賬戶user表中為長密碼哈希值,只有4.1和以後版本的客戶端可以鑑定它,因為4.1之前的客戶端不理解長哈希)。
該場景說明,如果你必須支持舊的4.1之前的客戶端,不使用--old-passwords選項運行4.1或更新版本的伺服器很危險。用--old-passwords運行伺服器,密碼更改操作不會生成長密碼哈希值,這樣舊客戶端也可以訪問賬戶。(這些客戶端不能意外地因更改了密碼將自己鎖出去,並留下長密碼哈希值)。
--old-passwords選項的不利之處是你創建或更改的密碼使用短哈希,甚至對於4.1客戶端也如此。這樣,你丟失了長密碼哈希值提供的安全性。如果你想要創建有長哈希的賬戶(例如,為4.1客戶端),你必須不使用--old-passwords來運行伺服器。