一、 用戶
http://www.itdecent.cn/p/83790e83fd87
為何要有用戶?
資源分配、控制。為何要有用戶組?
資源分享,協(xié)同合作
Linux 系統(tǒng)如何管理用戶和用戶組
用戶使用 UID (十進(jìn)制的數(shù)字)
組使用 GID(十進(jìn)制的數(shù)字)
系統(tǒng)中的每個(gè)資源都會(huì)屬于具體的用戶和組。
資源包括:文件,目錄,運(yùn)行時(shí)的程序(進(jìn)程), 一個(gè)服務(wù)等。
Linux 系統(tǒng)只認(rèn)識(shí) UID 和 GID
用戶基本信息和密碼信息
用戶信息保存在 /etc/passwd 文件中
用戶密碼的信息保存在 /etc/shadow 文件中
/etc/passwd 文件內(nèi)容
每行是一個(gè)用戶,每行都是用 冒號(hào)分開用戶的各個(gè)信息

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