首頁 > 軟體

Linux開機自動登入(文字模式)

2020-06-16 17:43:27

Linux系統啟動登入過程
RedHat/CentOS為例,Linux系統Level3模式下從啟動到登入的整個過程大致如下:

1> 載入BIOS資訊:包含了CPU/顯示卡/記憶體/硬碟/網絡卡等硬體資訊、裝置啟動順序、時鐘資訊等等
2> 根據BIOS的啟動順序資訊,依次執行,直到找到引導檔案
3> Boot Loader:載入啟動引導檔案
4> 載入核心,完成Linux核心環境的建立
5> 執行/sbin/init程式,讀取組態檔/etc/inittab,設定執行等級,如level 3(這是載入完核心後,系統執行的第一個程式)
6> init程式執行指令碼/etc/rc.d/rc.sysinit:設定PATH變數、設定網路設定、啟動swap分割區、設定/proc等等
7> 依據/etc/modules.conf檔案或/etc/modules.d目錄下的檔案來裝載核心模組
8> 選擇的執行等級是3,啟動/etc/rc.d/rc.3.d/目錄下的指令碼程式,就是常說的開機自啟服務
9> 執行/etc/rc.local指令碼程式
10> 執行/sbin/mingetty程式,讀取使用者列表,並將使用者名稱轉化為/bin/login程式呼叫的引數
11> 執行/bin/login程式,等待輸入並驗證使用者名稱和密碼

至此,就清楚在level3模式下,想要實現自動登入,就需要在第10和11這兩步進行修改。

重新編譯/sbin/mingetty 程式

1. 檢視當前系統的/sbin/mingetty 所屬的軟體包及其版本(例如:mingetty-1.08-5.el6.x86_64)

1
rpm -qf /sbin/mingetty

2. 根據當前版本,進入網站http://download.chinaunix.net/,搜尋鍵碼“mingetty”,然後下載對應的原始碼軟體包(由於該網站的相關資源不足,因此就下載mingetty-1.07-5.src.rpm 這個版本,也可直接在當前系統下通過wget 命令直接下載)

1
wget http://down1.chinaunix.net/distfiles/mingetty-1.07-5.src.rpm

3. 將下載/上傳的原始碼軟體包移動到/opt/rh 目錄下,然後解壓(應當有規劃地放置和管理檔案)

1
2
3
4
mv mingetty-1.07-5.src.rpm /opt/rh
cd /opt/rh
rpm2cpio mingetty-1.07-5.src.rpm |cpio -div
tar -zxvf mingetty-1.07.tar.gz

4. 修改檔案mingetty-1.07/mingetty.c 中的程式碼(設定開機自動登入的使用者為xxx,其中xxx必須是個可登入的使用者):

1) 把第352 行的 char *logname, *s; 修改為 char *logname = "xxx", *s;
2) 把第409~415 行刪掉或註釋掉:

       /*
409    if (autologin) {
410    do_prompt (0);
411    printf ("login: %s (automatic login)n", autologin);
412    logname = autologin;
413    } else
414    while ((logname = get_logname ()) == 0)
415    /* do nothing */;
       */

5. 編譯生成mingetty(編譯過程需要時間,切勿中斷)

1
cd /opt/rh/mingetty-1.07/ && make

6. 將make 生成的檔案mingetty 強制覆蓋到/sbin 目錄下,至此,mingetty 的原始碼更改就完成了。

1
cp -f /opt/rh/mingetty-1.07/mingetty /sbin

• 重新編譯生成/bin/login 程式

1. 檢視當前系統的/bin/login 所屬的軟體包及其版本(例如:util-linux-ng-2.17.2-12.14.el6.x86_64)

1
rpm -qf /bin/login

2. 根據當前版本,下載對應的原始碼軟體包(根據當前系統版本,推薦下載:util-linux-ng-2.17.2.tar.bz2)

Linux公社資源站下載:

------------------------------------------分割線------------------------------------------

 

免費下載地址在 http://linux.linuxidc.com/

 

使用者名稱與密碼都是www.linuxidc.com

 

具體下載目錄在 /2016年資料/4月/20日/Linux開機自動登入(文字模式)/

 

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

 

------------------------------------------分割線------------------------------------------

 

1
cd /opt/rh

3. 解壓下載/上傳的原始碼軟體包

1
tar -jxvf util-linux-ng-2.17.2.tar.bz2

4. 修改檔案util-linux-ng-2.17.2/login-utils/login.c 中的程式碼

1) 把第434 行的 passwd_req = 1; 修改為 passwd_req = 0;

432    username = tty_name = hostname = NULL;
433    fflag = hflag = pflag = 0;
434    passwd_req = 0;
435
436    while ((ch = getopt(argc, argv, "fh:p")) != -1)

2) 在檔案宣告部分新增: #include <locale.h>

80  #include <sys/param.h>
81
82  #include <locale.h>
83
84  #include <stdio.h>

5. 先安裝gcc 編譯器,然後再編譯生成login(編譯過程需要時間,切勿中斷)

1
2
yum install gcc
gcc -o login login.c ../lib/setproctitle.c checktty.c -Wall -lcrypt -I ../include/

6. 將生成的檔案login 強制覆蓋到/bin 目錄下,至此,login 的原始碼更改就完成了

1
cp -f login /bin/login

7. 最後就可以重新啟動機器了。


IT145.com E-mail:sddin#qq.com