一、 用戶
https://www.jianshu.com/p/83790e83fd87
爲何要有用戶?
資源分配、控制。爲何要有用戶組?
資源分享,協同合作
Linux 系統如何管理用戶和用戶組
用戶使用 UID (十進制的數字)
組使用 GID(十進制的數字)
系統中的每個資源都會屬於具體的用戶和組。
資源包括:文件,目錄,運行時的程序(進程), 一個服務等。
Linux 系統只認識 UID 和 GID
用戶基本信息和密碼信息
用戶信息保存在 /etc/passwd
文件中
用戶密碼的信息保存在 /etc/shadow
文件中
/etc/passwd 文件內容
每行是一個用戶,每行都是用 冒號分開用戶的各個信息
/etc/shadow 文件內容
每行是一個用戶,每行都是用 冒號分開用戶的各個信息, 共有 9 個字段。
shark 賬戶在 shadow
文件中是這樣的:
shark:!!:18099:0:99999:7:::
這九個字段意義如下:
用戶名
密碼 這個密碼是經過加密的,
!!
表示,創建了此用戶但是還未給其設置密碼。最近修改密碼的日期
這個數字單位是天數, 是 1970 年 1 月 1 日作爲 1 而累加的日期。
計算某個日期的累積天數的語法:
echo $(( $(date --date="2019/07/21" +%s) / 86400+1))
命令意思:
2019/07/21 爲你想要計算的日期,86400 爲每一天的秒數, %s 爲 1970/01/01 以來的累積總秒數。 由於 bash 僅支持整數,因此最終需要加上 1 補齊1970/01/01 當天
- 密碼不可被更動的天數
這個帳號的密碼在最近一次被修改後需要經過幾天纔可以再被修改!如果是
0
的話, 表示密碼隨時可以修改的意思。
- 密碼需要重新修改的天數
指定在最近一次修改密碼後, 在多少天數內需要再次的修改密碼,可以強制用戶修改密碼。
- 距離密碼要修改時的天數
假如是 5, 那就是臨近修改密碼的前 5 天內,都會提示用戶更新密碼。
- 密碼過期後的帳號寬限時間
就是密碼過期後,賬戶依然可以登了,並且打的到 bash, 但是當登錄到系統時,系統會提示你立刻進行密碼的更新,否則無法繼續操作。
密碼有效期 = 密碼修改日(因爲當天也算一天) + 密碼需要修改的天數
- 帳號失效日期
也是從 1970/01/01 以來總天數。通常用在收費系統上。
- 保留
關於 UID
id 範圍 | 該 ID 使用者特性 |
---|---|
0(系統管理員) | 當 UID 是 0 時,代表這個帳號是“系統管理員” root! 所以當你要讓其他的帳號名稱也具有 root 的權限時,將該帳號的 UID 改爲 0 即可。 這也就是說,一部系統上面的系統管理員不見得只有 root 喔! 不過,很不建議有多個帳號的 UID 是 0 啦~容易讓系統管理員混亂! |
1~999(系統帳號) | 保留給系統使用的 ID,其實除了 0 之外,其他的 UID 權限與特性並沒有不一樣。這個只是一個習慣。由於系統上面啓動的服務希望使用較小的權限去運行,因此不希望使用 root 的身份去執行這些服務, 所以我們就得要提供這些運行中程序的擁有者帳號才行。這些系統帳號通常是不可登陸的, 可以看到這些用戶都有 /sbin/nologin 這個特殊的 shell 存在。根據系統帳號的由來,通常這類帳號又約略被區分爲兩種:1200:由各發行版本廠商自行創建的系統帳號;201999:使用者這些 UID 去創建一些系統基本的賬號。 |
1000~60000(可登陸帳號) | 給一般使用者用的。事實上,目前的 linux 核心 (3.10.x 版)已經可以支持到 4294967295 (2^32-1) 這麼大的 UID 號碼了! |
查看用戶基本信息
// 查看當前用戶
id
關於用戶的編輯修改命令
useradd 添加用戶
useradd [-u UID] [-g 初始羣組] [-G 次要羣組] [-mM] [-c 說明欄] [-d 家目錄絕對路徑] [-s shell] 新的用戶名
-M :強制!不要創建使用者主文件夾!(系統帳號默認值)
-m :強制!要創建使用者主文件夾!(一般帳號默認值)
-r :創建一個系統的帳號,這個帳號的 UID 會有限制 (參考 /etc/login.defs)
-s :後面接一個 shell ,若沒有指定則默認是 /bin/bash,指定的 shell 必須存在於系統中
-e :後面接一個日期,格式爲“YYYY-MM-DD”此項目可寫入 shadow 第八字段,
亦即帳號失效日的設置項;
-u 後面跟一個數字,就是用戶的 ID 好,假如指定的 UID 已經存在,需要配合 -o 參數。
在新建一個用戶時,CentOS 這些默認值主要會幫我們處理幾個項目:
- 在
/etc/passwd
裏面創建一行與帳號相關的數據,包括創建 UID/GID/主文件夾等; - 在
/etc/shadow
裏面將此帳號的密碼相關參數填入,但是尚未有密碼; - 在
/etc/group
裏面加入一個與帳號名稱一模一樣的羣組名稱; - 在
/home
下面創建一個與帳號同名的目錄作爲使用者主文件夾,且權限爲700
示例:
- 新增一個普通用戶,自動創建家目錄和組
useradd shark
- 新增一個系統用戶
useradd -r shark1
- 新增一個系統用戶, 且指定 shell 爲
/sbin/nologin
useradd -r -s /sbin/nologin shark2
useradd 的默認值
➜ ~ useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
設置用戶密碼
// root 功能:
passwd [-l] [-u] [--sdtin] [-S] [-n 日數] [-x 日數] [-w 日數] [-i 天數] 賬號
//所有人均可使用來修改自己的密碼
passwd [--sdtin]
選項:
--stdin :可以通過來自前一個管道的數據,作爲密碼的輸入,對shell script比較有幫助。
-l :lock 帳號,是密碼暫時性失效
-u :解鎖
-S :查看帳號密碼的相關參數
-n :密碼不可修改的天數
-x :密碼強制修改天數
-w :密碼過期前的警告天數
-i :修改或指定密碼失效天數
- 普通用戶修改自己的密碼
password
- root 身份設置/修改 其他用戶的密碼
password shark
修改用戶信息 usermod
root 用戶執行
usermod [-cdegGlsuLU] username
選項與參數:
-c :後面接帳號的說明,即 /etc/passwd 第五欄的說明欄,可以加入一些帳號的說明。
-d :後面接帳號的主文件夾,即修改 /etc/passwd 的第六欄;
-e :後面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 內的第八個字段數據啦!
-f :後面接天數,爲 shadow 的第七字段。
-g :後面接初始羣組,修改 /etc/passwd 的第四個字段,亦即是 GID 的字段!
-G :後面接次要羣組,修改這個使用者能夠支持的羣組,修改的是 /etc/group
-a :與 -G 合用,可“增加次要羣組的支持”而非“設置”喔!
-l :後面接帳號名稱。亦即是修改帳號名稱, /etc/passwd 的第一欄!
-s :後面接 Shell 的實際文件,例如 /bin/bash 或 /bin/csh 等等。
-u :後面接 UID 數字啦!即 /etc/passwd 第三欄的數據;
-L :暫時將使用者的密碼凍結,讓他無法登陸。其實僅改 /etc/shadow 的密碼欄。
-U :將 /etc/shadow 密碼欄的 `!` 去除,就是解除鎖定!
- 把用戶
shark
添加到wheel
組中
usermod -a -G wheel shark
命令 添加 組 組名 用戶名
刪除用戶 userdel
這個功能就太簡單了,目的在刪除使用者的相關數據,而使用者的數據有:
使用者帳號/密碼相關參數:/etc/passwd, /etc/shadow
使用者羣組相關參數:/etc/group, /etc/gshadow
使用者個人文件數據: /home/username, /var/spool/mail/username..
整個指令的語法非常簡單:
命令語法
userdel [-r] username
選項與參數:
-r :連同使用者的主文件夾也一起刪除
- 用
root
身份刪除普通用戶
用戶的家目錄和郵箱等不會被刪除
userdel shark
- 用
root
身份刪除普通用戶,並且不保留被刪除用戶的家目錄等數據。
userdel -r shark1
二、組
初始組(initial group):
就是在創建用戶的時候,默認會創建一個和用戶名同名的組。後期也可以修改。
初始組的 GID 會出現在/etc/passwd
中,用戶的存放 GID 的位置,用戶已登錄到系統中就會擁有此組的權限。
有效組(effective group):
當前環境下,用戶所擁有有效組的權限,新創建的文檔的屬組將會是這個用的有效組。
Linux 系統中的組信息存放在 /tec/group
文件中,可以分爲四個部分
組名
組密碼
組 ID
組內成員
組內的多個成員用英文逗號隔開,期間不能有空格。
UID 範圍及意義,和 UID 幾乎相同。 0 是管理員用戶的初始組
關於組的命令
groups 查看用戶都加入了哪些組
- 查看當前用戶的組
[shark@e9818e4ea8b3 ~]$ groups
shark wheel
處於第一個位置的是 此用戶的 有效組
- 查看其他用戶的組
[shark@e9818e4ea8b3 ~]$ groups shark1
shark1 : shark1
用戶 組
groupadd 新增組
goupadd [-g gid] [-r] group_name
選項:
-g :指定gid ,單獨添加組,建議指定1000以上的gid,便於管理。
-r :建立系統組
groupdel 刪除組
groupdel group_name
注意:當你要刪除一個組時,需要確保系統中沒有任何一個用戶把此組作爲初始組 initial group
gpasswd 修改組成員
自修,提示使用 gpasswd --help
作業練習
- 建立用戶:nginx 默認沒有家目錄,不可本地登錄系統
2.建立用戶:super 默認將其加入到 wheel 組
3.建立用戶:mysql 用戶 指定目錄: /opt/mysql/
4.創建用戶:prod 用戶 設置其1天內不可修改密碼,密碼有效期3天,提前1天通知他,密碼失效期6天,用戶失效期7天
4.建立組:devops 並指定組成員:
建立組:baoma 指定組成員: x3 x5 x6
用戶身份切換
su
切換爲其他用戶,這需要提供其他用戶的密碼
su - [-c] [用戶名]
選項與參數:
- :單純使用 - 如“ su - ”代表使用 login-shell 的變量文件讀取方式來登陸系統;
若用戶名沒有加上去,則代表切換爲 root 的身份。
sudo
sudo
是用於使用普通用戶的身份去執行 root
用戶身份纔有權執行的命令操作。
必要條件
需要把普通用戶設置爲 sudo 用戶
使用 sudo 的時候需要提供
root
的用戶名。
語法
sudo [-b] [-u 新使用者帳號]
選項與參數:
-b :將後續的指令放到背景中讓系統自行執行,而不與目前的 shell 產生影響
-u :後面可以接欲切換的使用者,若無此項則代表切換身份爲 root 。
- 使用 sshd 用戶,在
/tmp
目錄下創建一個普通文件,並觀察文件相關屬性
sudo -u sshd touch /tmp/sshd.file
多個命令用分號隔開
sudo 的執行是這樣的流程
當使用者執行 sudo 時,系統於 /etc/sudoers 文件中搜尋該使用者是否有執行 sudo 的權限;
若使用者具有可執行 sudo 的權限後,便讓使用者“輸入使用者自己的密碼”來確認;
若密碼輸入成功,便開始進行 sudo 後續接的指令(但 root 執行 sudo 時,不需要輸入密碼);
若欲切換的身份與執行者身份相同,那也不需要輸入密碼。
visudo 將普通用戶設置爲 sudo 用戶
建議使用 visudo 編輯 /etc/sudoers
文件,比較安全。
設置語法格式:
設置單一用戶
root ALL=(ALL) ALL
設置一個組
%wheel ALL=(ALL) ALL
各個部分的意思
“使用者帳號”:系統的哪個帳號可以使用 sudo 這個指令的意思;
“登陸者的來源主機名稱”:當這個帳號由哪部主機連線到本 Linux 主機,意思是這個帳號可能是由哪一部網絡主機連線過來的,信任的來源的意思。默認值 root 可來自任何一部網絡主機
“(可切換的身份)”:這個帳號可以切換成什麼身份來下達後續的指令,默認 root 可以切換成任何人;
“可下達的指令”:可用該身份下達什麼指令?這個指令請務必使用絕對路徑撰寫。 默認 root 可以切換任何身份且進行任何指令之意。
免密碼
之前的設置都需要,輸入自己的密碼,有時候這在寫一些自動化的工具時,並不合適,因爲提示用戶輸入自己的密碼,會導致交互的操作。
sudo 時,不輸入任何密碼
%wheel ALL=(ALL) NOPASSWD: ALL
指定切換身份和使用的命令
shark ALL=(root) /usr/bin/passwd
限制使用某些命令
shark ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
允許 shark 用戶以 root 身份修改其他用戶的密碼,但是不允許修改 root 的密碼
用戶別名和命令別名
有時候可以讓多個用戶共同具有某些 sudo 用戶的權限,就可以把這些用戶設置爲一個用戶別名
User_Alias ADMPW = shark1, shark2
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
ADMPW ALL=(root) ADMPWCOM
sudo 和 su
讓普通用戶切換爲 root 身份,並且不需要輸入 root 的密碼。
User_Alias ADMINS = shark1, shark2
ADMINS ALL=(root) /bin/su -