C語言中文網 目錄

Linux passwd命令:修改用戶密碼

< 上一頁Linux useradd Linux usermod下一頁 >

學習 useradd 命令我們知道,使用此命令創建新用戶時,并沒有設定用戶密碼,因此還無法用來登陸系統,本節就來學習 passwd 密碼配置命令 。

passwd 命令的基本格式如下:

[root@localhost ~]#passwd [選項] 用戶名

選項:
  • -S:查詢用戶密碼的狀態,也就是 /etc/shadow 文件中此用戶密碼的內容。僅 root 用戶可用;
  • -l:暫時鎖定用戶,該選項會在 /etc/shadow 文件中指定用戶的加密密碼串前添加 "!",使密碼失效。僅 root 用戶可用;
  • -u:解鎖用戶,和 -l 選項相對應,也是只能 root 用戶使用;
  • --stdin:可以將通過管道符輸出的數據作為用戶的密碼。主要在批量添加用戶時使用;
  • -n 天數:設置該用戶修改密碼后,多長時間不能再次修改密碼,也就是修改 /etc/shadow 文件中各行密碼的第 4 個字段;
  • -x 天數:設置該用戶的密碼有效期,對應 /etc/shadow 文件中各行密碼的第 5 個字段;
  • -w 天數:設置用戶密碼過期前的警告天數,對于 /etc/shadow 文件中各行密碼的第 6 個字段;
  • -i 日期:設置用戶密碼失效日期,對應 /etc/shadow 文件中各行密碼的第 7 個字段。

例如,我們使用 root 賬戶修改 lamp 普通用戶的密碼,可以使用如下命令:

[root@localhost ~]#passwd lamp
Changing password for user lamp.
New password: <==直接輸入新的口令,但屏幕不會有任何反應
BAD PASSWORD: it is WAY too short <==口令太簡單或過短的錯誤!這里只是警告信息,輸入的密碼依舊能用
Retype new password:  <==再次驗證輸入的密碼,再輸入一次即可
passwd: all authentication tokens updated successfully.  <==提示修改密碼成功

當然,也可以使用 passwd 命令修改當前系統已登錄用戶的密碼,但要注意的是,需省略掉 "選項" 和  "用戶名"。例如,我們登陸 lamp 用戶,并使用 passwd 命令修改 lamp 的登陸密碼,執行過程如下:

[root@localhost ~]#passwd
#passwd直接回車代表修改當前用戶的密碼
Changing password for user vbird2.
Changing password for vbird2
(current) UNIX password: <==這里輸入『原有的舊口令』
New password: <==這里輸入新口令
BAD PASSWORD: it is WAY too short <==口令檢驗不通過,請再想個新口令
New password: <==這里再想個來輸入吧
Retype new password: <==通過口令驗證!所以重復這個口令的輸入
passwd: all authentication tokens updated successfully. <==成功修改用戶密碼

注意,普通用戶只能使用 passwd 命令修改自己的密碼,而不能修改其他用戶的密碼。

可以看到,與使用 root 賬戶修改普通用戶的密碼不同,普通用戶修改自己的密碼需要先輸入自己的舊密碼,只有舊密碼輸入正確才能輸入新密碼。不僅如此,此種修改方式對密碼的復雜度有嚴格的要求,新密碼太短、太簡單,都會被系統檢測出來并禁止用戶使用。

很多Linux 發行版為了系統安裝,都使用了 PAM 模塊進行密碼的檢驗,設置密碼太短、與用戶名相同、是常見字符串等,都會被 PAM 模塊檢查出來,從而禁止用戶使用此類密碼。有關 PAM 模塊,后續章節會進行詳細介紹。

而使用 root 用戶,無論是修改普通用戶的密碼,還是修改自己的密碼,都可以不遵守 PAM 模塊設定的規則,就比如我剛剛給 lamp 用戶設定的密碼是 "123",系統雖然會提示密碼過短和過于簡單,但依然可以設置成功。當然,在實際應用中,就算是 root 身份,在設定密碼時也要嚴格遵守密碼規范,因為只有好的密碼規范才是服務器安全的基礎。

