linux的自動登入 理解linux的方式

2021-05-21 19:35:57 字數 2154 閱讀 7055

今天在乙個郵件列表中有朋友問在linux下如何做到自動登入,就是不用輸入使用者名稱和密碼,我的回答是在桌面上進行設定,然後那位朋友就學會了並且很高興,我敢肯定他是windows的下的老使用者...

僅僅知道如何設定自動登入實在不夠,自動登入不是linux的風格,我敢肯定如果不是在擁有桌面的linux下,在黑屏的命令列下是很少有人使用自動登入的,linux的乙個意義就是網路,而網路的環境就是不安全,自動登入就是不安全,因此自動登入和linux的大環境是格格不入的。桌面設定自動登入十分簡單,無非就是和windows一樣的點幾下滑鼠而已,但是在這簡單操作的背後卻再一次揭示了linux的靈活和安全。

以擁有執行級別概念的發行版redhat為例,如果換成在執行級3下設定自動登入,相信會難倒一批英雄好漢的,並不是這些英雄好漢們不會,而是他們實現想不通為何這麼做,一般意義上用命令列的都是高手,用gui的很多都是剛剛入門的新手,偶爾設定一下自動登入懷念一下windows也沒有什麼不可。如果在命令列設定自動登入,並且直接用root登入的話,這是最簡單的了,因為linux啟動時就是以root使用者啟動的,如果不以root啟動,那麼很多守護程序的配置檔案以及一般守護程序本身是沒有許可權讀取和執行的,因此這種情況下如果想設定自動登入,直接把/etc/inittab裡面的getty換成 bash即可,不過如果想做的更加像那麼回事,那就要自己寫乙個程式,該程式可以為elf檔案也可以是指令碼,只要在程式中設定一下 home,shell,user,logname這幾個環境變數即可,因為這和shell的提示符有關,在程式的最後執行shell就可以了,記著一定執行shell,因為在執行到登入之前,系統是沒有shell的,要想和系統互動必然要有乙個shell。有人可能會有疑問,如果可以如此簡單的靠修改乙個 inittab啟動配置檔案就可以直接以root自動登入,那系統不是太不安全了嗎?是的,就是這麼回事,不過請問,你如果不是root許可權你能修改 inittab嗎?如果你本來就是root,那麼有必要再設定乙個自動登入以證實些什麼嗎?如果你真的這麼做了,那麼我可以告訴你,任何事情都證實不了,而只會自己在你的系統上敲開乙個大洞,正如我的前面的幾篇文章所述,linux不會阻止你做任何事情,只要你有許可權,因此linux就比較難以馴服,不過這也是它很強大的原因。

如果你想以非root使用者自動登入,那麼就要費一番工夫了,因為非root使用者意味著安全性提高了,從不安全的系統啟動時預設的root到安全的非 root是需要做功的,這是乙個真理。linux提供了乙個介面可以得到任何使用者的一些配置,比如uid,gid等等,該配置的結構如下:

struct passwd {

char *pw_name; //使用者名稱

char *pw_passwd; //密碼

uid_t pw_uid; //使用者id(uid)

gid_t pw_gid; //組id (gid)

char *pw_gecos; //名字

char *pw_dir; //使用者目錄

char *pw_shell; //該使用者的shell程式

得到該結構的介面就是:

struct passwd *getpwnam(const char *name); //name就是使用者名稱

當然這個介面程式誰都有權呼叫,其實這個介面並沒什麼,它所做的僅僅是乙個封裝而已,它其實就是讀取/etc/passwd檔案,然後找到和name對應的那一行,然後把該行的其它資訊取出來,執行完這個介面會發現返回結果的pw_passwd欄位是x,說明真正的密碼在/etc/shadow中加密儲存,你完全可以不用這個介面而是自己去解析/etc/passwd檔案,得到了uid和gid後就可以切換使用者了,其實很簡單,就是在為控制台和終端設定好uid及gid後將當前程序的uid和gid也設定成結果的uid和gid,然後直接exec乙個shell,該shell就是你要自動登入的使用者的 shell,在該shell上whoami一下試試看。當然如果想讓shell的提示符看起來像那麼回事,就也和前面一樣設定一下環境變數即可。

看到這裡就會發現,只有root才可以設定uid和gid從而切換使用者,非root使用者是沒有辦法直接通過設定uid和gid的方式來切換使用者的,必須用系統提供的su等標準介面來切換,在啟動啟動的時候系統就是root,如此一來可以通過這種方式隨意切換使用者達到自動登入的目的。root可以不通過密碼驗證直接登入別人的非root使用者,這並不奇怪,誰讓root是至高無上的呢?之所以可以做到這麼隨意這麼簡單,還是受到了linux的程序架構的恩惠,子程序可以繼承父程序的uid和gid,實在很不錯。其實所謂的桌面方式啟用自動登入也無非就是用的這一套機制,只是細節上有所不同罷了。

linux的自動登入 理解linux的方式

今天在乙個郵件列表中有朋友問在linux下如何做到自動登入,就是不用輸入使用者名稱和密碼,我的回答是在桌面上進行設定,然後那位朋友就學會了並且很高興,我敢肯定他是windows的下的老使用者.僅僅知道如何設定自動登入實在不夠,自動登入不是linux的風格,我敢肯定如果不是在擁有桌面的linux下,在...

設定linux自動登入

在實驗場景中我們可能會經常重新啟動linux,然後反覆輸入賬戶密碼登陸。為了在每次啟動後快速進入系統減少在實驗場景中不必要的工作,我們可以設定linux在啟動後自動登陸到指定賬戶 實驗中一般為root賬戶 基於linux一切皆檔案的思想,我們可以通過修改配置文字的方式決定是否啟用自動登入,以及自動登...

如何實現自動登入Linux

開機自動 登入linux,並自動 執行xwindow應用程式,有其特殊的應用背景,如基於linux平台的監控系統,linux啟動後不需要身份驗證,而直接執行監控程式等等。本文以redhat7.2為平台,結合linux啟動過程,介紹了如何避免身份驗證自動 登入,並直接進入x window自動 執行應用...