最近在開發基於arm linux的集中器,出於保護系統的目的,需要給系統設置登錄用戶名和密碼,因此就在網上查詢了下怎樣給嵌入式arm linux系統設置登錄用戶名和密碼的方法,結果如下:
設置登錄用戶和用戶密碼,在/etc/inittab文件中,內容如下:
#first:run the system script file
::sysinit:/etc/init.d/rcS
#::askfirst:-/bin/sh
::sysinit:-/bin/login
::ctrlaltdel:-/sbin/reboot
#umount all filesystem
::shutdown:/bin/umount -a -r
#restart init process
::restart:/sbin/init
加上注釋,第四項是設置登錄界面的,利用的是busybox中的login程序。我將第三項注釋掉,添加了一個第四項。在/etc/目錄下創建一個passwd文件和shadow文件,passwd文件中內容為
root:x:0:0:root:/:/bin/sh
第一段表示登錄用戶名,第二段如果是x表示密碼在shadow中,為密文,不可見。第三段表示當前用戶的UID等級,一般root超級用戶的UID為0,表示等級最高,最好將其他用戶的UID等級設置為0.第四段暫不說,詳細忘了,可以網上搜索,第五段表示登錄名的全名,不是很重要,可以表示該用戶的地址等。第六段表示默認登錄后所在目錄,第七段表示登錄后執行的腳本。arm Linux中是/bin/sh而不是/bin/bash。
shadow文件中內容為:
root:Wdfdfqwe:17226:::::
第一段表示登錄的用戶名
第二段表示密文密碼。
設置用戶密碼:
passwd root
之后輸入該用戶的密碼,之后在shadow中就會生成密文密碼,你是無法知道具體含義的,生成密文密碼后,可以將shadow文件中的密文密碼放入到制作根文件系統的文件夾中,然后燒錄以便不用每次都設置密碼。
在我的嵌入式系統中使用passwd root設置root用戶密碼后,在shadow文件中並沒有看到如上面所說的shadow文件中的內容,反而我的shadow文件是空的,但是在passwd文件中可以看到加了密的密碼如下,原因是busybox中生成passwd工具的時候配置沒有設置好,可以如下方法解決:
之后重啟系統,root登錄后,reboot無法使用,此時使用reboot -f可以重啟。
設置好登錄界面和密碼后,如果使用telent登錄也會需要輸入登錄名和密碼,有保護系統的效果。密碼如果忘了,只能在文件夾形式的根文件系統中,將shadow文件中的密文密碼弄成空,這樣表示沒有密碼,然后重新燒錄,系統啟動后,直接輸入登錄名就可以登錄到系統中,此時可以在重新利用passwd root重新給root用戶設置密碼,設置成功后在shadow文件中又生成了該密碼對應的密文密碼,此時將這個shadow文件中該用戶對應的密文密碼復制到文件夾形式的根文件系統中,重新制作文件系統重新燒錄即可。
如果不想要登錄界面了,不用每次都輸入登錄名和密碼了,只需要將ininttab文件中的第四項注釋掉,將第三項注釋打開。
在實際使用的過程中還遇到一個登陸問題,就是系統啟動后一段時間沒有登陸的操作會出現下面的問題:Login timed out after 60 seconds,這個超時提醒,后續的操作都不起作用。
后來在我的inittab文件中增加了一句::respawn:/bin/login,respawn確保login超時后重新進入login。不加respawn login會超時然后直接進入命令行。
詳細解釋passwd文件和shadow文件:
一、/etc/passwd
/etc/passwd 文件是一個純文本文件,每行采用了相同的格式:
name:password:uid:gid:comment:home:shell
name 用戶登錄名
password 用戶口令。此域中的口令是加密的,常用x表示。當用戶登錄系統時,系統對輸入的口令采取相同的算法,與此域中的內容進行比較。如果此域為空,表明該用戶登錄時不需要口令。
uid 指定用戶的 UID。用戶登錄進系統后,系統通過該值,而不是用戶名來識別用戶。
gid GID。如果系統要對相同的一群人賦予相同的權利,則使用該值。
comment 用來保存用戶的真實姓名和個人細節,或者全名。
home 指定用戶的主目錄的絕對路徑。
shell 如果用戶登錄成功,則要執行的命令的絕對路徑放在這一區域中。它可以是任何命令。
如果/etc/passwd文件存放的是用戶的信息,由6個分號組成的7個信息,解釋如下
(1):用戶名。
(2):密碼(已經加密)
(3):UID(用戶標識),操作系統自己用的
(4):GID組標識。
(5):用戶全名或本地帳號
(6):開始目錄
(7):登錄使用的Shell,就是對登錄命令進行解析的工具。
例如:abc:x:501:501::/home/abc:/bin/bash
二、/etc/shadow
如果查看/etc/shadow文件存放的特殊帳號信息如下:
name:!!:13675:0:99999:7:::
每一行給一個特殊帳戶定義密碼信息,每個字段用 : 隔開。
字段 1 定義與這個 shadow 條目相關聯的特殊用戶帳戶。
字段 2 包含一個加密的密碼。
字段 3 自 1/1/1970 起,密碼被修改的天數
字段 4 密碼將被允許修改之前的天數(0 表示“可在任何時間修改”)
字段 5 系統將強制用戶修改為新密碼之前的天數(1 表示“永遠都不能修改”)
字段 6 密碼過期之前,用戶將被警告過期的天數(-1 表示“沒有警告”)
字段 7 密碼過期之后,系統自動禁用帳戶的天數(-1 表示“永遠不會禁用”)
字段 8 該帳戶被禁用的天數(-1 表示“該帳戶被啟用”)
字段 9 保留供將來使用
如果查看/etc/shadow下存放的普通帳號信息如下:
(1):帳號名稱
(2):密碼:這里是加密過的,但高手也可以解密的。要主要安全問題(代!符號標識該帳號不能用來登錄)
(3):上次修改密碼的日期
(4):密碼不可被變更的天數
(5):密碼需要被重新變更的天數(99999表示不需要變更)
(6):密碼變更前提前幾天警告
(7):帳號失效日期
(8):帳號取消日期
(9):保留條目,目前沒用
例如:abc:!!:14768:0:99999:7:::