一、用戶user
Linux用戶分爲管理員和普通用戶,普通用戶又分爲系統用戶和自定義用戶。可以查看/etc/passwd來查看。如下所示:(部分)
root:x:0:0:root:/root:/bin/bash pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin lilei:x:500:500::/home/lilei:/bin/bash wangcai:x:502:503::/home/wangcai:/bin/bash
1、系統管理員:即root帳戶,UID號爲0,擁有所有系統權限,它類似於Windows系統中的administrator帳戶,是整個系統的所有者。
2、系統用戶:linux爲滿足自身系統管理所內建的賬號,通常在安裝過程中自動創建,不能用於登錄操作系統。UID在1-499之間(centos7爲1-999之間)。像上面的sshd、pulse等等用戶即是此類用戶。它類似於Windows中的system帳戶,當然權限遠沒有system帳戶高。
3、自定義用戶:由root管理員創建供用戶登錄系統進行操作使用的賬號,UID在500以上(centos7爲1000以上)。它類似於Windows系統中users用戶組中的帳戶 。
而在該文件中,每一行用戶記錄的各個數據段用“:”分隔,分別定義了用戶的各方面屬性。各個字段的順序和含義如下:
我們以這個wangcai普通用戶爲例
wangcai:x:502:503::/home/wangcai:/bin/bash
註冊名:口令:用戶標識號(uid):組標識號(gid):註釋性描述:用戶主目錄:用戶登陸的shell類型
(1)註冊名(login_name):用於區分不同的用戶。在同一系統中註冊名是惟一的。在很多系統上,該字段被限制在8個字符的長度之內;並且要注意,通常在Linux系統中對字母大小寫是敏感的,登錄名中不能有冒號(:),因爲冒號在這裏是分隔符。爲了兼容起見,登錄名中最好不要包含點字符(.),並且不使用連字符(-)和加號(+)打頭。這與MSDOS/Windows是不一樣的。
(2)口令(passwd):一些系統中,存放着加密後的用戶口令字。雖然這個字段存放的只是用戶口令的加密串,不是明文,但是由於/etc/passwd文件對所有用戶都可讀,所以這仍是一個安全隱患。因此,現在許多Linux系統(如SVR4)都使用了shadow技術,把真正的加密後的用戶口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一個特殊的字符,例如“x”或者“*”。超級用戶root可以使用系統命令passwd來更改系統中所有用戶的口令,普通用戶也可以在登錄系統後使用passwd命令來更改自己的口令
(3)用戶標識號(UID):是一個整數,系統內部用它來標識用戶。一般情況下它與用戶名是一一對應的。如果幾個用戶名對應的用戶標識號是一樣的,系統內部將把它們視爲同一個用戶,但是它們可以有不同的口令、不同的主目錄以及不同的登錄Shell等。取值範圍是0-65535。0是超級用戶root的標識號,1-99由系統保留,作爲管理賬號,普通用戶的標識號從100開始。在Linux系統中,這個界限是500。
(4)組標識號(GID):這是當前用戶的工作組標識。具有相似屬性的多個用戶可以被分配到同一個組內,每個組都有自己的組名,且以自己的組標 識號相區分。像UID一樣,用戶的組標識號也存放在passwd文件中。在現代的Unix/Linux中,每個用戶可以同時屬於多個組。除了在 passwd文件中指定其歸屬的基本組之外,還在/etc/group文件中指明一個組所包含用戶。
(5)註釋性描述(users):字段記錄着用戶的一些個人情況,例如用戶的真實姓名、電話、地址等,這個字段並沒有什麼實際的用途。在不同的Linux系統中,這個字段的格式並沒有統一。在許多Linux系統中,這個字段存放的是一段任意的註釋性描述文字,用做finger命令的輸出。
(6)用戶主目錄(home_directory):也就是用戶的起始工作目錄,它是用戶在登錄到系統之後所處的目錄。在大多數系統中,各用戶的主目錄都被組織在同一個特定的目錄下,而用戶主目錄的名稱默認就是該用戶的登錄名。各用戶對自己的主目錄有讀、寫、執行(搜索)權限,其他用戶對此目錄的訪問權限則根據具體情況設置。
(7)登錄Shell(Shell):用戶登錄後,要啓動一個進程,負責將用戶的操作傳給內核,這個進程是用戶登錄到系統後運行的命令解釋器或某個特定的程序,即Shell。Shell是用戶與Linux系統之間的接口。Linux的Shell有許多種,每種都有不同的特點。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系統管理員可以根據系統情況和用戶習慣爲用戶指定某個Shell。如果不指定Shell,那麼系統使用sh爲默認的登錄Shell,即這個字段的值爲/bin/sh。而當用戶shell類型爲/sbin/nologin,則是該用戶無法登陸系統。
用戶的登錄Shell可以指定爲某個特定的程序(此程序不是一個命令解釋器)。利用這一特點,我們可以限制用戶只能運行指定的應用程序,在該應用程序運行結束後,用戶就自動退出了系統。有些Linux系統要求只有那些在系統中登記了的程序才能出現在這個字段中
二、組group
在linux中的每個用戶必須屬於一個組,不能獨立於組外。在linux中每個文件有所有者、所在組、其它組的概念。同樣用戶組的信息我們可以在/etc/group中查看。如下所示(部分)
root:x:0: bin:x:1:bin,daemon stapdev:x:158: tcpdump:x:72: screen:x:84: lilei:x:500: admins:x:502: wangcai:x:503: sysadmins:x:504
這裏我同樣只展示出了一部分,它們各個數據間同樣用:分隔,每個數據代表的意義也各有不同
我們同樣用bin組爲例
bin:x:1:bin,daemon
組名:組密碼:組標識號(GID):附加組成員
linux組的類別:
用戶的主要組(primary group):用戶必須屬於一個且只有一個組
用戶的附加組(supplementary group):一個用戶可以屬於一個或者零個附加組
而文件一般分爲
- 所有者
- 所在組
- 其它組
所有者
一般爲文件的創建者,誰創建了該文件,就天然的成爲該文件的所有者
用ls ‐ahl命令可以看到文件的所有者
也可以使用chown 用戶名 文件名來修改文件的所有者
文件所在組
當某個用戶創建了一個文件後,這個文件的所在組就是該用戶所在的組
用ls ‐ahl命令可以看到文件的所有組
也可以使用chgrp 組名 文件名來修改文件所在的組
其它組
除開文件的所有者和所在組的用戶外,系統的其它用戶都是文件的其它組
Linux用戶和組的主要配置文件
-/etc/passwd:用戶機器屬性信息(名稱、UID、主組ID等)
-/etc/group:組及其屬性信息
-/etc/shadow:用戶密碼及其相關信息
-/etc/gshadow:組密碼及其相關信息
前兩個配置文件我們已經介紹過了,這裏我們講一下/etc/shadow文件,/etc/shadow 是/etc/passwd的密碼映射過去產生的文件,因爲/etc/passwd爲所有用戶都可讀的文件所以會導致用戶密碼不安全,而/etc/shadow文件只有root能看,其他用戶不能訪問。
pwconv 將passwd當中的密碼映射到了/etc/shadow
pwunconv 取消映射,密碼仍然放在/etc/passwd當中
/etc/shadow裏的文件如下所示(部分)
postfix:!!:17539:::::: gdm:!!:17539:::::: pulse:!!:17539:::::: sshd:!!:17539:::::: tcpdump:!!:17539:::::: lilei:$6$uPmj3VzY$xXEir7SSxj9R.sjbki3PfqDjNmdjavplQ5HXZjcGtULLiyenLv1VLHe.6cdidI1wQNjEkijiDfbfXWQc0Plss0:17544:0:99999:7::: wangcai:!!:17547:0:99999:7:::
這裏同樣以:爲分隔符,隔個字段含義如下
登陸用戶名:
用戶密碼(!!表示沒有設置密碼):
從1970年1月1日起到密碼最近一次被更改的時間:
密碼再過幾天可以被更改(0表示可以隨時被修改):
密碼再過幾天必須被更改(99999表示99999天后過期,也就相當於永不過期):
密碼過期前幾天系統提醒用戶(默認爲一週):
密碼過期幾天後賬號會被鎖定:
從1970年1月1日算起,多少天后賬號失效:
/etc/gshdow文件同樣是/etc/group文件裏的密碼映射文件
grpconv 將組密碼映射到了/etc/gshadow
grpunconv 取消組密碼的映射
/etc/gshadow裏的文件如下所示:(部分)
stapdev:!:: tcpdump:!:: screen:!:: lilei:!:: admins:!:: wangcai:!:: sysadmins:!::
組名:組密碼:組管理員列表:以當前組爲附加組的用戶列表(分隔符爲逗號)