Linux 用户 和 用户组 管理 (添加、删除、修改)及说明
From:http://www.cnblogs.com/xd502djj/archive/2011/11/23/2260094.html
鳥哥官網 Linux 帳號管理與 ACL 權限設定:http://linux.vbird.org/linux_basic/0410accountmanager.php
鳥哥官網(簡體中文):http://cn.linux.vbird.org/linux_basic/linux_basic.php
Linux 中將用戶添加到組的指令:https://cnzhx.net/blog/linux-add-user-to-group/
?
su 默認切到 root
su 與 su - 的區別:
- su 是不改變當前變量
- su - 是切換到用戶的變量
su root 和 su - root 有什么區別?
- su 只能獲得 root 的執行權限,不能獲得環境變量
- su - 是切換到 root 并獲得 root 的環境變量及執行權限。
?
?
理解Linux的單用戶多任務,多用戶多任務概念
?
Linux 是一個多用戶、多任務的操作系統;我們應該了解單用戶多任務和多用戶多任務的概念;
?
1、Linux 的單用戶多任務;
單用戶多任務;比如我們以beinan 登錄系統,進入系統后,我要打開gedit 來寫文檔,但在寫文檔的過程中,我感覺少點音樂,所以又打開xmms 來點音樂;當然聽點音樂還不行,MSN 還得打開,想知道幾個弟兄現在正在做什么,這樣一樣,我在用beinan 用戶登錄時,執行了gedit 、xmms以及msn等,當然還有輸入法fcitx ;這樣說來就有點簡單了,一個beinan用戶,為了完成工作,執行了幾個任務;當然beinan這個用戶,其它的人還能以遠程登錄過來,也能做其它的工作。
?
2、Linux 的多用戶、多任務;
有時可能是很多用戶同時用同一個系統,但并不所有的用戶都一定都要做同一件事,所以這就有多用戶多任務之說;
舉個例子,比如LinuxSir.Org 服務器,上面有FTP 用戶、系統管理員、web 用戶、常規普通用戶等,在同一時刻,可能有的弟兄正在訪問論壇;有的可能在上傳軟件包管理子站,比如luma 或Yuking 兄在管理他們的主頁系統和FTP ;在與此同時,可能還會有系統管理員在維護系統;瀏覽主頁的用的是nobody 用戶,大家都用同一個,而上傳軟件包用的是FTP用戶;管理員的對系統的維護或查看,可能用的是普通帳號或超級權限root帳號;不同用戶所具有的權限也不同,要完成不同的任務得需要不同的用戶,也可以說不同的用戶,可能完成的工作也不一樣;
值得注意的是:多用戶多任務并不是大家同時擠到一接在一臺機器的的鍵盤和顯示器前來操作機器,多用戶可能通過遠程登錄來進行,比如對服務器的遠程控制,只要有用戶權限任何人都是可以上去操作或訪問的;
?
3、用戶的角色區分;
用戶在系統中是分角色的,在Linux 系統中,由于角色不同,權限和所完成的任務也不同;值得注意的是用戶的角色是通過UID和識別的,特別是UID;在系統管理中,系統管理員一定要堅守UID 唯一的特性;
root 用戶:系統唯一,是真實的,可以登錄系統,可以操作系統任何文件和命令,擁有最高權限;
虛擬用戶:這類用戶也被稱之為偽用戶或假用戶,與真實用戶區分開來,這類用戶不具有登錄系統的能力,但卻是系統運行不可缺少的用戶,比如bin、daemon、adm、ftp、mail等;這類用戶都系統自身擁有的,而非后來添加的,當然我們也可以添加虛擬用戶;
普通真實用戶:這類用戶能登錄系統,但只能操作自己家目錄的內容;權限有限;這類用戶都是系統管理員自行添加的;
?
4、多用戶操作系統的安全;
多用戶系統從事實來說對系統管理更為方便。從安全角度來說,多用戶管理的系統更為安全,比如beinan用戶下的某個文件不想讓其它用戶看到,只是設置一下文件的權限,只有beinan一個用戶可讀可寫可編輯就行了,這樣一來只有beinan一個用戶可以對其私有文件進行操作,Linux 在多用戶下表現最佳,Linux能很好的保護每個用戶的安全,但我們也得學會Linux 才是,再安全的系統,如果沒有安全意識的管理員或管理技術,這樣的系統也不是安全的。
從服務器角度來說,多用戶的下的系統安全性也是最為重要的,我們常用的Windows 操作系統,它在系紡權限管理的能力只能說是一般般,根本沒有沒有辦法和Linux或Unix 類系統相比;
?
?
?
用戶(user)和用戶組(group)概念
?
1、用戶(user)的概念
? ? ? ? ? ? ? 通過前面對Linux 多用戶的理解,我們明白Linux 是真正意義上的多用戶操作系統,所以我們能在Linux系統中建若干用戶(user)。比如我們的同事想用我的計算機,但我不想讓他用我的用戶名登錄,因為我的用戶名下有不想讓別人看到的資料和信息(也就是隱私內容)這時我就可以給他建一個新的用戶名,讓他用我所開的用戶名去折騰,這從計算機安全角度來說是符合操作規則的;
? ? ? ? ?當然用戶(user)的概念理解還不僅僅于此,在Linux系統中還有一些用戶是用來完成特定任務的,比如nobody和ftp 等,我們訪問LinuxSir.Org 的網頁程序,就是nobody用戶;我們匿名訪問ftp 時,會用到用戶ftp或nobody ;如果您想了解Linux系統的一些帳號,請查看 /etc/passwd ;
?
2、用戶組(group)的概念
? ? ? ? 用戶組(group)就是具有相同特征的用戶(user)的集合體;比如有時我們要讓多個用戶具有相同的權限,比如查看、修改某一文件或執行某個命令,這時我們需要用戶組,我們把用戶都定義到同一用戶組,我們通過修改文件或目錄的權限,讓用戶組具有一定的操作權限,這樣用戶組下的用戶對該文件或目錄都具有相同的權限,這是我們通過定義組和修改文件的權限來實現的;
? ? ? ? 舉例:我們為了讓一些用戶有權限查看某一文檔,比如是一個時間表,而編寫時間表的人要具有讀寫執行的權限,我們想讓一些用戶知道這個時間表的內容,而不讓他們修改,所以我們可以把這些用戶都劃到一個組,然后來修改這個文件的權限,讓用戶組可讀,這樣用戶組下面的每個用戶都是可讀的;
?
用戶和用戶組的對應關系是:一對一、多對一、一對多或多對多;
一對一:某個用戶可以是某個組的唯一成員;
多對一:多個用戶可以是某個唯一的組的成員,不歸屬其它用戶組;比如beinan和linuxsir兩個用戶只歸屬于beinan用戶組;
一對多:某個用戶可以是多個用戶組的成員;比如beinan可以是root組成員,也可以是linuxsir用戶組成員,還可以是adm用戶組成員;
多對多:多個用戶對應多個用戶組,并且幾個用戶可以是歸屬相同的組;其實多對多的關系是前面三條的擴展;理解了上面的三條,這條也能理解;
?
實際用戶 和 有效用戶 區別
Unix系統通過進程的有效用戶ID和有效用戶組ID來決定進程對系統資源的訪問權限。
Unix高級編程第八章提到實際用戶和有效用戶,那么這兩個用戶到底是什么,它們之間有什么區別呢?
- 實際用戶ID(實際組ID):標識當前用戶(所屬組)是誰,當用戶登陸時取自口令文件。即標識我是誰。也就是登錄用戶的uid和gid。比如我的Linux以king用戶登錄,在Linux運行的所有的命令的實際用戶ID都是king的uid,實際用戶組ID都是king的gid(可以用id命令查看)
- 有效用戶ID(有效組ID):用來決定我們(當前進程)對資源的訪問權限或者對文件的訪問權(即實際該進程是以那個用戶運行的)
一般情況下,有效用戶ID等于實際用戶ID,有效用戶組ID等于實際用戶組ID。當設置-用戶-ID(SUID)位設置,則有效用戶ID等于文件的所有者的uid,而不是實際用戶ID;同樣,如果設置了設置-用戶組-ID(SGID)位,則有效用戶組ID等于文件所有者的gid,而不是實際用戶組ID。
一個測試驗證程序
這個程序非常簡單沒有什么好說的。我們編譯這個程序生成test 程序
通過id命令看到當前登錄用戶為root,uid=0,gid=0。通過ls命令我們可以看出test程序沒有設置SUID和SGID,所有者是root,所有組也是root。執行test我們發現有效用戶ID等于實際用戶ID(0),有效用戶組ID等于實際用戶組ID(0)。
你可能注意到test的所有者root,組也是root,和實際用戶,實際用戶組是一樣的。下一步我們修改一下test所有者和組,再看結果。
發現結果和上面一樣,test進程的有效用戶ID等于實際用戶ID(0),有效用戶組ID等于實際用戶組ID(0)。
下面我們給test程序設置SUID
發現設置test程序的SUID位之后,test進程的有效用戶ID等于文件所有者的UID(gkh的uid為500),有效用戶組ID還是等于實際用戶組ID(0)。這樣程序就可以訪問只有gkh才能訪問的資源了
?
linux 特殊權限 SUID、SGID、SBIT
參考:http://www.cnblogs.com/javaee6/p/4026108.html
先看看下面兩個的權限是什么
非常奇怪,/tmp目錄和 passwd文件的權限怎么怪怪的,怎么有s和t權限呢。看了下面的內容你就明白了?
?
SUID
當s出現在文件擁有者的x權限上時,如我們上面看到的/usr/bin/passwd這個文件的權限時-rwsr-xr-x,此時就被稱為SET UID簡稱SUID.SUID對于一個文件有什么限制和功能呢?
- 1.SUID權限僅對二進制可執行文件有效
2. 執行者對于該文件具有x的權限
3. 本權限僅在執行該文件的過程中有效
4. 執行者將具有該文件擁有者的權限
例如普通用戶用passwd修改自己的命令,實際上最終更改的是/etc/passwd文件. 此文件時用戶管理配置文件,只有root權限才能更改
既然是root用戶才擁有此權限,為什么我們可以通過passwd命令來修改密碼呢,那這就要歸功于passwd設置了suid權限位了
此時普通用戶通過執行passwd命令,臨時擁有root權限,間接的修改/etc/passwd,以達到修改自己密碼的權限
?
SGID
當s出現在目錄或文件所屬群的x權限上時,此時就稱為SET GID簡稱SGID,那SGID對文件和目錄分部有哪些功能呢?
SGID對目錄
- 1. 使用者若對于此目錄具有 r 與 x 的權限時,該使用者能夠進入此目錄
2. 使用者在此目錄下的群組將會變成該目錄的群組
3. 若使用者在此目錄下具有 w 的權限(可以新建文件),則使用者所創建的新文件,該新文件的群組與此目錄的群組相同
SGID對文件
- 1. SGID 對二進制可執行文件有效
2. 程式執行者對于該文件來說,需具備 x 的權限
3. 執行者在執行的過程中將會獲得該文件群組的支援(用于改文件群組的權限)
?
SBIT
當s出現在目錄其他用戶的x權限上時,此時就稱為Sticky Bit簡稱SBIT,那SBIT有哪些限制和作用呢?
- 1. 僅對目錄有效,對文件無效
2. 當使用者在該目錄下建立文件或目錄時(有權限的情況下),僅自己與 root 才有權力刪除新建的目錄或文件
我們知道/tmp目錄是這樣的權限。
現在我們來驗證下,先用root賬號在tmp文件中創建一個文件test,然后用openstack(其他賬號)進入該目錄,刪除test文件,看看發生什么情況
我們看到這樣是不能刪除文件的。因為/temp目錄有SBIT權限
?
怎么操作 SUID、SBID、SBIT ?
操作這些標志與操作文件權限的命令是一樣的, 都是 chmod. 有兩種方法來操作,
(1)符號類型改變權限(文字法:SUID: u+s ,SGID: g+s,SBIT: o+t )
- 1. chmod u+s testbin-- 為testbin文件加上setuid標志.
2. chmod g+s testdir-- 為testdir目錄加上setgid標志
3. chmod o+t testdir-- 為testdir目錄加上sticky標志
(2) 數字類型改變檔案權限(數字法:將原來的三位數擴展為四位數即可,SUID為4,SGID為2,SBIT為1,把它們放在權限數字的最開頭。例如設置SUID,可以寫成4777,設置SGID可以寫成,2777)
采用八進制方式. 對一般文件通過三組八進制數字來置標志, 如 666, 777, 644等. 如果設置這些特殊標志, 則在這三組數字之外再加一組八進制數字. 如 4666, 2777等. 這一組八進制數字三位的意義如下,
- 1. setuid位, 如果該位為1, 則表示設置setuid 4---
2. setgid位, 如果該位為1, 則表示設置setgid 2---
3. sticky位, 如果該位為1, 則表示設置sticky 1---
設置完這些標志后, 可以用 ls -l 來查看. 如果有這些標志, 則會在原來的執行標志位置上顯示. 如
- rwsrw-r-- 表示有setuid標志
rwxrwsrw- 表示有setgid標志
rwxrw-rwt 表示有sticky標志
?
?
?
管理用戶(user)和用戶組(group)相關命令
?
1. 管理用戶(user)的工具或命令;
useradd 注:添加用戶 adduser 注:添加用戶 兩個用戶創建命令之間的區別 adduser: 會自動為創建的用戶指定主目錄、系統shell版本,會在創建時輸入用戶密碼。(一般使用 adduser) useradd: 需要使用參數選項指定上述基本設置,如果不使用任何參數,則創建的用戶無密碼、無主目錄、沒有指定shell版本。需要單獨設置用戶密碼、指定家目錄、指定shell等usermod 注:修改已經存在用戶的信息 userdel 注:刪除用戶 passwd 注:為用戶設置密碼 chage 注:更改用戶密碼過期信息 chfn 注:改變用戶備注信息 chsh 注:更改登錄 shell usermod 注:修改用戶命令,可以通過usermod 來修改登錄名、用戶的家目錄等等。即更改passwd和shadow文件中用戶的相關屬性 pwcov 注:同步用戶從/etc/passwd 到/etc/shadow pwck 注:pwck是校驗用戶配置文件/etc/passwd 和/etc/shadow 文件內容是否合法或完整; pwunconv 注:是pwcov 的立逆向操作,是從/etc/shadow和 /etc/passwd 創建/etc/passwd ,然后會刪除 /etc/shadow 文件; finger 注:查看用戶信息工具 id 注:查看用戶的UID、GID及所歸屬的用戶組 chfn 注:更改用戶信息工具 su 注:用戶切換工具(su 和 su - 這兩個切換用戶是有區別的。)su 命令 和 su - 命令最大的本質區別就是:前者只是切換了root身份,但Shell環境仍然是普通用戶的Shell;而后者連用戶和Shell環境一起切換成root身份了。只有切換了Shell環境才不會出現PATH環境變量錯誤。su切換成root用戶以后。pwd一下,發現工作目錄仍然是普通用戶的工作目錄;而用su -命令切換以后,工作目錄變成root的工作目錄了。用echo $PATH命令看一下su 和su - 以后的環境變量有何不同。要從當前用戶切換到其它用戶,推薦使用su - 命令,這樣連shell環境也切換了。 sudo 注:sudo 是通過另一個用戶來執行命令(execute a command as another user)。su 是用來切換用戶,然后通過切換到的用戶來完成相應的任務,但是 sudo 能后面直接執行命令,比如 sudo 不需要root 密碼就可以執行只有root用戶才能執行的命令;但是的通過visudo 來編輯/etc/sudoers來實現; visudo 注:visodo 是編輯 /etc/sudoers 的命令;也可以不用這個命令,直接用vi 來編輯 /etc/sudoers 的效果是一樣的; sudoedit 注:和sudo 功能差不多;?
2. 管理用戶組(group)的工具或命令;
groupadd 注:添加用戶組; groupdel 注:刪除用戶組; groupmod 注:修改用戶組信息 newgrp 注:切換到一個新組 gpasswd 注:管理組和組密碼的命令。man gpasswd groups 注:顯示用戶所屬的用戶組 grpck grpconv 注:通過/etc/group和/etc/gshadow 的文件內容來同步或創建/etc/gshadow ,如果/etc/gshadow 不存在則創建; grpunconv 注:通過/etc/group 和/etc/gshadow 文件內容來同步或創建/etc/group ,然后刪除gshadow文件;3. /etc/skel 目錄;
/etc/skel目錄一般是存放用戶啟動文件的目錄,這個目錄是由root權限控制,當我們添加用戶時,這個目錄下的文件自動復制到新添加的用戶的家目錄下;/etc/skel 目錄下的文件都是隱藏文件,也就是類似.file格式的;我們可通過修改、添加、刪除/etc/skel目錄下的文件,來為用戶提供一個統一、標準的、默認的用戶環境;
/etc/skel 目錄下的文件,一般是我們用useradd 和adduser 命令添加用戶(user)時,系統自動復制到新添加用戶(user)的家目錄下;如果我們通過修改 /etc/passwd 來添加用戶時,我們可以自己創建用戶的家目錄,然后把/etc/skel 下的文件復制到用戶的家目錄下,然后要用chown 來改變新用戶家目錄的屬主;
4. /etc/login.defs 配置文件;
/etc/login.defs 文件是當創建用戶時的一些規劃,比如創建用戶時,是否需要家目錄,UID和GID的范圍;用戶的期限等等,這個文件是可以通過root來定義的;
比如Fedora 的 /etc/logins.defs 文件內容;
# *REQUIRED* # Directory where mailboxes reside, _or_ name of file, relative to the # home directory. If you _do_ define both, MAIL_DIR takes precedence. # QMAIL_DIR is for Qmail # #QMAIL_DIR Maildir MAIL_DIR /var/spool/mail 注:創建用戶時,要在目錄/var/spool/mail中創建一個用戶mail文件; #MAIL_FILE .mail# Password aging controls: # # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. # PASS_MAX_DAYS 99999 注:用戶的密碼不過期最多的天數; PASS_MIN_DAYS 0 注:密碼修改之間最小的天數; PASS_MIN_LEN 5 注:密碼最小長度; PASS_WARN_AGE 7 注:# # Min/max values for automatic uid selection in useradd # UID_MIN 500 注:最小UID為500 ,也就是說添加用戶時,UID 是從500開始的; UID_MAX 60000 注:最大UID為60000;# # Min/max values for automatic gid selection in groupadd # GID_MIN 500 注:GID 是從500開始; GID_MAX 60000# # If defined, this command is run when removing a user. # It should remove any at/cron/print jobs etc. owned by # the user to be removed (passed as the first argument). # #USERDEL_CMD /usr/sbin/userdel_local# # If useradd should create home directories for users by default # On RH systems, we do. This option is ORed with the -m flag on # useradd command line. # CREATE_HOME yes 注:是否創用戶家目錄,要求創建;5. /etc/default/useradd 文件;
通過useradd 添加用戶時的規則文件;
# useradd defaults file GROUP=100 HOME=/home 注:把用戶的家目錄建在/home中; INACTIVE=-1 注:是否啟用帳號過期停權,-1表示不啟用; EXPIRE= 注:帳號終止日期,不設置表示不啟用; SHELL=/bin/bash 注:所用SHELL的類型; SKEL=/etc/skel 注: 默認添加用戶的目錄默認文件存放位置;也就是說,當我們用adduser添加用戶時,用戶家目錄下的文件,都是從這個目錄中復制過去的;?
?
?
用戶管理
?
在linux中為了保障系統用戶的安全信息,所以將用戶帳號,用戶密碼,用戶組信息和用戶組密碼分開存放在不同的配置文件中的。
把這四個文件弄清楚,添加、刪除用戶和用戶組可以通過修改這4個文件來完成。
?
用戶分類
linux用戶有三類:根用戶(root用戶,命令提示符介面顯示#)、普通用戶 (命令提示符顯介面示#)、虛擬用戶。
?
用戶名文件 /etc/passwd 文件結構
以上/etc/passwd文件的屬性分解如下,共七個屬性(每個屬性用分號分割)
( /etc/passwd 每行7個字段 “ 賬號:密碼:UID:GID:賬號信息說明:家目錄:Shell ”?)
示例 smbuser:x:500:500::/home/smbuser:/bin/bash 對應字段解釋 用戶名: 加密口令: UID: 用戶所屬組的GID: 個人信息描述: 用戶主目錄: 登陸shell1.用戶名 :由字母、數字組成。必須以字母開頭,區分大小寫,長度不超過8個字符 2.加密口令:在早期的UNIX版本中,用戶和密碼放在一起的,用戶名在第一個選項位,密碼在第二個選項位,后來出于賬戶安全的考慮,對此進行了改進,將密碼另外存放,并用一個特殊字符X占用第二個密碼選項位。因為passwd文件對所有用戶都是可讀的,所以為了安全起見,系統將加密口令存放于/etc/shadow文件中且只有超級用戶才有讀取權限。 3.用戶UID: 系統中用來標識用戶的數字(root:UID為0 ,普通用戶UID為500-60000之間)管理員:0。其中0表示系統管理員ROOT賬戶。 一般用戶1-65535(一般用戶又分系統用戶和普通用戶)系統用戶:1-499(系統默認創建)。 1-499用于系統內置賬戶,如nobody,bin等普通用戶:500-65535(由管理員創建)。500-65535普通系統本地賬戶,系統安裝完成后,由ROOT用戶創建分配給有需要接入Linux主機的使用者使用。如果因為需要,可以將普通系統本地賬戶的UID改為0,就樣該用戶就有了ROOT用戶一樣的權限了,但不建議這樣設置。 4.用戶所屬組GID:默認剛創建,主GID和用戶UID相同,是主用戶組,可以更改(一般組分為主用戶組和附加組)用戶組的GID,用戶組名保存在/etc/group文件中,有時為了便于權限的分配,可以將多個用戶加入到同一個用戶組中,對用戶組分配相應權限,這樣該用戶組中的所有用戶都同時獲得了相同的權限,可以簡化對每一個用戶來分配權限。將用戶加入其它用戶組中的操作可以在/etc/group文件中的用戶組名后批量添加相應的用戶名稱便可,不需要在此進行修改。 5.用戶的全名信息,或描述等內容 6.用戶主目錄: 創建普通系統帳戶時會默認創建一個和用戶名相同的帳戶,用戶登陸后默認所處的目錄一般為~([root@centso-test ~]) 7.用戶登陸后使用的shell,其中/sbin/nologin為限制用戶登陸系統用戶登陸后啟動以接收并解析執行用戶輸入命令的程序,如./bin/bash /bin/csh. 虛擬用戶一般該屬性為空或者是 /sbin/nologin /bin/fase 表示禁止用戶登陸?
用戶密碼文件 /etc/shadow 文件結構(以:作為分隔符,一共有九欄)
[root@serverln tmp]# cat /etc/shadow root:$6$hgwagXkBWGArriiQ$sajFOnZmrW2x0S6dipxvXXAJNfB1/BC0OvzjqeGZqQBVbng3aD9/CeD2j3YOnd6g2NJfPnk7zI1.9xqQ5aO6d0:16381:0:99999:7::: bin:*:15980:0:99999:7::: jacob:!!:16382:0:99999:7::: 帳號名稱:密碼:最近更改密碼日期:密碼不可被更改日期:密碼需重設定日期:密碼到期警告天數:密碼過期后能使用的天數:帳號失效的日期:保留1 用戶名 2 經過加密碼后的密碼信息。這個才是該賬號的真正的密碼,不過這個密碼已經加密過了,但是有些黑客還是能夠解密的。所以為了安全,該文件屬性設置為600,只允許root讀寫。 3 最近改動密碼的日期,該日期參數是以1970年1月1日作為第1天而累加計算出的 4 密碼不可改動的天數,由選項3中的日期為第1天,如果該選項參數為0,表示隨時可以更改 5 密碼需要改動的天數,即強制用戶每多少天修改密碼,密碼過期后需要更新密碼后才可以登陸 6 密碼快要到期的前多少天提示警告信息 7 密碼到期后可以寬限的天數,密碼過期后,在此時間內通過更改密碼后,并登陸來重新激活賬號 8 賬號失效日期,在一些收費使用系統的應用中,可以設置此選項內容. 9 預留選項,未使用?
用戶管理
?
添加用戶 useradd?命令
root@kali:~# useradd -h
選項:-b, --base-dir BASE_DIR 設置基本路徑作為用戶的登錄目錄 -c, --comment COMMENT 對用戶的注釋 -d, --home-dir HOME_DIR 設置用戶的登錄目錄 -D, --defaults 改變設置 -e, --expiredate EXPIRE_DATE 新賬戶的過期日期。設置用戶的有效期 -f, --inactive INACTIVE 用戶過期后,讓密碼無效 -g, --gid GROUP 使用戶 “只屬于某個組 ” (只能屬于一個組)-G, --groups GROUPS 新賬戶的附加組列表。使用戶加入某個組(可以屬于多個組) -h, --help 幫助-k, --skel SKEL_DIR 使用此目錄作為骨架目錄-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默認值-l, --no-log-init 不把用戶加入到lastlog文件中 -m, --create-home 自動創建登錄目錄 -M, --no-create-home 不自動創建登錄目錄 -N, --no-user-group 不創建同名的組-o, --non-unique 允許使用重復的 UID 創建用戶-p, --password PASSWORD 為新用戶使用加密密碼 -r, --system 創建一個系統賬戶-R, --root CHROOT_DIR chroot 到的目錄-s, --shell SHELL 登錄時候的shell -u, --uid UID 為新用戶指定一個UID -U, --user-group 創建與用戶同名的組-Z, --selinux-user SEUSER 為 SELinux 用戶映射使用指定 SEUSER在創建用戶時,需要為新建用戶指定一用戶組,如果不指定其用戶所屬的工作組,自動生成一個同名同ID(UID=GID)的用戶組,即與用戶名同名的工作組。
useradd -g users user1 // 創建用戶 user1 的時候指定其所屬工作組 usersuseradd test // 增加用戶test,有一點要注意的,useradd增加一個用戶后,不要忘了給他設置密碼,不然不能登錄的。 passwd test // 設置用戶test 的密碼 useradd -g test phpq //新建phpq用戶并讓用戶 “只屬于test工作組”。 注::-g 所屬組 -d 家目錄 -s 所用的SHELLuseradd 用戶名 //創建一個新用戶 useradd -G 用戶組 用戶名 //新建一個用戶,同時添加到附加組中 useradd -u 600 liuyalei //創建一個用戶liuyalei,指定uid為600 useradd -M /sbin/nologin liuyalei //創建liuyalei用戶,不創建家目錄,不允許登錄 useradd -e //帳號中指日期,日期的指定格式為MM/DD/YY useradd -g //grop名稱或以數字來作為用戶登入起始用戶組。 //用戶組名需為系統現有存在的名稱。用戶組數字也需為現有存在的用戶組,預設的用戶組數字為1 useradd -G //定義此用戶為多個不同groups的成員。每個用戶組使用逗號隔開。用戶組名同-g的限制。默認值為用戶起始用戶組添加用戶和組
使用 useradd test123 命令給linux系統添加一個新的用戶。 使用 passwd test123 命令給用戶“test123”添加密碼。輸入兩次一樣的密碼即可完成創建。 使用 groupadd groupTest 命令創建用戶組。 使用 usermod -G groupTest test123 將已有的用戶添加到已有的組中。 使用 cat /etc/group |grep group 命令查看是否將剛才的用戶添加到組中。 使用 useradd -g test king 命令將新建的“king”用戶添加到已有的“test”組?
示例: [root@serverln user_test]# useradd -c administrator -d /home/admin -e 2014-12-12 -g root -G,bin,mail創建admin帳戶 用戶信息,指定用戶信息為administrator,家目錄為/home/admin,失效日期為2014年12月12日,指定默認組為root,附加組為bin,mail?
設置帳號屬性 usermod (user modify) 命令
對于已創建好的用戶,可使用usermod命令來修改和設置賬戶的各項屬性,包括登錄名,主目錄,用戶組,登錄shell等,
命令用法:usermod [option] username
更多參數看幫助文檔:man usermod ? ? 或者 ? ?usermod -h
(1)改變用戶帳戶名
使用-l參數來實現,命令用法為:usermod -l 新用戶名 原用戶名例如,若要將用戶lijie更名為lijunjie,則操作命令為:[root@localhost ~]# usermod -l lijunjie lijie [root@localhost ~]# tail -1 /etc/passwd lijunjie:x:502:502::/home/lijie:/bin/bash從輸出結果可見,用戶名已更改為lijunjie。主目錄仍為原來的/home/lijie,若也要更改為/home/lijunjie,則可通過執行以下命令來實現[root@localhost ~]# usermod -d /home/lijunjie lijunjie [root@localhost ~]# tail -1 /etc/passwd lijunjie:x:502:502::/home/lijunjie:/bin/bash [root@localhost ~]# mv /home/lijie /home/lijunjie(2)鎖定賬戶
若要臨時禁止用戶登錄,可將該用戶賬戶鎖定。鎖定賬戶可利用-L參數來實現,命令用法為:usermod -L 要鎖定的賬戶
linux鎖定用戶,是通過在密碼文件shadow的密碼字段前加“!”來標識該用戶被鎖定。
(3)解鎖賬戶
要解鎖賬戶,可以使用帶-U參數的usermod命令來實現
?
?
修改用戶加入單個組和多個組
********************注意和創建用戶的 useradd 命令 -G 參數的區別********************************* usermod -d /home/test -G test2 test //將test用戶的登錄目錄改成/home/test,并加入test2組,注意這里是大G。 注意:將一個用戶添加到用戶組中,千萬不能直接用: usermod -G groupA userName 這樣做會使你離開其他用戶組,僅僅做為 這個用戶組 groupA 的成員。 usermod -g 組名 用戶名 // 是修改用戶所在組,其它組都給刪除了。usermod -G 添加多個組要用","號隔開而且一次性添加,分開添加只能添加最后的那個組。 # usermod -G groupA,groupB,groupC user如果真要使用 -G 選項追加組,應該加上 -a 選項(-a 代表 append, 也就是 將自己添加到 用戶組groupA 中,而不必離開 其他用戶組。 ): usermod -a -G groupA user // 示例: usermod -a G dba grid # Linux把用戶加入某個組(不退出當前所屬組 同時屬于多個組) usermod?-a -G groupname username#查看某用戶所屬組 groups?usernamegpasswd -a test test2 //將用戶test加入到test2組
gpasswd -d test test2 //將用戶test從test2組中移出
?
刪除用戶 userdel
更多選項參看:man userdel ?或者 ?userdel -h
userdel 用戶名 //刪除用戶 示例:userdel test //將test用戶刪除 userdel -r liuyalei //連同家目錄刪掉生產環境中,我們可以通過注視配置文件/etc/passwd,選擇先注銷而不刪除用戶,類似回收站的作用,即使出了問題也能恢復。
?
將文件夾賦給相應用戶以及所在組
給oinstall組中的oracle相應的擁有者權限 [root@gl oracle]# chown -R oracle:oinstall /data/encryption/ 然后指定相應的用戶或組的相應權限 [root@gl oracle]# chmod -R 775 /data/encryption/?
查看用戶
a),查看當前登錄用戶[root@krlcgcms01 ~]# w[root@krlcgcms01 ~]# who b),查看自己的用戶名[root@krlcgcms01 ~]# whoami c),查看單個用戶信息[root@krlcgcms01 ~]# finger apacheuser[root@krlcgcms01 ~]# id apacheuser d),查看用戶登錄記錄[root@krlcgcms01 ~]# last 查看登錄成功的用戶記錄[root@krlcgcms01 ~]# lastb 查看登錄不成功的用戶記錄 e),查看所有用戶[root@krlcgcms01 ~]# cut -d : -f 1 /etc/passwd[root@krlcgcms01 ~]# cat /etc/passwd |awk -F \: '{print $1}'?
查看某個用戶所屬的組
命令:groups 用戶名
例如:[root@xxx~]# groups root
root : root bin daemon sys adm disk wheel
用戶root屬于root bin daemon sys adm disk wheel這7個group?
?
查看系統中所有組
命令:more /etc/group?
?
用戶口令(密碼)管理
用戶管理的一項重要內容是用戶口令(密碼)的管理。用戶賬號剛創建時沒有口令,但是被系統鎖定,無法使用,必須為其指定口令后才可以使用,即使是指定空口令。
指定和修改用戶口令的Shell命令是:passwd [用戶名]。超級用戶可以為自己和其他用戶指定口令,普通用戶只能用它修改自己的口令。
命令的格式為:passwd 選項 用戶名
可使用的選項:
示例
例如,假設當前用戶是sam,則下面的命令修改該用戶自己的口令: $ passwd Old password:****** New password:******* Re-enter new password:*******如果是超級用戶,可以用下列形式指定任何用戶的口令: # passwd sam New password:******* Re-enter new password:*******普通用戶修改自己的口令時,passwd命令會先詢問原口令,驗證后再要求用戶輸入兩遍新口令,如果兩次輸入的口令一致,則將這個口令指定給用戶;而超級用戶為用戶指定口令時,就不需要知道原口令。為用戶指定空口令時,執行下列形式的命令: # passwd -d sam 此命令將用戶sam的口令刪除,這樣用戶sam下一次登錄時,系統就不再詢問口令。passwd命令還可以用-l(lock)選項鎖定某一用戶,使其不能登錄,例如: # passwd -l sam?
鎖定/解鎖賬戶密碼
在linux中,除了用戶賬戶可被鎖定外,賬戶密碼也可被鎖定,任何一方被鎖定后,都將無法登錄系統。
只有root用戶才有權執行該命令,鎖定賬戶密碼使用帶-l參數的passwd命令,其用法為:
passwd -l 帳戶名
passwd -u 帳戶名 #解鎖賬戶密碼
查詢密碼狀態
要查詢當前賬戶的密碼是否被鎖定,可以使用帶-S參數的passwd命令來實現,其用法為:
passwd -S 賬戶名
例如
[root@localhost etc]# passwd -S lijunjie
lijunjie LK 2011-03-25 0 99999 7 -1 (密碼已被鎖定。)
[root@localhost etc]# passwd -u lijunjie ? ? ?//?解鎖用戶 lijunjie 的密碼 。
[root@localhost etc]# passwd -S lijunjie
lijunjie PS 2011-03-25 0 99999 7 -1 (密碼已設置,使用 SHA512 加密。)
刪除賬戶密碼
如要刪除賬戶的密碼,使用帶-d參數的passwd命令來實現,該命令也只有root用戶才有權執行,其用法為:
passwd -d 帳戶名
帳戶密碼被刪除后,將不能登錄系統,除非重新設置密碼。
?
?
用戶組管理
?
涉及命令:gpasswd (管理組)、groupadd(添加組)、groupmod (修改組) 、groupdel(刪除組) ? ?
LINUX下把一個用戶加入多個組 ,實現方法:# gpasswd -a 用戶 組 ? ? ?// 示例:gpasswd -a user group ?// 將 user 用戶加入到?group 組中
如果查看/etc/shadow 或/etc/passwd等文件看不出來用戶已經加入想要的組時,此時可以用 id 命令 來查看
用戶ruan隸屬于ruan組,id為500,現在想要同時加入組ruanrongjian中 [root@diandianrong ~]# gpasswd -a rong ruanrongjian Adding user rong to group ruanrongjian 先切換到ruan用戶,然后用ID查看 [root@diandianrong ~]# su ruan [ruan@diandianrong root]$ id uid=500(ruan) gid=500(ruan) groups=500(ruan),501(ruanrongjian) context=user_u:system_r:unconfined_t 當然直接用id ruan 也是可以的[ruan@diandianrong root]$ id ruan uid=500(ruan) gid=500(ruan) groups=500(ruan),501(ruanrongjian) 此時group加有兩個,組ruan是在用戶被創建時自發產生的,ruanrongjian則是后面手動添加進去的。另一種實現方法:
[root@diandianrong ~]# usermod -a -G rong ruanrongjian // 必須加上 -a 選項才是追加組,否則是清除原來的組,只加入組 [root@diandianrong ~]# id rong uid=502(rong) gid=502(rong) groups=502(rong),501(ruanrongjian)?
用戶組文件 /etc/group
?
/etc/group 共4個字段 ? ?群組名:群組密碼:GID:群組支持的群組名稱(即可以加入多個群組)
[root@localhost ~]# cat /etc/group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon ……用戶組的選項內容只有四個,其選項意義如下:
?
用戶組密碼文件 /etc/gshadow
?
組密碼文件示例:
[root@localhost etc]# cat gshadow root:::root bin:::root,bin,daemon daemon:::root,bin,daemon …… cisco:!:: huawei:!:: named:!::用戶組密碼文件中的內容和用戶組名文件中的內容幾乎一樣,因為一般很少用到需要對用戶組設置密碼等的操作
?
用戶組的管理操作
?
添加、刪除用戶和組
groupadd 命令
root@kali:~# groupadd -h 用法:groupadd [選項] 組選項:-f, --force 如果組已經存在則成功退出并且如果 GID 已經存在則取消 -g-g, --gid GID 為新組使用 GID-h, --help 顯示此幫助信息并推出-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默認值-o, --non-unique 允許創建有重復 GID 的組-p, --password PASSWORD 為新組使用此加密過的密碼-r, --system 創建一個系統賬戶-R, --root CHROOT_DIR chroot 到的目錄可以使用的選項有:
? ? -g GID 指定新用戶組的組標識號(GID)。
? ? -o 一般與 -g 選項同時使用,表示新用戶組的GID可以與系統已有用戶組的GID相同。?
例如:
# groupadd group1 此命令向系統中增加了一個新組group1,新組的組標識號是在當前已有的最大組標識號的基礎上加1。 #groupadd -g 101 group2 此命令向系統中增加了一個新組group2,同時指定新組的組標識號是101。
刪除用戶組
刪除用戶組使用 groupdel 命令來實現,命令用法:groupdel 用戶組 ? ? // 示例:groupdel liuyalei ?//刪除liuyalei組
在刪除用戶組時,被刪除的用戶組不能是某個賬戶的私有用戶組,否則將無法刪除,若要刪除,則應先刪除引用該私有用戶組的賬戶,然后再刪除用戶組。
[root@localhost ~]# groupdel teacher groupdel: cannot remove the primary group of user 'zhangjie' [root@localhost ~]# userdel -r zhangjie [root@localhost ~]# groupdel teacher [root@localhost ~]# grep teacher /etc/group #沒有輸出,說明teacher用戶組已經不存在,刪除成功一般直接通過usermod命令來更改用戶的相關屬性(包括用戶組屬性)
groupadd test //增加一個test組 groupmod -n test2 test //將test組的名子改成test2 groupdel test2 //刪除組 test2?
修改組?
命令:groupmod 選項 用戶組?
更多參數看幫助:man groupmod ? ?或者 ? ?groupmod -h
常用的選項有:
? ? -g GID 為用戶組指定新的組標識號。
? ? -o 與-g選項同時使用,用戶組的新GID可以與系統已有用戶組的GID相同。
? ? -n新用戶組 將用戶組的名字改為新名字
例如:
# groupmod -g 102 group2 //此命令將組group2的組標識號修改為102。 # groupmod –g 10000 -n group3 group2 //此命令將組group2的標識號改為10000,組名修改為group3。修改用戶組屬性
? 用戶組創建后,根據需要可對用戶組的相關屬性進行修改。對用戶組屬性的修改,主要是修改用戶組的名稱和用戶組的GID值。
(1)改變用戶組的名稱(重命名組名)
若要對用戶組進行重命名,可使用帶-n參數的groupmod命令來實現,其用法為:groupmod -n 新用戶組名 原用戶組名對于用戶組改名,不會改變其GID的值比如,若要將student用戶組更名為teacher用戶組,則操作命令為:[root@localhost ~]# tail -3 /etc/groupstudent:x:501:lijie:x:502:vodup:x:503:[root@localhost ~]# groupmod -n teacher student[root@localhost ~]# tail -3 /etc/grouplijie:x:502:vodup:x:503:teacher:x:501:(2)重設用戶組的GID
?
? 用戶組的GID值可以重新進行設置修改,但不能與已有用戶組的GID值重復。對GID進行修改,不會改變用戶名的名稱。
? 要修改用戶組的GID,可使用帶-g參數的groupmod命令,其用法為:groupmod -g new_GID 用戶組名稱
例如,若要將teacher組的GID更改為504,則操作命令為: [root@localhost ~]# tail -3 /etc/group lijie:x:502: vodup:x:503: teacher:x:501: [root@localhost ~]# groupmod -g 504 teacher [root@localhost ~]# tail -3 /etc/group lijie:x:502: vodup:x:503: teacher:x:504:?
添加用戶到指定的組/從指定的組中移除用戶
gpasswd命令是 Linux 下工作組文件/etc/group 和 /etc/gshadow 管理工具。主要功能:管理組。
?
root@kali:~# gpasswd -h 用法:gpasswd [選項] 組選項:-a, --add USER 向組 GROUP 中添加用戶 USER-d, --delete USER 從組 GROUP 中添加或刪除用戶-h, --help 顯示此幫助信息并推出-Q, --root CHROOT_DIR 要 chroot 進的目錄-r, --remove-password 移除組 GROUP 的密碼-R, --restrict 向其成員限制訪問組 GROUP-M, --members USER,... 設置組 GROUP 的成員列表-A, --administrators ADMIN,... 設置組的管理員列表 除非使用 -A 或 -M 選項,不能結合使用這些選項。可以將用戶添加到指定的組,使其成為該組的成員。其實現命令為:gpasswd -a 用戶賬戶 用戶組名
若要從用戶組中移除某用戶,其實現命令為:gpasswd -d 用戶賬戶 用戶組名
例如,現在將上面創建的lijunjie用戶添加到vodup用戶組中[root@localhost ~]# groups lijunjie lijunjie : lijie [root@localhost ~]# gpasswd -a lijunjie vodup #添加用戶到指定的用戶組 Adding user lijunjie to group vodup [root@localhost ~]# groups lijunjie lijunjie : lijie vodup [root@localhost ~]# gpasswd -d lijunjie vodup #從指定的用戶組中移除用戶 Removing user lijunjie from group vodup [root@localhost ~]# groups lijunjie #查看用戶所屬的組 lijunjie : lijie設置 用戶組管理員
添加用戶到組和從組中移除某用戶,除了 root 用戶可以執行該操作外,用戶組管理員也可以執行該操作。
將某用戶指派為某個用戶組的管理員命令:gpasswd -A 用戶賬戶 要管理的用戶組
命令功能:將指定的用戶設置為指定用戶組的用戶管理員。用戶管理員只能對授權的用戶組進行用戶管理(添加用戶到組或從組中刪除用戶),無權對其他用戶組進行管理。
示例
[root@localhost ~]# gpasswd -A lijunjie vodup [root@localhost ~]# useradd fen [lijunjie@localhost ~]# gpasswd -a fen vodup Adding user fen to group vodup [lijunjie@localhost ~]# groups fen fen : fen vodup [lijunjie@localhost ~]# gpasswd -d fen vodup Removing user fen from group vodup [lijunjie@localhost root]$ gpasswd -d fen fen #試圖將fen用戶從fen用戶組中移除 gpasswd: Permission denied. #操作被拒絕,說明無權對其他用戶組進行管理?
切換用戶所屬的組
?
如果一個用戶同時屬于多個用戶組,那么用戶可以在用戶組之間切換,以便具有其他用戶組的權限。
用戶可以在登錄后,使用命令newgrp切換到其他用戶組,這個命令的參數就是目的用戶組。
這條命令將當前用戶切換到root用戶組,前提條件是root用戶組確實是該用戶的主組或附加組。
?
查看組
a),查看當前登錄用戶所在的組 groups,查看apacheuser所在組groups apacheuser b),查看所有組 cat /etc/group c),有的linux系統沒有/etc/group文件的,這個時候看下面的這個方法 cat /etc/passwd |awk -F [:] '{print $4}' |sort|uniq | getent group |awk -F [:] '{print $1}' 這里用到一個命令是getent,可以通過組ID來查找組信息,如果這個命令沒有的話,那就很難查找,系統中所有的組了.?
?
查看用戶所屬的組使用命令: $ groups user 或者查看文件: $ cat /etc/group 查看一個用戶的UID和GID: $ id user 或者 cat /etc/passwd finger命令 ——可以查看用戶的主目錄、啟動shell、用戶名、地址、電話等信息 例:finger root?
文件或目錄權限的簡介
?
鳥哥?Linux 的文件權限與目錄配置:http://linux.vbird.org/linux_basic/0210filepermission.php
Linux中的特殊權限粘滯位(sticky bit)詳解:http://www.cnblogs.com/MrListening/p/5813281.html
?
在Linux系統中,對每個文件和目錄都有定義相應的屬主和屬組,以用來管理用戶對文件和目錄的訪問和操作
chown [用戶名][文件或目錄] 更改文件或目錄的所有者(用戶),即屬主
chgrp [用戶組名][文件或目錄] 更改文件或目錄所屬的用戶組,即屬組
也可以使用“chown 用戶名:用戶組名(用戶名.用戶組名) 文件或目錄”直接對文件或目錄的用戶和用戶組進行修改
chmod [ugoa][+-=][rwx] 文件或目錄名,更改用戶和用戶組對目錄或文件的訪問權限,
其簡化操作為 chmod 755 /home/user01/ = chmod u=rwx /home/user01|chmdo g=rw /home/user01|chmod o=rw /home/user01
?
?
【綜合案例】
【題1.1】建立兩個用戶組group1和group2,以及三個用戶dennis、daniel、abigale,并且將前2個用戶分配在group1用戶組下,后一個分配在group2用戶組下
?
【題1.2】以dennis用戶登錄,創建一個Hello.java文件
【題1.3】以daniel用戶登錄,觀察是否可以訪問/home/dennis目錄以及讀或寫其創建的Hello.java文件
【題1.4】以dennis用戶登錄,修改目錄/home/dennis及Hello.java文件的讀寫權限(更正:修改目錄權限的時候,應該使用770,而不是760,否則權限不足)
?
【題1.5】重復【題1.3】
【題1.6】改變abigale的用戶組由group2變為group1
?
然后,可以使用cat?/etc/passwd查看并確定
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Linux 用户 和 用户组 管理 (添加、删除、修改)及说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小甲鱼 OllyDbg 教程系列 (十六
- 下一篇: 辗转相除法--最大公约数/最大公倍数