用戶和組
操作系統都有用戶和組,windows,linux等等,用戶和組用來做什么呢?
用戶,是我們進入系統時的憑證,不是每一個人想進就進的。你想吧,如果操作系統沒有用戶就能登錄進系統,那這就帶來了許許多多的安全隱患了。而組則是為了方便管理用戶的一個組容器。
那下面我們就來說說創建用戶和組的命令。
useradd:創建用戶
useradd命令用于Linux中創建的新的系統用戶。useradd可用來建立用戶帳號。帳號建好之后,再用passwd設定帳號的密碼.而可用userdel刪除帳號。使用useradd指令所建立的帳號,實際上是保存在/etc/passwd文本文件中。而密碼則是放在/etc/shadow文件中。
其實當我們創建一個用戶時系統默認更改了/etc/passwd 、/etc/shadow、/etc/group、 /etc/ gsh adow這四個主要的文件,實則還有其他一些不太重要的文件,比如郵箱等等。就不一一說了。
用法:useradd [options] LOGINname
選項options:
-M:不創建家目錄 #useradd -M user1 //創建用戶時不創建用戶的家目錄 -u:創建用戶并指定其UID #useradd -u 1001 user1 //如果不指定UID系統會默認給用戶指定一個已有的普通用戶UID最大的然后+1,賦給user1 -g:創建用戶并指定其基本組(基本組只能指定一個) #useradd -g group1 user1 //注意:基本組必須事先存在,才能指定用戶的基本組 -s:創建用戶并指定其shell #useradd -s /bin/bash user1 //shell必須為當前系統上可用的shell,查看/etc/shells即可看到系統當前可用shell -c:創建用戶并指定其注釋信息 #useradd -c “this is new user ” user1 //注釋信息用finger +username 即可查看用戶的基本信息 -d:創建用戶并指定其家目錄 #useradd -d /home/users user1 //,如果指定的家目錄不存在,則不會創建。如果沒有手動指定家目錄系統會自動在/home/中創建與用戶名相同目錄作為家目錄。 系統默認給用戶創建家目錄實則是在/etc/skel/中復制家目錄的模板給用戶。 -r:創建系統用戶 #useradd -r system1 //創建之后此用戶的UID即為1~499或者1~999之間,這取決與你是centos6還是7版本。系統用戶一般是不用來登錄的,只是用在系統自行用系統用戶來運行某些進程所使用。 -G:創建用戶并指定其附加組(附加組可以多個) #useradd -G gruop1,group2 //注意:指定用戶附加組時其必須事先存在,才能完成指定。指定多個附加組時用逗號 “ ,”隔開
若我們什么選項都沒有指定,直接使用useradd username創建一個用戶,系統會默認指定上述所有選項的信息。那么他們是依照什么來創建的呢?請往下看。
注意:如果我們使用useradd直接創建系統用戶時,系統用戶是沒有家目錄的,shell類型也為/bin/nologin不可登錄類型。
- D:顯示創建用戶是的默認配置 #useradd -D -s /bin/csh 這樣可以更改創建用戶時默認shell,但只不過是臨時的。 useradd -D 調用了/etc/default/useradd里面定義了創建用戶是的默認信息 [root@localhost home]# cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes //對比一下吧 [root@localhost home]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
當我們創建用戶是的默認配置的配置文件有兩個:
第一:/etc/default/useradd
//此為創建用戶是的默認配置信息文件,更改此文件的配置信息在創建是就依據這個配置文件來指定默認配置。
第二:/etc/login.defs
//此文件為用戶創建時的默認權限、密碼策略等設置
系統中,還有一個命令也是添加用戶的,就是adduser,他實則是一個軟鏈接文件,指向的實際文件地址還是useradd,所以使用它跟useradd是一樣的
[root@localhost home]# ls -l `which adduser` lrwxrwxrwx. 1 root root 7 Jul 25 09:01 /usr/sbin/adduser -> useradd [root@localhost home]#
在生活中,我們想要一次創建很多用戶,如果一個一個的useradd 加上用戶名的話感覺有點low,所以我們來試一試高大上的吧!
Step1:如何同時創建多個用戶?首先,我們創建一個文本文件,在里面填寫需要添加的用戶信息。注意:格式必須和/etc/passwd 文件中的格式一致。下面就是我們要添加的用戶,然后保存并退出。
[root@localhost home]# vim passwd.txt user1:x:2001:2001:user1:/home/user1:/bin/bash user2:x:2002:2002:user2:/home/user2:/bin/bash user3:x:2003:2003:user3:/home/user3:/bin/bash user4:x:2004:2004:user4:/home/user4:/bin/bash
Step2:然后執行newusers passwd.txt;執行之后用getent查看一下/etc/passwd文件中有沒有關于我們創建的用戶信息,(/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow)這幾個文件系統都已經默認創建好了。但是發現用戶的家目錄沒有文件。所以這就得自己復制了。
[root@localhost home]# newusers passwd.txt [root@localhost home]# getent passwd user1 //可以更換用戶查詢 user1:x:2001:2001:user1:/home/user1:/bin/bash
Step3:在/etc/skel/中拷貝家目錄文件到我們創建的用戶家目錄中。當然,可以批量創建用戶,必然也可以批量更改用戶密碼。
[root@localhost skel]# cp -r /etc/skel/. /home/user1 [root@localhost skel]# cp -r /etc/skel/. /home/user2 [root@localhost skel]# cp -r /etc/skel/. /home/user3 [root@localhost skel]# cp -r /etc/skel/. /home/user4 [root@localhost skel]# ls /home/user4 [root@localhost skel]# ls -a . .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla
Step4:批量更改我們剛創建的用戶密碼,文件格式為“username:passwd”。這樣我們這個批量創建用戶和批量更改密碼也就完成了。其實也沒多高大上。
[root@localhost /]# vi pass.txt [root@localhost /]# cat pass.txt user1:centos user2:centos user3:centos user4:centos [root@localhost /]# cat pass.txt | chpasswd
//這里使用管道從定向,將文件中的數據傳送給chpasswd命令,然后再由chpasswd命令將數據添加到shadow文件中。
上面,我們用到了兩個命令,分別是newusers和chpasswd,簡單分析,newusers應該就是”new users“ 翻譯為“新的用戶,而且還為復數,所以加上s ,另一個你應該知道了吧。 這個分析不標準,僅供參考;下面我們就來說說這兩個命令的含義,以及復制家目錄時的注意事項。
newusers: 用于批處理的方式一次創建多個命令。
chpasswd: 批量更新用戶口令的工具,是把一個文件內容重新定向添加到/etc/shadow中。
使用newusers和chpasswd批量創建時,必須事先把需要創建的用戶信息按照特定格式來創建好。其中,newusers批量添加用戶則需要按照/etc/passwd中的內容格式創建。而chpasswd批量更改用戶密碼則需要根據/etc/shadow中的內容格式來創建。至于為什么需要按照這兩個文件的格式來創建,因為一個是創建用戶,而用戶的信息是保存到/etc/passwd中的。而用戶密碼則是在/etc/shad ow中的。So,That's it。
這里有個技巧,聰明的人應該能想到,當我們創建用戶或更改用戶密碼時,寫在文件中的數據只是為了能讓后面的命令調用執行,那要是使用這種辦法創建一個,則不需要文件了。
echo ’user1:redhat‘ | chpasswd //這就相當于更改用戶的密碼了,是不是跟寫在文件中一樣呢?現在知道寫在文件中的初衷是干什么了吧?!
上面我們復制了/etc/skel/中的數據給用戶的家目錄,有幾種方法。
1)進入skel目錄中在執行復制命令
cp -r `ls -A` /home/user100 //其中使用到了命令替換,將ls -A 顯示出來的結果被cp調用,然后遞歸復制其文件到用戶的家目錄中。
2.復制skel下的以點開頭然后中間為非點,后面接任何內容的文件到用戶家目錄中。
cp -r /etc/skel/.[^.]* /home/user100
3.這是最好的一種,直接復制/etc/skel/當前目錄的所有文件到用戶家目錄中。
cp -r /etc/skel/. /home/user100
結論:復制目錄下的文件時,不能使用(如:cp -r /etc/skel/*)此類的方法,因為這樣復制的不單是當前目錄中的文件,而是連上一層目錄的所有文件都給復制過去了。我們知道,每個目錄中都有兩個特殊的文件,即" .. " 和 “ . ” ,他們代表什么意思呢?一個表示上一層目錄,另一個表示當前目錄,如果我們使用(如:cp -r /etc/skel/*)這樣不就兩個都包括了?所以我們上面的第三種方法即為復制/etc/skel/的當前目錄下的所有文件,因為 “ . ” 表示為當前目錄。懂了嗎?
學完用戶創建之后現在來看一下創建完用戶之后又怎么修改用戶。修改用戶即為當我們在使用環境中根據自己特定的需求來更改屬性。這個任務則一般交給usermod來處理。
usermod:用戶屬性更改
usermod命令用于修改用戶的基本信息。usermod命令不能更改正在線上的用戶。
用法:usermod [options] LOGINname
常用選項:
-u:更改用戶UID #usermod -u 1001 user1 -g:更改用戶基本組(基本組只能指定一個) #usermod -g group1 user1 //注意:基本組必須已存在,才能指定用戶的基本組 -s:更改用戶其shell #usermod -s /bin/bash user1 //shell必須為當前系統上可用的shell,查看/etc/shells即可看到系統當前可用shell -c:更改用戶注釋信息 #usermod -c “this is new user ” user1 //注釋信息用finger +username 即可查看用戶的基本信息 -d:創建用戶其家目錄 #usermod -d /home/users user1 //用戶原有的文件不會被轉移至新位置,必須跟上-m選項才能復制用戶原有的家目錄文件到新家目錄中 -m:用于將用戶原有的家目錄移至新的家目錄,只能配合-d使用 #usermod -dm /new/home user2 -G:更改用戶其附加組(附加組可以多個,用逗號 “ ,”隔開) #usermod -G group1,group2 //注意:用戶原有的附加組將會被替換,如不想被替換到,則使用-a選項,表示為追加用的附加組 - l:更改用戶名 #usermod -l "newname" user1 //將user1用戶名更改為雙引號“ newname” 內的內容 -L:(lock)鎖定用戶密碼 #usermod -L user1 //鎖定之后就不能登錄,當然,有鎖就有鑰匙。 -U:(unlock)解鎖 #usermod -U user1
當然,有添加更改就一定有刪除,沒有為什么……
userdel:刪除指定用戶
用于刪除給定的用戶,以及與用戶相關的文件。如果不加選項,則僅刪除用戶帳號,而不刪除相關文件,如家目錄。
選項:- r //刪除用戶時也刪除用戶的家目錄。
用戶組使用技巧:
清空用戶的附加組
#usermod -G " " username
//這表示使用-G添加用戶的附加組時,不指定組名,則不就表示用空覆蓋原有的附加組,因為我們這里沒有使用-a選項,-a選項不是覆蓋,而是追加,所以這樣清空也是一個技巧。
結論:用戶修改(usermod)大多數常用選項都和用戶添加(useradd)選項一樣。只不過一個用于添加,一個用于修改;刪除則更為簡單,就一個常用選項為 -r ,則刪除用戶也刪除家目錄,記下這句話有助于你理解他們的作用,以及幫助記憶。
上面我們創建用戶時,每個用戶都有id號,什么UID,GID,用他們來干什么呢?對我們有沒有用呢?
操作系統中,文件用inode節點號識別,那么用戶呢?用戶則是用id號來表示的,系統只能通過ID號來識別具體的用戶,具體叫什么名字只不過是為了人類記憶罷了,其中linux所有發行版中權限最大的root賬戶的ID為0,其余的都為普通賬號,系統中uID和gID都是從0~65536,但其中使用到的一般為0~60000,uID和gID的 0 都是給超級管理員root所使用的,其余為系統用戶和普通登錄用戶所使用。
id命令可以顯示真實有效的用戶ID(UID)和組ID(GID)。UID 是對一個用戶的單一身份標識。其中一個組ID(GID)中可以有多個UID,因為組就是用來存放用戶的。
id:顯示用戶的ID號
不帶選項輸入id會顯示當前用戶的UID、GID以及附加組GID。
選項:
-u: UID #id -u 則會顯示當前用戶的UID號,如果后面加上指定的用戶名則會顯示指定用戶的UID。 #id -u USERNAME -g: 基本組ID #id -g 則會顯示當前用戶的GID號,如果后面加上指定的用戶名則會顯示指定用戶的GID。 #id -g USERNAME -G: 顯示用戶所屬的所有組ID #id -G 則會顯示當前用戶的所屬的所有GID號,如果后面加上指定的用戶名則會顯示指定用戶的所屬的所有GID號。 #id -G USERNAME -n:顯示對應的ID的名稱 #id -un 則會顯示當前用戶的UID名稱,如果后面加上指定的用戶名則會顯示指定用戶的UID名稱。 #id -un USERNAME 其余的GID也是用樣的操作
結論:ID號在操作系統中是用戶的組的唯一標識。組和用戶的ID相同不受影響,因為他們是兩個獨立的類型,但組內和用戶內各ID不能重復
當我們終端中練習測試時,難免有切換用戶的時候,難道我們都要每次退出再重新登錄嗎?那大可不必這樣。使用su命令即可完成在終端中切換當前用戶的操作。
下面來說說su命令的使用方法以及注意點;
su命令用于切換當前用戶身份到其他用戶身份,變更時須輸入所要變更的用戶帳號與密碼。而root用戶可以切換到任意一個用戶,并且不用密碼,其他用戶切換至任意用戶則都需要
su:不用退出在終端中切換用戶
切換有兩種方式
不完全切換和完全切換,又叫做非登錄式切換和登錄式切換。
不完全切換(非登錄式切換)特點:不會讀取切換的用戶的相關的配置文件
完全切換(登錄式切換)特點:會模擬正常登錄時讀取其用戶的配置文件重新初始化
1.不完全切換,非登錄式切換
#su username //用此方法切換時,當前目錄不會更改
2.完全切換有兩種方法 一個為直接加 “ – ” ,一個為 “ -l ’ 選項
#su - username 默認切換到root #su -l username //用此方法切換時會回到當前用戶的家目錄中
3.用指定的用戶指定某命令,但不切換
#su - root -c 'pwck' 以root的用戶執行pwck命令,讓用戶執行完命令之后又返回當前用戶
結論:各種方法切換時的效果是不一樣的,這取決于我們的需求。
用戶密碼,是用最重要的參數,丟失密碼則會失去安全性,我們在密碼這方面一定要注意到幾點:1.別使用自己的信息作為密碼;2.密碼長度一定要長;3.密碼結構為字符,數字,大小寫字母最為好;4.定期更改時間等。上面我們提到用戶的更改都沒提到密碼管理或更改,尤其體現出密碼的重要性,用單獨的命令來管理用戶密碼,則是passwd命令
passwd:修改用戶口令信息
用于設置用戶的認證信息,包括用戶密碼、密碼過期時間等。超級管理員可以更改每一個用戶的密碼,而普通用戶一般則只能更改自己的密碼。
注意: (1)不加任何選項即為修改當前用戶密碼
(2)加選項并指定用戶名更改密碼
常用選項:
-l /U: 解鎖或鎖定用戶 #passwd -l user1 //鎖定用戶之后不能登錄 #passwd -U user1 //解鎖用戶 -d:清除用戶密碼串 #passwd -d user1 //運行之后用戶就沒有密碼 -e DATE:用戶密碼過期期限日期,快速讓用戶密碼過期,但用戶可以在下次登錄前重設密碼 #passwd -e user1 //讓用戶密碼立即過期,只有在下次登錄時重設 -i DAYS:非活動期限: #passwd -i 99999 user1 //指定用戶的非活動期限 直接寫天數。 -n DAYS:密碼最短使用期限 #passwd -n 0 user1 //指定user1的密碼最短使用期限為0,意為密碼最少能用多少天,0為不限 -x DAYS:密碼最長使用期限 #passwd -x 99999 user1 //指定user1的密碼最長使用期為99999,意為密碼最多能使用多少天,99999為不限時間 -w DAYS:密碼離過期幾天前提醒天數 #passwd -w 7 user1 //指定user1的密碼過期7天前開始提醒用戶更改密碼 --stdin:從標準輸入中讀取密碼來給用戶設定密碼 //這個常用 #echo "centos" | passwd --stdin user1 //將user1用戶的密碼設定為centos ,其中使用了管道重定向,是將前一個命令的輸出當做后一個命令的輸入
結論: -l 鎖定用戶,其原理是在shadow中密碼字段加感嘆號“ !” 。
如果我們新創建一個用戶沒有指定密碼,其/etc/shadow文件中密碼字段為雙感嘆號“ ??!” ,如果此時我們使用 -u 選項解鎖時,會提示其密碼解鎖之后為空,不讓解鎖,此時我們可以使用-f 強制解鎖。
當我們使用passwd對密碼更改不夠完全時,可以使用chage命令更改用戶密碼策略
chage:更改密碼策略
chage [option]… login
-m:密碼可更改的最小天數。為零時代表任何時候都可以更改密碼。 -M:密碼保持有效的最大天數。 -w:用戶密碼到期前,提前收到警告信息的天數。 -E:帳號到期的日期。過了這天,此帳號將不可用。 -d:上一次更改的日期。 -l:例出當前用戶的密碼策略信息 [root@localhost /]# chage -l root Last password change: Jul 25, 2016 //密碼最近更改日期 Password expires: never//密碼不過期 Password inactive: never//密碼永遠可用 Account expires: never//賬戶不過期 Minimum number of days between password change: 0 //密碼多少天之內不能更改,此為0表示任何時候都可以更改 Maximum number of days between password change: 99999 //密碼多少天之內必須更改,此為99999表示密碼永久有效 Number of days of warning before password expires: 7 //密碼要過期前幾天通知,默認為7天前開始通知
chage username 不加選項直接指定用戶是,以默認的交互式更改用戶的密碼策略,其中不填信息則為默認信息
[root@localhost /]# chage user1 Changing the aging information for user1 Enter the new value, or press ENTER for the default Minimum Password Age [0]: 0 Maximum Password Age [99999]: 99999 Last Password Change (YYYY-MM-DD) [2016-07-25]: 2016-8-2 Password Expiration Warning [7]: Password Inactive [-1]: Account Expiration Date (YYYY-MM-DD) [-1]:
相關與用戶的相關命令差不多就說到這里了。更過關于用戶的命令去google吧。
用戶介紹完了之后來看看組吧,組是系統為了方便管理用戶的一種機制,對組設置權限等操作之后,只在文件上針對組設定權限之后組里的成員就會繼承此組權限來訪問此文件,就不用一一對組進行操作了,是不是簡單快捷很多?
groupadd:添加用戶組
-g:創建組指定gid #groupadd -g 2000 group1 //創建組group1并給group設定組ID為2000 -r:創建系統組 #groupadd -r -g 150 group1 //創建系統group1,并給系統組設定ID為150。注意:centos 6中系統組ID為1~499,centos 7中為1~999。
有添加也有修改
groupmod:組修改
-g:修改組ID號 -n:修改組名 #groupmod -n “newgrp1” group1 //修改組group1新名稱為newgrp1
當然也有刪除,刪除就更簡單了,直接跟上要刪除的組即可
groupdel:刪除組
#groupdel newgrp1 //刪除組newgrp1
結論:對于組的操作也挺簡單的,就是GID、名稱、系統組、刪除這幾個操作。當然組也應該能向上面我們使用的批量添加用戶的方法吧?趕快試試吧。
另外也有幾個對于組進行操作的命令
groupmems:查看用戶的附加組
-a:添加 #groupmems -a user4 -g root //把用戶user4添加到root組里 -d:刪除 #groupdel -d user4 -g root //把用戶4從root組里移除掉 -l:查看 groupmems -l -g GROUP //查看以GROUP為附加組的用戶列表 -g:組
結論:groupmems是一個簡單的對組操作添加刪除用戶以及查看以此組為附加組的用戶列表的小工具。
還有一個對組進行操作的命令,但是這個命令可以給組設定管理員,改管理員可以對此組進行用戶的添加刪除操作
gpasswd
組管理相關配置文件: /etc/group、/etc/gpasswd
用法: gpasswd [option] group
常用選項:
-a username:向組中添加用戶 [root@localhost ~]# gpasswd -a user1 magedu //把user1添加到magedu組中 Adding user user1 to group magedu//提示信息添加完成 -d username:從組中移除用戶 [root@localhost ~]# gpasswd -d user1 magedu //把user1從magedu組中移除 Removing user user1 from group magedu //提示信息完成移除 -A:設置有管理權限的用戶列表 #gpasswd -A user4 bin //設定用戶user4為bin組的管理員,用user4登錄之后可以添加用戶的bin組里,其他用戶則不能添加
結論:groupmems 和 gpasswd 還是有區別的,雖然都可以添加用戶和刪除用戶,但用法則不一樣, 這必須多練習才能掌握好。
在終端中切換臨時組為基本組
newgrp命令
newgrp:臨時切換指定的組為基本組,如果組設定有密碼需輸入密碼才能完成切換,但如果組沒有密碼無論如何都切換不進去。因為切換組必須得有密碼才能完成切換。
用法:newgrp [-] [group]
其中:“ – ”表示如果使用之后會模擬用戶登錄的程序,以便初始化工作環境
原創文章,作者:Lii,如若轉載,請注明出處:http://www.www58058.com/27610