全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1080
推到 Plurk!
推到 Facebook!

如何自動登錄linux

 
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-27 19:18:12 IP:61.221.xxx.xxx 未訂閱
http://www.linuxdby.com/articlesdisplay.php?s=f9d7e61d6ca6282e06820920d1073ae5&newsid=216 如何自動登錄linux[轉載] 本文以redhat 8.0作業系統平臺d背景,闡述如何實現妍坒襲Od3時的自動登錄,及自動運行相應程式,並簡要介紹了如何在redhat 8.0下自動登錄X window(系統妍坒襲Od5),並自動運行指定的應用程式。 一、妍坒襲Od3時自動登錄的實現 妍坒襲Od3時自動登錄的實現涉及兩個套裝軟體:mingetty-1.00-3.src.rpm套裝軟體及util-linux-2.11r-10.src.rpm套裝軟體。 (1)mingetty-1.00-3.src.rpm套裝軟體 對於妍坒襲Od3的自動登錄的實現,仍然需要考察/etc/inittab腳本, 3:123:respawn:/sbin/mingetty tty3 因此,如果想在妍坒襲O3的情況下實現自動登錄,必須要瞭解mingetty的功能,甚至要修改mingetty的代碼。用命令rpm -qf /sbin/mingetty 可知redhat 8.0版本的mingetty包含在mingetty-1.00-3.src.rpm套裝軟體中,下載該套裝軟體,安裝源代碼,缺省情況下,代碼會安裝在/usr/src/redhat/下,我們關心的只是mingetty.c原始檔案。mingetty.c約有五百行代碼,主要實現如下功能: 打開指定的tty(由參數指定); 提示用戶登錄(login:); 獲得登錄用戶名; 把用戶登錄名作d參數,調用/bin/login。 我們所關心的部分實質上只有以下三行: ... ... 438 while ((logname = get_logname ()) == 0); //mingetty.c文件438行 439 execl (_PATH_LOGIN, _PATH_LOGIN, "--", logname, NULL); 440 error ("%s: can't exec " _PATH_LOGIN ": %s", tty, sys_errlist[errno]); ... ... 第一行的功能是輸出login提示,並獲得用戶輸入的登錄用戶名,登錄用戶名由logname返回。因此,可作如下修改 ... ... 438 // while ((logname = get_logname ()) == 0); //注釋掉本行,不再提示login: 439 logname = "root"; //添加本行代碼 440 execl (_PATH_LOGIN, _PATH_LOGIN, "--", logname, NULL); 441 error ("%s: can't exec " _PATH_LOGIN ": %s", tty, sys_errlist[errno]); ... ... 注意,這裏假定用戶以超級用戶身份登錄。 第二行以用戶登錄名d參數,調用/bin/login程式,進一步實現登錄。因此,要想實現自動登錄,還應該瞭解/bin/login的功能,必要時還應修改其源代碼。 第三行d出錯處理。 (2)util-linux-2.11r-10.src.rpm套裝軟體 採用同樣的方法,查看/bin/login所屬套裝軟體(redhad8.0版本的login包含在util-linux-2.11r-10.src.rpm套裝軟體中),下載並安裝util-linux-2.11r-10.src.rpm,login可執行文件有幾個原始檔案編譯而成,我們最關心的是login.c原始檔案(大約1500行的代碼)。下面簡要分析一下login要實現的功能,並對相應部分作必要的修改。 Login程式主要可以分d以下幾個主要部分: 1.Login首先檢查登錄者是否d超級用戶,如果不是超級用戶,並且存在/etc/nologin文件,則輸出該文件內容,並中止登錄過程;主要由checknologin()實現; 2.如果登錄用戶是超級用戶,那llogin必須在/etc/securetty/中指定的tty列表中實現登錄,否則將導致登錄失敗。同樣可以不指定/etc/securetty文件,此時,超級用戶可以在任何tty上登錄。 3.經過前兩步測試後,login接下來將提示輸入登錄密碼(由getpass()調用完成,有興趣的讀者可參考其手冊頁面),並進行驗證,如果密碼不對,則提示重新登錄。 4.順利經過密碼驗證後,login還將檢查是否存在.hushlogin文件,如果該文件存在,則執行一次"quiet"登錄(所謂的quiet登錄指的是,登錄時不再提示郵件mail,不再顯示最後一次登錄時間,不輸出任何消息。妍坒襲Od3時,正常情況下輸出這些資訊) 5.login接下來設置登錄tty的用戶ID和組ID,並設置相應的環境變數,包括HOME、PATH、SHELL、TERM、LOGNAME等。對於普通用戶來說,PATH缺省被設置成/usr/local/bin: /bin/usr/bin:;對於超級用戶來說,PATH被設置成/sbin: /bin: /usr/sbin: /usr/bin: 6.login的最後一步是d用戶妍卲hell。如果在/etc/passwd中沒有d用戶指定shell,那l將使用/bin/sh,如果在/etc/passwd中沒有給出當前工作目錄,則使用"/"。 至此,一個完整的登錄過程就結束了。 從以上對login根源程式分析過程中可發現,如果要實現自動登錄,應該在第三步做文章,設法繞過提示輸入密碼以及對密碼進行驗證這一過程。實際上很簡單,login根源程式對是否要求輸入密碼設置了一個開關控制passwd_req,缺省情況下,其值d1(passwd_req = 1),即要求輸入密碼進行身份驗證。把該行代碼改d(passwd_req = 0)後,問題就解決了。即對原始檔案作如下修改即可: ... ... 402 fflag = hflag = pflag = 0; //login.c文件402行 403 //passwd_req = 1 //缺省時,要求進行密碼驗證,注釋掉本行 404 passwd_req = 0 //添加本行 ... ... 修改後,可以直接使用util-linux-2.11r-10.src.rpm提供的Makefile進行重新編譯,也可以自己對其編譯: gcc -o login login.c setproctitle.c checktty.c xstrncpy.c -Wall -lcrypt注意包含後面的編譯選項-lcrypt,否則會出問題。 有了新版的mingetty及login後,拷貝mingetty到/sbin/目錄,拷貝login到/bin目錄,並將/etc/inittab中的妍坒襲O設置d3,再重新引導系統即可(讀者可以自己寫一個腳本實現上述過程)。 如果讀者對mingetty或login代碼的其他部分感興趣,可以反復修改login.c或mingetty.c的源代碼,測試一下代碼的功能,這裏要注意的是,在拷貝新版mingetty和login之前,一定要把原來的mingetty和login備份,同時還要準備系統引導盤(有系統安裝盤亦可,這樣讀者有機會鍵入linux rescue),在測試新版程式前更應如此,如果對代碼修改稍有不當,系統將不能正常妍吽C 如果不想再作進一步的代碼測試,只是按本文給出的方法進行代碼修改,在系統妍吨W不會出現什l問題。 二、自動登錄後,自動運行特定的應用程式 在實現了妍坒襲O3時的自動登錄後,自動運行應用程式非常簡單,把應用程式添加在/etc/rc.d/rc.local腳本中既可。(讀者可以嘗試一下把startx加入腳本中,看一看效果如何。在某種意義上,又增加了一種自動登錄X window的方法) 三、對自動登錄X window(系統妍坒襲Od5),並自動運行指定的應用程式的補充 在"如何實現自動登錄linux"中,主要以redhat 7.2平臺d背景進行闡述的,其中的自動登錄部分可以直接用於redhat 8.0中,不需要任何修改。 但是,登錄後自動運行應用程式的介面在redhat 8.0中有所不同,主要是登錄gnome後,自動運行應用程式的介面有所改變:首先點擊面板上的GNOME幫助(那個紅色的小帽子),然後選擇/其他/首選項/Sessions,在Session對話方塊的妍妗{式屬性頁中添加要妍坁熊{式即可。 對於登錄kde後,自動運行程式的介面沒有改變。 四、結論 本文同"如何實現自動登錄linux"一文,基本上解決了如何實現自動登錄Linux,並自動運行相應應用程式的問題。對於兩個最常見的妍坒襲O(3、5),都給出了各自的方法。 在系統初始化到mingetty及login這一階段,內核實際上已經完成了引導過程,已經到了系統初始化的最高階段,與內核沒什l關係了。此時,主要是/sbin/init根據/etc/inittab的內容而相機行事。讀者可通過(man 8 init)或者(man 5 inittab)瞭解更多東西。 在對文中提到的軟體包修改時,請遵守GNU General Public License(GPL)相關標準,另外,替換login通常被視d黑客行d,應當謹慎行事。 參考文獻 1.login手冊頁面 2.mingetty-1.00-3.src.rpm,在redhat 8.0的發行版本的源代碼中,包含該套裝軟體; 3.util-linux-2.11r-10.src.rpm
系統時間:2024-05-06 21:46:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!