linux 賬戶和密碼匹配實現

2021-09-19 20:30:10 字數 1846 閱讀 6728

首先還是要簡單的說下賬戶與密碼都在**。

linux系統中,所有使用者(包括系統管理員)的賬號和密碼都可以在/etc/passwd和/etc/shadow這兩個檔案中找到。

檢視許可權可發現passwd檔案誰都可以檢視,而shadow只有root及同組使用者可以

-rw-r–r-- 1 root root 1912 10月 15 2018 passwd

-rw-r----- 1 root shadow 1127 10月 15 2018 shadow

首先檢視下passwd檔案有啥內容

上面每一行都代表乙個使用者,每一行又通過[:]分為七個部分。

1、賬號名稱

2、原先用來儲存密碼的,現在密碼都放在/etc/shadow中,所以這裡顯示x

3、uid,也就是使用者id。預設的系統管理員的uid為0,我們新增使用者的時候最好使用1000以上的uid,1-1000範圍的uid最好保留給系統用。

4、gid,也就是群組id

5、關於賬號的一些說明資訊(暫時可以忽略)

6、賬號的家目錄,家目錄就是你登陸系統後預設的那個目錄

7、賬號使用的shell(不確定)

接著我們來檢視 shadow檔案

這裡也是由[:]來進行分割,但是這裡一共分出來九個欄目,每個欄目的解釋如下:

1. 賬戶名稱

2.加密後的密碼,如果這一欄的第乙個字元為!或者*的話,說明這是乙個不能登入的賬戶,從上面可以看出,ubuntu預設的就不啟用root賬戶。密碼格式為:$id$salt$encrypted

正題是啥,賬號密碼的匹配,打字好累,直接上**吧

#define _xopen_source     //定義該巨集,使crypt函式有效

#include #include #include #include #include //crypt

//extern char *crypt(const char *key, const char *salt); //函式不宣告預設返回型別位整形。

int main(char argc,char* ar**)

struct spwd *pwd = getspnam(ar**[1]); //從shadow檔案獲取賬戶資訊

char salt[16] = ;

if(pwd)

else

struct passwd *pw = getpwnam(ar**[1]); //從passwd檔案中獲取賬戶資訊

printf("code:%s\n",pw->pw_passwd); //x

char *cpwd = crypt(ar**[2], salt);//合成shadow 中的密碼

if(!cpwd)

if(!strcmp(cpwd,pwd->sp_pwdp))

else

//char path[50]=;

//getcwd(path,50); //獲取當前所在目錄

//printf("getcwd:%s\n",path);

return 0;

}

編譯與執行結果:

小結:實現了如何驗證輸入的賬戶和密碼是系統管理的賬戶與密碼,可以用於ftp伺服器登入驗證等應用。

Linux忘記root賬戶密碼

鄙人試二個版本 centos6 centos7 一 centos6 1 開機顯示3,2,1 second.的時候按回車鍵,顯示系統核心 2 選擇你的核心,按e鍵 顯示如下 3 向下選擇第二項再按e鍵,顯示如下 4 在quiet後面加個空格,再加個1 5 修改完成回車鍵,回到上個賬戶介面,再按b鍵進入...

不用互動方式修改Linux賬戶密碼

通常,要養成定期修改作業系統使用者密碼的習慣,一般我們用passwd username這樣的命令來進行密碼修改,但是如此一來就要進入互動模式進行修改 如圖 那麼對於利用指令碼更改密碼的情況,反而因為互動模式而變得不簡潔,所以要用另一種方式避開互動模式 第一種 echo newpasswd passw...

Linux賬戶密碼過期安全策略設定

主機上普通使用者執行crontab e 時,會報錯,資訊如下 you 使用者名稱 are not allowed to access to crontab because of pam configuration.問題排查思路 一 檢查crond許可權。1 cat etc corn.deny,檔案是...