Linux登入主機取得shel的流程?
image
使用者和使用者組相關的4個重要檔案
(1) /etc/passwd 存放使用者資訊的檔案
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
--->以【:】為分隔符,共7個欄位
欄位1:使用者名稱
欄位2:密碼佔位符
欄位3:使用者帳號的UID號
欄位4:使用者所屬組的GID號
欄位5:使用者描述資訊
欄位6:使用者的宿主目錄
欄位7:使用者登入後用到的shell(/sbin/nologin表示使用者以任何方式都不可登入)
(2) /etc/shadow 存放使用者密碼資訊的檔案
root:$6$XHwHKv5C$1.Q2A9E71ps5SaBE1BSy85/XbMp7CJpb3R7kFMSSkCx6l7zbYKyPH4yZjEsS3yCcbcY4ih5Ykx3GStTtKQJV81:15112:0:99999:7:::
adm:*:15422:0:99999:7:::
--->以【:】為分隔符,共9個欄位
欄位1:使用者名稱
欄位2:已加密的密碼欄位【*:表示加密後的密碼;!!:表示使用者被鎖定】
欄位3:最近密碼改動的日期
欄位4:密碼不可被改動的天數(與第3個欄位相比)【預設0:表示隨時可以改】
欄位5:密碼需要更改的天數(與第3個欄位相比)【預設99999:表示永不過期】
欄位6:需要更改密碼期限前幾天提醒【預設為7】
欄位7:密碼過期後的寬限日期
欄位8:帳號失效日期【預設為空】
欄位9:保留欄位【未使用】
(3) /etc/group 存放使用者組資訊的檔案
root:x:0:
bin:x:1:bin,daemon
--->以【:】為分隔符,共4個欄位
欄位1:組名
欄位2:密碼佔位符
欄位3:GID
欄位4:組成員列表(用“,”隔開)
(4) /etc/gshadow 存放使用者組密碼資訊的檔案
root:::
bin:::bin,daemon
utmp:!::
——>以【:】為分隔符分為4個欄位
欄位1:使用者組名
欄位2:密碼列(開頭為!表示無合法密碼,所以無使用者組管理員)
欄位3:使用者組管理員帳號
欄位4:屬於該使用者組的使用者
有效使用者組與初始使用者組
建立一個使用者test(同時會新建一個同名的使用者組) # useradd test 將test使用者加入到使用者組users中 # usermod -G users test 檢視test使用者在三個檔案中的體現 # grep test /etc/passwd /etc/group /etc/gshadow /etc/passwd:test:x:502:502::/home/test:/bin/bash --->所屬GID502 /etc/group:users:x:100:test /etc/group:test:x:502: --->502是使用者組test,即為test使用者的初始使用者組,是使用者一登入就會取得的,所以第4欄位就不需要寫了 /etc/gshadow:users:::test /etc/gshadow:test:!:: 切換到test使用者 # su - test
使用groups命令檢視test使用者支援的使用者組 $ groups test users ------>第一個輸出的使用者組即為有效使用者組
所以此時新建的檔案其所屬使用者組為test(有效使用者組) $ touch file $ ll file -rw-rw-r--. 1 test test 0 8月 2 03:49 file 使用newgrp命令切換有效使用者組 $ newgrp users
$ groups users test
$ touch file2 $ ll file2 -rw-r--r--. 1 test users 0 8月 2 03:50 file2
使用者管理相關命令
useradd建立使用者
-c “描述資訊”
-u 指定UID
-d 指定宿主目錄【實際上如果這個目錄沒有修改過屬主屬組的話,並沒有什麼卵用】
-g 指定主要組(組名/GID)
-G 指定附屬組(組名/GID)
-s 指定使用者登入shell
-e 指定密碼失效時間(格式為MM/DD/YY)
-M 指定預設不建立宿主目錄
-r 新增系統賬戶。因為這樣這種方式不會自動建立家目錄,所以常配合 -m選項支援建立家目錄
useradd -r user10 -m
passwd 設定密碼
-d 清空使用者的密碼,使之無需密碼即可登入
-l 鎖定使用者帳號(鎖定後/etc/shadow密碼欄位前會多出!!字樣)
-S 檢視使用者帳號的狀態(是否被鎖定)
-u 解鎖使用者帳號
usermod 使用者相關修改
-l 更改使用者帳號的登入名稱
-L 鎖定使用者賬戶
-U 解鎖使用者賬戶
-u、-d、-e、-g、-G、-s 這些選項與useradd命令中的含義相同
userdel刪除使用者
userdel -r 表示連使用者的宿主目錄、賬戶資訊、密碼資訊、同名組帳號、郵件記錄等資訊一併刪除
goupadd建立使用者組
groupadd [-g GID] 組名
-r 建立系統使用者組
goupmod使用者組相關修改
-g 修改組id
-n 修改組名(不建議修改)
groupdel刪除使用者組
groupdel 組名
gpasswd 新增/刪除組成員
gpasswd -a 使用者名稱 組名 //將使用者add新增到該組
Adding user root to group emei
gpasswd -d 使用者名稱 組名 //將使用者delete移除該組
Removing user root from group emei
gpasswd -M root,zwj emei //把多個使用者加入到組
chage命令
選項引數:
-l :列出該賬號的詳細密碼引數;
-d :後面接日期,修改 shadow 第三欄位(最近一次更改密碼的日期),格式YYYY-MM-DD
-E :後面接日期,修改 shadow 第八欄位(賬號失效日),格式 YYYY-MM-DD
-I :後面接天數,修改 shadow 第七欄位(密碼失效日期)
-m :後面接天數,修改 shadow 第四欄位(密碼最短保留天數)
-M :後面接天數,修改 shadow 第五欄位(密碼多久需要進行變更)
-W :後面接天數,修改 shadow 第六欄位(密碼過期前警告日期)
建立一使用者test # useradd test 為test使用者建立一密碼 # echo "123456" |passwd --stdin test 更改使用者 test 的密碼 。 passwd: 所有的身份驗證令牌已經成功更新。 修改該使用者的建立時間 # chage -d 0 test 這時候我們發現使用者test第一次登入會被強制要求該密碼(很有趣和實用的命令) $ su - test 密碼: 您需要立即更改密碼(root 強制) 為 test 更改 STRESS 密碼。 (當前)UNIX 密碼: 新的 密碼:
使用者管理的3個相關檔案
(1) /etc/default/useradd
GROUP=100
HOME=/home //預設的家目錄位置
INACTIVE=-1 //密碼失效日
EXPIRE= //帳號失效日
SHELL=/bin/bash //預設的shell
SKEL=/etc/skel //使用者家目錄的內容資料的參考目錄
CREATE_MAIL_SPOOL=yes //是否主動幫使用者建立郵件信箱
(2) /etc/skel/*
宿主目錄的模板目錄(新建使用者時會預設自動拷貝到宿主目錄下的)
其中三個重要的必須檔案:
.bash_profile:使用者每次登入時執行這個檔案的內容
.bashrc:使用者每次登入shell時執行這個檔案的內容
.bash_logout:使用者每次退出登入時執行這個檔案的內容
--->由於其特性,可以新增一些命令或設定(如alias)實現使用者登入時自動執行,/root/.bashrc就可以很好的運用
--->缺少這三個檔案使用者也可以驗證,但無法登入,su切換時出現-bash-4.1#
(3) /etc/login.defs
這個檔案記錄的是使用者建立時所遵循的一些設定與規則
MAIL_DIR /var/spool/mail //建立使用者時在此目錄中新建使用者的mail檔案
PASS_MAX_DAYS 99999 //密碼需要被更改的天數(/etc/shadow檔案中的第5欄位)
PASS_MIN_DAYS 0 //密碼不可被改動的天數(/etc/shadow檔案中的第4欄位)
PASS_MIN_LEN 5 //密碼最小長度 ,已被pam模組替代,失去效用
[在root下給使用者設定密碼並不受這個約束]
[普通使用者若要給自己修改密碼,其密碼長度要符合/etc/login.defs內部的約束,而且要符合複雜性要求(小寫字母,大寫字母,數字,特殊字元必須要包含三類)]
PASS_WARN_AGE 7
UID_MIN 500 //UID的最小值
UID_MAX 60000 //UID的最大值
GID_MIN 500 //GID的最小值
GID_MAX 60000 //GID的最大值
CREATE_HOME yes //useradd建立使用者時是否預設建立宿主目錄
UMASK 077 //宿主目錄預設的許可權為700
USERGROUPS_ENAB yes //新建使用者時如果沒有指定組,預設新建一個同名的組
ENCRYPT_METHOD SHA512 //密碼加密的方式
通過一個手工建立使用者的例子理解“使用者建立流程”
手工新增使用者qtds,該使用者的uid=510,gid=510,GID=0,home=/qtds,shell=/bin/sh,到期時間為:2015-12-12,密碼:aixcom,並能實現登入。
1. 根據要求,先生成到期時間值和密碼加密值
# echo $(($(date --date="2015/12/12" +%s)/86400+1)) 16782 # grub-md5-crypt Password: Retype password: $1$fZseL$wzg7vzg7jO8XLRmo18rdB.
2. "寫"相關檔案
# echo 'qtds:x:510:510::/qtds:/bin/sh' >> /etc/passwd # tail -n 1 /etc/passwd qtds:x:510:510::/qtds:/bin/sh # echo 'qtds:$1$fZseL$wzg7vzg7jO8XLRmo18rdB:16782:0:99999:7:::' >>/etc/shadow # tail -n 1 /etc/shadow qtds:$1$fZseL$wzg7vzg7jO8XLRmo18rdB:16782:0:99999:7::: # echo 'qtds:x:510:' >> /etc/group # tail -n 1 /etc/group qtds:x:510:
3. 因為qtds這個使用者的附屬組為GID=0(即root組),所以在/etc/group這個檔案中root那行欄位4的組成員列表中新增qtds
# head -n 1 /etc/group root:x:0: # sed '1,1c root:x:0:qtds' -i /etc/group -i選項儲存 # head -n 1 /etc/group root:x:0:qtds
4. 新建家目錄,修改屬主屬組和許可權,拷貝必須的三個檔案
# mkdir /qtds # ll -d /qtds/ drwxr-xr-x. 2 root root 4096 7月 24 09:40 /qtds/ # chown qtds:qtds /qtds/ # chmod 700 /qtds # ll -d /qtds/ drwx------. 2 qtds qtds 4096 7月 24 09:40 /qtds/ # cp /etc/skel/.bash* /qtds/ # ls -a /qtds/ . .. .bash_logout .bash_profile .bashrc