出於保護系統的目的,需要給系統設定登入使用者名稱和密碼,因此就在網上查詢了下怎樣給嵌入式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:::
嵌入式 ARM Linux啟動流程
bootloader 翻譯為 第一階段 引導裝入程式 bootstrap loader 翻譯為 第二階段引導裝入程式 bootloader不用多解釋都能理解 上電後執行的第乙個程式,它絕對不會依賴核心。比如uboot vivi bootstrap,第二階段引導裝入程式,屬於核心 沒有被編譯進vmli...
ARM Linux與嵌入式開發
arm linux開發與mcu開發有何不同?針對arm linux程式的開發,主要分為三類 應用程式開發 驅動程式開發 系統核心開發。linux核心與驅動 會51嗎?會c嗎?如bai果不會的話就有點難du度哦!會的話就學起來稍微輕zhi松一點,只dao是輕鬆一點。學arm肯定要先看彙編指令的,等指令...
嵌入式ARM LINUX系統搭建vlan服務
1.核心移植支援vlan 配置編譯即可 networking support networking options 802.1q vlan support 編譯為模組載入 gvrp garp vlan registration protocol support 不選,即不編譯 燒錄核心後,系統啟動,...