linux用戶分類 超級用戶:UID=0,root 普通用戶:UID 500起,由超級用戶或具有超級用戶許可權的用戶創建的用戶。 虛擬用戶:UID 1—499,為了滿足文件或服務啟動的需要而存在,一般都不能登錄,只是傀儡用戶。 用戶關聯的四個文件: /etc/passwd:用戶的賬號文件 /etc/s... ...
linux用戶分類
超級用戶:UID=0,root
普通用戶:UID 500起,由超級用戶或具有超級用戶許可權的用戶創建的用戶。
虛擬用戶:UID 1—499,為了滿足文件或服務啟動的需要而存在,一般都不能登錄,只是傀儡用戶。
用戶關聯的四個文件:
/etc/passwd:用戶的賬號文件
/etc/shadow:用戶的密碼文件
/etc/group:組的賬號文件
/etc/gshadow:組的密碼文件
賬號管理
useradd(增):同adduser命令,執行此命令可在系統中添加用戶。
userdel(刪):執行此命令可刪除用戶及相關用戶的配置或文件。
usermod(改):修改用戶的命令,可以通過usermod來修改登錄名、用戶的家目錄等。
usermod -s /sbin/nologin oldboy
usermod -s /bin/bash oldboy
id(查):查看用戶的UID、GID及所歸屬的用戶組。
passwd:執行此命令可為用戶設置密碼,更改/etc/shadow。
chage:修改用戶密碼有效期限,管理/etc/shadow。
su:用戶角色切換工具。
sudo:sudo是通過另一個用戶來執行命令,su是用來切換用戶,然後通過切換到的用戶來完成相應的任務,但sudo能在命令後面直接接命令執行,比如sudo ls /root,不需要root密碼就可以執行只有root才能執行相應的命令或具備的目錄許可權;這個許可權需要通過visudo命令或直接編輯/etc/sudoers來實現。
visudo:visudo配置sudo許可權的編輯命令,也可以直接用vi編輯/etc/sudoers實現,推薦使用visudo來操作(會自動檢查語法)。
/etc/skel目錄
/etc/skel目錄是用來存放新用戶配置文件的目錄,當我們添加新用戶時,這個目錄下的所有文件會自動被覆制到新添加的用戶的家目錄下;預設情況下,/etc/skel目錄下的所有文件都是隱藏文件(以點開頭的文件);通過修改、添加、刪除/etc/skel目錄下的文件,可以為新建的用戶提供統一的、標準的、初始化用戶環境。
刪除/home/用戶家目錄 中的.bash_logout、.bash_profile、.bashrc產生的效果:-bash-4.1$
- [root@oldboy xiao1]# rm -f .bash
- .bash_logout .bash_profile .bashrc
- [root@oldboy xiao1]# rm -f .bash*
- [root@oldboy xiao1]# su - xiao1
- -bash-4.1$
解決辦法:
從/etc/skel中拷貝.bash_logout、.bash_profile、.bashr到用戶家目錄即可解決。
- -bash-4.1$ cp /etc/skel/.bash* /home/xiao1/
- -bash-4.1$ logout
- [root@oldboy ~]# su - xiao1
/etc/login.defs配置文件
/etc/login.defs文件是用來定義創建用戶時需要的一些用戶的配置信息。如創建用戶時,是否需要家目錄,UID和GID的範圍,用戶及密碼的有效期限等。
/etc/default/useradd文件
/etc/default/useradd文件是在使用useradd添加用戶時的一個需要調用的一個預設文件,可以使用"useradd -D 參數",這樣的命令格式來修改文件裡面的內容。
- [root@oldboy ~]# cat /etc/default/useradd
- # useradd defaults file
- GROUP=100 #依賴於/etc/login.defs的USERGROUPS_ENAB參數,如果為no則此處控制。
- HOME=/home #把用戶的家目錄創建在/home中
- INACTIVE=-1 #是否啟用賬號過去停權,-1表示不啟用
- EXPIRE= #賬號終止日期,不設置表示不啟用
- SHELL=/bin/bash #新用戶預設所用的shell類型
- SKEL=/etc/skel #配置新用戶家目錄的預設文件存放存放路徑,當用useradd添加用戶時,用戶家目錄下的文件,都從這裡配置的目錄中複製過去。
- CREATE_MAIL_SPOOL=yes #創建mail文件
useradd命令
useradd參數選項 | 註釋說明 |
-c comment | 新賬號passwd擋的說明欄 |
-d home_dir | 新賬號每次登入時所使用的home_dir。預設值為default_home內login名稱,並當成登入時目錄名稱。 |
-e expire_date | 賬號終止日期。日期的指定格式為MM/DD/YY。 |
-f inactive_days | 賬號過期幾日後永久停權。當值為0時賬號則立刻被停權。而當值為-1時則關閉此功能,預設值為-1。 |
-g initial_group | group名稱或以數字來做為用戶登入起始用戶組(group)。用戶組名須為系統現有存在的名稱。用戶組數字也須為現有存在的用戶組。預設的用戶組數字為1。 |
-G group,[…] | 定義此用戶為多個不同groups的成員。每個用戶組使用","逗號分隔。用戶組名同-g選項的限制。預設值為用戶的起始用戶組。 |
-m | 用戶目錄如不存在則自動建立。如使用-k選項,skeleton dir內的檔案將複製至用戶目錄下。然而在/etc/skel目錄下的檔案也會複製過去。任何在skeleton_diror /etc/skel的目錄也相同會在用戶目錄下一一建立。The-k同-m不建立目錄以及不複製任何檔案為預設值。 |
-M | 不建立用戶家目錄,優先於/etc/login.defs文件的設定。一般創建虛擬用戶時不建立家目錄,部署服務時需要創建虛擬用戶。 |
-n | 預設情況下用戶的用戶組與用戶的名稱會相同。如果命令加了-n參數就不會生成和用戶名的用戶組了。 |
-s shell | 用戶登入後使用的shell名稱。預設值為不填寫,這樣系統會指定預設的登入shell(根據/etc/default/useradd預設的值)。 |
-u uid | 用戶的ID值。這個值必須是唯一的,除非用-o選項。數字不可為負值。 |
useradd -e、-u、-G、-s、-d多參數組合的例子:
添加用戶oldboy,並設置用戶註釋信息為HandsomeBoy,UID指定為806,歸屬為用戶組root、oldboy、sa成員,其shell類型為/bin/sh,設置家目錄為/oldboy。
- [root@oldboy ~]# useradd -c "HandsomeBoy" -u 806 -G root,sa,oldboy -s /bin/sh -d /oldboy6 oldboy6
- [root@oldboy ~]# tail -1 /etc/passwd
- oldboy6:x:806:806:HandsomeBoy:/oldboy6:/bin/sh
- [root@oldboy ~]# id oldboy6
- uid=806(oldboy6) gid=806(oldboy6) groups=806(oldboy6),0(root),510(oldboy),511(sa)
groupadd命令
groupadd參數選項 | 註釋說明 |
-g gid | 指定用戶組GID值。除非接-o參數(如:groupadd -g gid)否則ID值必須是唯一的數字(不能為負數)。如果不指定會從500開始。 |
passwd命令
passwd參數選項 | 註釋說明 |
--stdin | 從stdin讀入密碼 |
-k --keep-tokens | 保留即將過期的用戶在期滿後仍能使用 |
-d --delete | 刪除用戶密碼,僅能以root許可權操作 |
-l --lock | 鎖住用戶無權更改其密碼,僅能通過root許可權操作 |
-u --unlock | 解除鎖定 |
-f --force | 強制操作,僅root許可權才能操作 |
-x --maximum=DAYS | 兩次密碼修改的最大天數,後面接數字,僅能root許可權操作 |
-n --mininum=DAYS | 兩次密碼修改的最小天數,後面接數字,僅能root許可權操作 |
-w --warning=DAYS | 在距多少天提醒用戶修改密碼,僅能root許可權操作 |
-i --inactive=DAYS | 在密碼過期後多少天,用戶被禁掉,僅能root許可權操作 |
-S --status | 查詢用戶的密碼狀態,僅能root許可權操作 |
- [root@oldboy ~]# echo 123456|passwd --stdin oldboy
- 或
- [root@oldboy ~]# echo 123456 >p.log
- [root@oldboy ~]# passwd --stdin < p.log
oldboy用戶7天內不能更改密碼,60天以後必須修改密碼,過期前10天提示,過期後30天後禁止用戶登錄。
- [root@oldboy ~]# passwd -n 7 -x 60 -w 10 -i 30 oldboy
- Adjusting aging data for user oldboy.
- passwd: Success
- [root@oldboy ~]# chage -l oldboy
- Last password change : Dec 29, 2016 #最後密碼更換時間
- Password expires : Feb 27, 2017 #密碼過期時間
- Password inactive : Mar 29, 2017 #密碼停權時間
- Account expires : never
- Minimum number of days between password change : 7 #最小修改時間間隔
- Maximum number of days between password change : 60 #最大修改時間間隔
- Number of days of warning before password expires : 10 #警告時間
- [root@oldboy ~]#
/etc/shadow中查看
- [root@oldboy ~]# grep "\boldboy\b" /etc/shadow
- oldboy:!!:17164:7:60:10:30::
批量創建10個用戶stu01-stu10,並且設置隨機8位密碼,要求不能用shell迴圈(for、while等),只能用命令及管道實現。
echo stu{1..10}|tr " " "\n"|sed -r 's#(.*)#useradd \1#g';
使用SHA演算法來加密日期,並輸出結果的前8個字元:
date +%s | sha256sum | base64 | head -c 8 ; echo
echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#useradd \1 ; pass=$((RANDOM+10000000)); echo "$pass"|passwd --stdin \1; echo -e "\1 \t `echo "$pass"`">>/tmp/oldboy.log#g'|bash
修改用戶密碼有效期限相關命令chage
用法:chage [選項] 用戶名
chage參數選項 | 註釋說明 |
-d --lastday | 最近日期,將最近一次密碼設置時間設為"最近日期" |
-E --expiredate | 將賬戶過期時間設為"過期日期",日期寫法:MM/DD/YY |
-h --help | 顯示此幫助信息並退出 |
-l --list | 顯示賬戶年齡信息 |
-m --mindays | 最小天數,將兩次改變密碼之間相距的最小天數設為"最小天數" |
-M --maxdays | 最大天數,將兩次改變密碼之間相距的最大天數設為"最大天數" |
-W --warndays | 警告天數,將過期警告天數設為"警告天數" |
-I --inactive | 失效天數,在密碼過期後多少天,用戶被禁掉 |
修改賬戶過期時間:
- [root@oldboy ~]# chage -E ""2017/01/01 oldboy
查看賬戶的狀態:
- [root@oldboy ~]# chage -l oldboy
- Last password change : Dec 29, 2016
- Password expires : Feb 27, 2017
- Password inactive : Mar 29, 2017
- Account expires : Jan 01, 2017
- Minimum number of days between password change : 7 #7天內禁止修改密碼
- Maximum number of days between password change : 60 #60天後必須修改密碼
- Number of days of warning before password expires : 10 #過期前10天提醒oldboy修改密碼
oldboy用戶8天內不能更改密碼,61天以後必須修改密碼,過期前11通知用戶,過期後31天後禁止用戶登錄。
- [root@oldboy ~]# chage -m 8 -M 61 -W 11 -I 31 oldboy
- [root@oldboy ~]# chage -l oldboy
- Last password change : Dec 29, 2016
- Password expires : Feb 28, 2017
- Password inactive : Mar 31, 2017
- Account expires : Jan 01, 2017
- Minimum number of days between password change : 8
- Maximum number of days between password change : 61
- Number of days of warning before password expires : 11
與passwd -n 8 -x 61 -w 11 -i 31 oldboy、chage -m8 -M61 -W10 -I30 oldboy功能相同只是參數不一樣。
刪除用戶相關命令userdel
語法格式:userdel 用戶名 或語法格式:userdel 用戶名 -r
在生產場景中,不要輕易使用-r參數,這會在刪除用戶的同時刪除用戶家目錄下的所有的文件和目錄。如果一定要刪除家目錄,那麼在刪除前先備份。直接在/etc/passwd中註釋要刪除的用戶記錄是生產場景中常用的方法。
刪除用戶組相關命令groupdel
groupdel是用來刪除用戶組的,要求用戶組名必須是已存在的。用groupdel刪除用戶組實際修改/etc/group(用戶組文件)和/etc/gshadow(用戶組加密文件)。
語法格式:groupdel 用戶組
查看用戶組:
grep 用戶組 /etc/group
grep 用戶組 /etc/gshadow
用戶信息修改相關命令usermod
usermod參數選項 | 註釋說明 |
-e expire_date | 加上用戶賬號停止日期。日期格式為MM/DD/YY。 |
-g initial_group | 更新用戶新的起始登入用戶組。用戶組名必須已存在。 |
-U | 取消凍結用戶的密碼,使恢復登錄,實際同樣是修改/etc/shadow的 |
-G group,[…] | 定義用戶為一堆groups的成員。每個用戶組只用","逗號隔開。 |
-l login_name | 變更用戶login時的名稱為login_name。其餘信息不變。usermod -l newname oldname |
-s shell | 指定新登入shell。 |
-u uid | 指定用戶UID只。這個值必須是唯一的,除非接-o參數,如usermod -u 505 -o oldboy(不能為負數) |
-L | 凍結用戶的密碼,使無法登陸。 |
-c | 修改用戶賬號的備註信息 |
-d | 修改用戶家目錄 |
-f | 修改在密碼過期後多少天關閉該賬號 |
將oldboy用戶的註釋信息修改為OldBoy,UID修改為1806,歸屬修改為用戶組root、sa成員,其shell類型修改為/bin/tcsh,設置家目錄為/tmp/oldboy。
- [root@oldboy ~]# grep oldboy /etc/passwd
- oldboy:x:806:806:HandsomeBoy:/oldboy:/bin/sh
- [root@oldboy ~]# grep "\boldboy\b" /etc/passwd
- [root@oldboy ~]# usermod -c OldBoy -u 1806 -G root,sa -s /bin/tcsh -d /tmp/oldboy oldboy
- [root@oldboy ~]# grep oldboy /etc/passwd
- oldboy:x:1806:806:OldBoy:/tmp/oldboy:/bin/tcsh
使用戶在2012-01-22後過期
- [root@oldboy ~]# usermod -e 01/22/12 oldboy #chage -E 01/22/12 oldboy一樣
- [root@oldboy ~]# chage -l oldboy
- Last password change : Dec 29, 2016
- Password expires : never
- Password inactive : never
- Account expires : Jan 22, 2012
- Minimum number of days between password change : 0
- Maximum number of days between password change : 99999
- Number of days of warning before password expires : 7
w、who、users、last、lastlog命令
w:顯示已經登錄的用戶,並且都做了什麼的信息。查看的信息與/var/run/utmp文件有關。
- [root@oldboy ~]# w
- 14:37:32 up 3:47, 1 user, load average: 0.00, 0.00, 0.00
- USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
- root pts/0 192.168.31.1 11:43 0.00s 0.13s 0.00s w
who:顯示哪些用戶在登錄,終端及登錄時間,來源主機。
- [root@oldboy ~]# who
- root pts/0 2016-12-30 11:43 (192.168.31.1)
users:僅僅顯示哪些用戶在登錄
- [root@oldboy ~]# users
- root
last:顯示已登錄的用戶列表及登錄時間等,查看的信息與/var/log/wtmp及/var/log/btmp兩個文件有關。
- [root@oldboy ~]# last
- root pts/0 192.168.31.1 Fri Dec 30 11:43 still logged in
- reboot system boot 2.6.32-504.el6.x Fri Dec 30 10:50 - 14:40 (03:50)
- test tty1 Fri Dec 30 09:01 - down (01:24)
- test tty1 Fri Dec 30 09:01 - 09:01 (00:00)
- root pts/0 192.168.31.1 Fri Dec 30 08:27 - down (01:59)
- reboot system boot 2.6.32-504.el6.x Fri Dec 30 08:26 - 10:26 (02:00)
- root pts/1 192.168.31.1 Thu Dec 29 21:04 - 00:06 (03:01)
- root pts/1 192.168.31.1 Thu Dec 29 21:04 - 21:04 (00:00)
- root pts/0 192.168.31.1 Thu Dec 29 18:28 - down (05:39)
lastlog:報告最近的所有系統用戶的登錄信息,查看的信息與/var/log/lastlog日誌有關。
- [root@oldboy ~]# lastlog
- Username Port From Latest
- root pts/0 192.168.31.1 Fri Dec 30 11:43:36 +0800 2016
- saslauth **Never logged in**
- postfix **Never logged in**
- sshd **Never logged in**
- tcpdump **Never logged in**
- test tty1 Fri Dec 30 09:01:52 +0800 2016
- oldgirl **Never logged in**
- xiao1 **Never logged in**
數據文件查看,數據文件不能用cat查看。
- [root@oldboy ~]# file /var/log/lastlog
- /var/log/lastlog: data
groups命令
語法格式:groups 用戶名
- [root@oldboy ~]# groups oldboy #查詢oldboy所屬的用戶組
- oldboy : oldboy root sa #oldboy用戶分別為oldboy、root、sa三個組的成員
su命令
語法格式:su [選項參數] 用戶名
su參數選項 | 註釋說明 |
-,-l,-login | make the shell a login shell,使一個shell成為登陸的shell,如執行su - oldboy,並且使用oldboy用戶的環境變數配置,如/home/oldboy/.bash_profile等。 |
-c,--command=COMMAND | 切換到一個shell下,執行一個命令,然後退出所切換的用戶環境。 |
-m,--preserve-environment | 切換用戶時,不重置用戶環境變數,-p的功能同-m。 |
-s,--shell=SHELL | 如果/etc/shells允許,則運行指定的shell。 |
su命令總結:
1、普通用戶切換到root用戶,可以使用su - 或su – root,必須輸入root的密碼才能完成切換。
2、root用戶切換到普通用戶,可以使用"su – 用戶名"的寫法,不需要輸入密碼就能切換完成。在切換到普通用戶後,在執行一些命令如ifconfig時,可能會遭遇到環境變數PATH路徑問題而找不到系統命令(一般是/sbin,/usr/sbin等下麵的命令),這時就需要將普通用戶的PATH,配置成root的PATH。
3、如果僅僅希望以某個用戶的角色執行命令,而不直接切換到該用戶下操作,可以使用"su - 用戶名 -c 命令" 的方式執行。
- [root@oldboy ~]# su - oldboy -c "touch a.txt"
- [root@oldboy ~]# ls -la /home/oldboy/a.txt
- -rw-rw-r-- 1 oldboy oldboy 0 Dec 30 16:05 /home/oldboy/a.txt
sudo命令
sudo工作原理
語法格式:sudo [參數選項] 命令
sudo參數選項 | 註釋說明 |
-l | 列出用戶在主機上可用的和被禁止的命令,當配置好sudo授權規則後,可用這個參數來查看授權情況。 |
-v | 驗證用戶的時間戳,當用戶運行sudo,輸入用戶的密碼後,在短時間內可以不用輸入口令直接進行sudo操作,用-v可以跟蹤最新的時間戳。 |
-u | 指定以某個用戶身份執行特定的命令操作。oldboy ALL=(ALL) /bin/cp |
-k | 同-K,刪除時間戳,下一個sudo命令要求提供密碼,前提是該用戶授權中不能有NOPASSWD:參數。時間戳預設5分鐘失效。 |
visudo相當於vi /etc/sudoers。
visudo -c檢查語法
主機別名:
13 # Host_Alias FILESERVERS = fs1, fs2
14 # Host_Alias MAILSERVERS = smtp, smtp2
用戶別名:
定義系統管理用戶別名ADMINS,包含成員oldboy,mikem及sa組的成員。
User_Alias ADMINS = oldboy, mikem, %sa
註意定義的規範。
定義用戶別名NETADMINS來管理網路,包含成員leo,maya。
User_Alias NETADMINS = leo, maya
定義用戶別名USERADMINS來管理用戶,包含成員zuma。
User_Alias USERADMINS = zuma
特別說明:為了方便管理,要儘可能使用有意義的名稱作為別名。
命令別名:
27 # Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
案例:
- User_Alias ADMINS = oldboy,%sa
- User_Alias CHUJIADMIN = oldboy,oldgirl
- Host_Alias SERVERS = oldboy,test
- Cmnd_Alias ADMINCMD = /bin/rm
- Cmnd_Alias USER = /usr/bin/useradd
- Runas_Alias OP = root
- Runas_Alias OP1 = oldboy
- ADMINS SERVERS =(OP) NOPASSWD:ADMINCMD,USER
- CHUJIADMIN SERVERS =(OP) NOPASSWD:USER
sudo配置文件/etc/sudoers授權規則註意事項總結:
1、授權規則中的所有ALL字元串必須為大寫字母。
2、禁止的命令儘量放在後面,使用!排除(!/sbin/fdisk)。
3、一行內容超長可以用"\"斜線換行。
4、"!"嘆號表示非,就是命令取反的意思,即禁止執行的命令。