passwd 命令還提供了一些選項,接下來給大家介紹各個選項的具體用法。

【例 1】

#查看用戶密碼的狀態
[root@localhost ~]# passwd -S lamp
lamp PS 2013-01-06 0 99999 7 -1 (Password set, SHA512 crypt.)
#上面這行代碼的意思依次是:用戶名 密碼 設定時間(2013*01-06) 密碼修改間隔時間(0) 密碼有效期(99999) 警告時間(7) 密碼不失效(-1),密碼已使用

"-S"選項會顯示出密碼狀態,這里的密碼修改間隔時間、密碼有效期、警告時間、密碼寬限時間其實分別是 /etc/shadow 文件的第四、五、六、七個字段的內容。 當然,passwd 命令是可以通過命令選項修改這幾個字段的值的,例如:

#修改 lamp的密碼,使其具有 60 天變更、10 天密碼失效
[root@localhost ~]# passwd -x 60 -i 10 lamp
[root@localhost ~]# passwd -S lamp
lamp PS 2013-01-06 0 60 7 10 (Password set, SHA512 crypt.)
但我個人認為,還是直接修改 /etc/shadow 文件簡單一些。

這里顯示 SHA512 為密碼加密方式,CentOS 6.3 加密方式已經從 MD5 加密更新到 SHA512 加密,我們不用了解具體的加密算法,只要知道這種加密算法更加可靠和先進就足夠了。


【例 2】

#鎖定 lamp 用戶
[root@localhost ~]# passwd -I lamp
Locking password for user lamp.
passwd:Successg
#用"-S"選項査看狀態,很清楚地提示密碼已被鎖定
[root@localhost ~]# passwd -S lamp
lamp LK 2013-01-06 0 99999 7 -1 (Password locked.)
[root@localhost ~]# grep "lamp" /etc/shadow
lamp:!! $6$ZTq7o/9o $lj07iZ0bzW.D1zBa9CsY43d04onskUCzjwiFMNt8PX4GXJoHX9zA1S C9.i Yzh9LZA4fEM2lg92hM9w/p6NS50.:15711:0:99999:7:::
#可以看到,鎖定其實就是在加密密碼之前加入了"!!",讓密碼失效而已

暫時鎖定 lamp 用戶后,此用戶就不能登錄系統了。那么,怎么解鎖呢?也一樣簡單,使用如下命令即可:

#解鎖 lamp 用戶
[root@localhost ~]# passwd -u lamp
Unlocking password for user lamp.
passwd:Success
[root@localhost ~]# passwd -S lamp
lamp PS 2013-01-06 0 99999 7 -1 (Password set, SHA512 crypt.)
#可以看到,鎖定狀態消失
[root@localhost ~]# grep "lamp" /etc/shadow
lamp: $6$ZTq7cV9o $lj07iZ0bzW.D1zBa9CsY43d04onskUCzjwiFMNt8PX4GXJoHX9zA1S C9.iYz h9LZA4fEM2lg92hM9w/p6NS50.:15711:0:99999:7:::
#密碼前面的 "!!" 刪除了


【例 3】

#調用管道符,給 lamp 用戶設置密碼 "123"
[root@localhost ~]# echo "123" | passwd --stdin lamp
Changing password for user lamp.
passwd: all authentication tokens updated successfully.

為了方便系統管理,passwd 命令提供了 --stdin 選項,用于批量給用戶設置初始密碼。

使用此方式批量給用戶設置初始密碼,當然好處就是方便快捷,但需要注意的是,這樣設定的密碼會把密碼明文保存在歷史命令中,如果系統被攻破,別人可以在 /root/.bash_history 中找到設置密碼的這個命令,存在安全隱患。

因此,讀者如果使用這種方式修改密碼,那么應該記住兩件事情:第一,手工清除歷史命令;第二,強制這些新添加的用戶在第一次登錄時必須修改密碼(具體方法參考 "chage" 命令)。

注意,并非所有 Linux 發行版都支持使用此選項,使用之前可以使用 man passwd 命令確認當前系統是否支持。

< 上一頁Linux useradd Linux usermod下一頁 >

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo