Linux 學習筆記(一)使用者及使用者組
Linux 是個多使用者的作業系統,同一時間可以多個使用者,同時登入,同時操作檔案。由於安全需要,使用者管理應用而生。
但不同的使用者可能不同的許可權限制,如果每個使用者都要去處理這個使用者什麼檔案能訪問什麼檔案不能訪問,那也太煩了。使用者組的設定就很大程度減輕管理的壓力,使用者要有什麼許可權把使用者加到使用者組就行了。(和資料庫設計的角色表相類似)
而Linux 中必不可少的是與配置檔案(儘量不要手動更改),與使用者及使用者組有關的配置檔案有:
檔案 | 作用 |
---|---|
/etc/shadow | 儲存使用者安全資訊 |
/etc/passwd | 使用者賬戶資訊 |
/etc/gshadow | 儲存組賬號的安全資訊 |
/etc/group | 定義使用者所屬的組 |
/etc/sudoers | 可以執行 sudo 的使用者 |
/home/* | 主目錄 |
使用者管理
Linux 登陸的使用者至少都會有兩個ID :
- 使用者 ID (User ID ,簡稱 UID),系統通過UID識別不同的使用者
- 群組 ID (Group ID ,簡稱 GID)
下面來看看配置檔案中的包含的資訊
使用者管理的相關檔案
/etc/passwd
passwd 檔案是以行為單位的配置檔案,每行定義系統上的一個使用者,行內分為欄位,欄位之間由一個冒號隔開
head -1 /etc/passwd
root:x:0:0:root:/root:/bin/zsh
格式為: 使用者名稱:密碼:使用者ID:主要組ID:GECOS:主目錄:登入shell
欄位 | 作用 |
---|---|
使用者名稱 | 就是一個使用者名稱,登入時候用的 |
密碼 | 在舊的UNIX系統上,這個欄位含有使用者的加密密碼,為了安全性,現在的linux均顯示為x或*號(實際密碼存放在/etc/shadow下) |
使用者ID | inux核心用於識別使用者的一個整數ID |
主要組ID | inux核心用於識別使用者主要組的一個整數ID |
GECOS | 使用者全名,安裝linux時如果不輸入全名,則顯示為跟使用者名稱一樣,如果輸入,則顯示為全名(不可用於登入) |
主目錄 | 使用者登入時,他的登入Shell將使用這個目錄作為當前工作目錄 |
登入Shell | 使用者登入時的預設Shell,在redhat 企業版中,登入shell通常是/bin/bash |
/etc/shadow
使用者的密碼被儲存在專門的 /etc/shadow 檔案中,其許可權不允許普通使用者檢視,僅root使用者可以檢視
head -1 /etc/shadow
beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
格式為: 使用者名稱:加密密碼:上次更改密碼的時間:最小更改密碼間隔:密碼有效期限:密碼過期提示時間:密碼鎖定期:賬戶有效期:保留欄位
欄位 | 作用 |
---|---|
使用者名稱(也被稱之為登入名) | 在例子中有兩條記錄,也表示有兩個使用者beinan和linuxsir |
被加密的密碼 | 如果有的使用者在此欄位中是x,表示這個使用者不能登入系統,也可以看作是虛擬使用者,不過虛擬使用者和真實使用者都是相對的,系統管理員隨時可以對任何使用者操作 |
表示上次更改口令的天數(距1970年01月01日) | 上面的例子能說明beinan和linuxsir這兩個使用者,是在同一天更改了使用者密碼,當然是通過passwd 命令來更改的,更改密碼的時間距1970年01月01日的天數為13072 |
禁用兩次口令修改之間最小天數的功能 | 設定為0 |
兩次修改口令間隔最多的天數 | 在例子中都是99999天;這個值如果在新增使用者時沒有指定的話,是通過/etc/login.defs來獲取預設值,PASS_MAX_DAYS 99999;您可以檢視/etc/login.defs來檢視,具體的值 |
提前多少天警告使用者口令將過期 | 當用戶登入系統後,系統登入程式提醒使用者口令將要作廢;如果是系統預設值,是在新增使用者時由/etc/login.defs檔案定義中獲取,在PASS_WARN_AGE 中定義;在例子中的值是7 ,表示在使用者口令將過期的前7天警告使用者更改期口令 |
在口令過期之後多少天禁用此使用者 | 此欄位表示使用者口令作廢多少天后,系統會禁用此使用者,也就是說系統會不能再讓此使用者登入,也不會提示使用者過期,是完全禁用;在例子中,此欄位兩個使用者的都是空的,表示禁用這個功能 |
使用者過期日期 | 此欄位指定了使用者作廢的天數(從1970年的1月1日開始的天數),如果這個欄位的值為空,帳號永久可用;在例子中,我們看到beinan這個使用者在此欄位是空的,表示此使用者永久可用;而linuxsir這個使用者表示在距1970年01月01日後13108天后過期,算起來也就是2005年11月21號過期 |
保留欄位 | 目前為空,以備將來Linux發展之用 |
使用者的型別
既然 linux 系統是用 UID 識別使用者,那麼使用者的型別也可以依據 UID 進行分類,而一般分為3類。
使用者型別 | UID範圍 | 簡介 |
---|---|---|
超級管理員 | 0 | root使用者,具有操作整個系統的所用許可權,一般禁止該賬戶直接登入 |
系統使用者 | 1~499(centos到999) | 能夠登入系統獲得有限許可權的使用者,並且可以使用sudo獲取root許可權 預設系統使用者為普通使用者 |
普通使用者 | 500~65535(目前支援到4294967295) | 前兩類使用者建立的使用者,只能執行普通操作 |
管理使用者
以下將介紹一些命令的常用使用方式,若想知道更詳細的命令引數可以點選標題的指向的連結, 命令 -help
(如: useradd -help
) 或者是 man 命令
檢視(如:man useradd
)
useradd - 新增使用者
建立使用者
useradd zgj
檢視使用者資訊
cat /etc/passwd | grep "zgj"
zgj:x:1002:1002::/home/zgj:/bin/bash
cat /etc/shadow | grep "zgj"
zgj:!!:17712:0:99999:7:::
建立使用者預設會分配到新建立的組 GID 是 1002,密碼是空的,提前7天警告使用者口令將過期。 或者使用 id 命令檢視使用者的資訊
id zgj
uid=1002(zgj) gid=1002(zgj) 組=1002(zgj)
看來建立一個使用者還會建立與之同名的使用者組。 更復雜的用法 下面看一組複雜的命令,引數也比較常用
useradd -c "zhangsan" -d /home/zhangsan -g wheel -G nginx,ftp -s /bin/zsh -mn zs
-c
: 使用者的備註,該命令使用者備註是 zhangsan-d
: 使用者的主目錄,該命令使用者的主目錄是 /home/zhangsan-g
: 使用者所屬的主使用者組,該命令的主使用者組是 wheel-G
: 使用者所屬的附屬使用者組,該命令的附屬使用者組是 nginx,ftp-s
: 使用者登入後使用的 shell,該命令的-m
: 自動建立使用者的主目錄;-n
: 取消建立以使用者名稱稱為名的群組
passwd - 修改密碼
查詢密碼的狀態(此時使用者還沒有初始化密碼)
passwd -S zgj
zgj LK 2018-06-30 0 99999 7 -1 (密碼已被鎖定。)
修改密碼
passwd zgj
輸入新的密碼並驗證
passwd:所有的身份驗證令牌已經成功更新。
檢視修改檔案
cat /etc/passwd | grep "zgj"
zgj:$6$Ih/DtiQsrwpZZ5SN$rKOoBIhFDf0xPTIx/f43WV5Ly.6aMUO5BLO23xe3FysCn1PAETuhAjW1/ebYtoIL5Z05rt0l/.7R8R7tFo.hj/:17712:0:99999:7:::
已經看到結果中有密碼了。
$6$Ih/DtiQsrwpZZ5SN$rKOoBIhFDf0xPTIx/f43WV5Ly.6aMUO5BLO23xe3FysCn1PAETuhAjW1/ebYtoIL5Z05rt0l/.7R8R7tFo.hj/
而密碼這串東西是什麼鬼呢? 這密碼格式其實是 $id$salt$encrypted
- id : 是指加密的演算法,其中這裡的值是6,所以是 SHA-512 演算法
- salt: 就是密碼學上的加鹽,簡單的來講就是 123456 在彩虹表中一下就被查出了明文,但是加鹽後密碼就變成 123456Ih/DtiQsrwpZZ5SN 就沒有那麼容易被查出了。
- encrypted: 就是加密後的密文了。 而這個檔案非常重要,最好只有 root 才能訪問。若你想知道如何可以暴力破解密碼可以看 HashCat 暴力破解 Linux 使用者密碼 這篇文章
usermod - 修改使用者
要修改的屬性也跟新增使用者差不多,用得比較多的幾個大概是 修改使用者名稱
usermod -l wyz zgj
新增到附加組
usermod -aG http zgj
如果不新增 a 會直接修改(替換)附加組,。 直接修改主組
usermod -g wheel zgj
userdel - 刪除使用者
userdel zgj
如果刪除使用者後,再建立同名的使用者,那麼新的使用者能訪問舊的使用者的主目錄嗎?
答案:不行 而且會有相應的提示
useradd:警告:此主目錄已經存在。
不從 skel 目錄裡向其中複製任何檔案。
正在建立信箱檔案: File exists
如果新使用者還是有訪問舊使用者目錄的需求呢?(比如刪錯了)
可以把 舊使用者的目錄 的擁有者重新賦予給新使用者
chown zgj -R /home/zgj
如果想徹底刪除舊使用者,其家目錄及檔案一併刪除呢?
userdel -r zgj
使用者組管理
與使用者管相類似的,使用者組管理也有相似的檔案 /etc/group
,/etc/gshadow
使用者組管理的相關檔案
/etc/group
cat /etc/group | grep "ftp"
ftp:x:50:zs,zgj
格式為 groupname:password:gid:members
/etc/gshadow
Linux的使用者組的密碼存放在 /etc/gshadow 檔案中,一般也只有 root 使用者才能訪問。而Linux 中一般很少用到使用者組密碼
cat /etc/gshadow | grep "ftp"
ftp:::zs,zgj
格式為 groupname:加密後的密碼:管理員:成員列表
管理使用者組
groups - 檢視使用者所在使用者組
groups zgj
wheel ftp
若引數省略使用者名稱,則是檢視自己在哪個使用者組
groupadd - 新增使用者組
groupadd http
檢視新增的情況
cat /etc/group | grep "http"
http:x:1006:
gpasswd - /etc/group
和 /etc/gshadow
的管理工具
使用者加入到使用者組
gpasswd -a http_user_1 http
設定使用者組管理員
gpasswd -A http_admin http
檢視情況
cat /etc/gshadow | grep "http"
http::http_admin:http_user_1
為使用者組設定密碼
gpasswd http
檢視情況
cat /etc/gshadow | grep "http"
http:$6$PBy4g/Kzd8n/VclF$XqWFDW6xqvwjwz6aSZ5qmfivzSb/wznLI8MTNdAblJTzaELDfMlhHnClC.jk20HhB88mwUW96Cb/BqW5FsiZf0:http_admin:http_user_1
設定密碼後,不在這個組的使用者可以通過,newgrp http
這樣的命令然後輸入密碼即可加入組了。 移除密碼
gpasswd -r http
將使用者從使用者組中移除
gpasswd -d http_user_1 http
修改使用者組名 - groupmod
groupmod -n newname oldname
刪除使用者組 - groupdel
groupdel http