描述用戶和組的概念
目標(biāo)
完成本節(jié)內(nèi)容后,你能夠描述Linux系統(tǒng)中用戶和組的作用个从。
什么是用戶脉幢?
用戶賬戶是用來在不同的人和可以運(yùn)行命令的程序之間提供安全邊界。
用戶有了用戶名嗦锐,可以將不同的用戶區(qū)分開來嫌松,使其更容易工作。在系統(tǒng)內(nèi)部意推,系統(tǒng)通過分配給用戶賬戶的唯一識(shí)別號(hào)豆瘫,即用戶ID或UID來區(qū)分用戶賬戶珊蟀。如果一個(gè)用戶賬戶被一個(gè)人使用菊值,一般會(huì)被分配一個(gè)秘密密碼,用戶在登錄時(shí)用這個(gè)密碼來證明自己是真正的授權(quán)用戶育灸。
用戶賬戶是系統(tǒng)安全的基礎(chǔ)腻窒。系統(tǒng)中的每個(gè)進(jìn)程(運(yùn)行的程序)都是以特定的用戶身份運(yùn)行。每個(gè)文件都有一個(gè)特定的用戶作為其所有者耕捞。文件的所有權(quán)幫助系統(tǒng)對文件的用戶實(shí)施訪問控制雹食。與運(yùn)行中的進(jìn)程關(guān)聯(lián)的用戶決定了該進(jìn)程可以訪問的文件和目錄腌紧。
用戶賬戶主要有三種類型:超級(jí)用戶、系統(tǒng)用戶和普通用戶柔逼。
- 超級(jí)用戶賬戶是用來管理系統(tǒng)的超級(jí)用戶。超級(jí)用戶的名稱是root割岛,賬戶的UID為0愉适。超級(jí)用戶擁有對系統(tǒng)的完全訪問權(quán)限。
- 系統(tǒng)有系統(tǒng)用戶賬戶癣漆,這些賬戶被提供支持服務(wù)的進(jìn)程所使用维咸。這些進(jìn)程或守護(hù)進(jìn)程,通常不需要作為超級(jí)用戶運(yùn)行惠爽。它們是被指定的非特權(quán)賬戶癌蓖,允許它們保護(hù)自己的文件和其他資源不受系統(tǒng)上的普通用戶的影響。用戶不使用系統(tǒng)用戶賬戶交互式登錄婚肆。
- 大多數(shù)用戶都有固定的用戶賬戶租副,他們?nèi)粘9ぷ鲿r(shí)都會(huì)使用這些賬戶。與系統(tǒng)用戶一樣较性,普通用戶對系統(tǒng)的訪問權(quán)限也是有限的用僧。
您可以使用id命令來顯示當(dāng)前登錄用戶的信息讨越。
[user01@host ~]$ id
uid=1000(user01) gid=1000(user01) groups=1000(user01) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
要查看其他用戶的基本信息,可以將用戶名作為參數(shù)傳遞給id命令永毅。
[user01@host]$ id user02
uid=1002(user02) gid=1001(user02) groups=1001(user02) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
要查看一個(gè)文件的所有者把跨,請使用 ls -l 命令。要查看一個(gè)目錄的所有者沼死,請使用 ls ld 命令着逐。在下面的輸出中,第三列顯示的是用戶名意蛀。
[user01@host ~]$ ls -l file1
-rw-rw-r--. 1 user01 user01 0 Feb 5 11:10 file1
[user01@host]$ ls -ld dir1
drwxrwxr-x. 2 user01 user01 6 Feb 5 11:10 dir1
要查看進(jìn)程信息耸别,請使用ps命令。默認(rèn)情況下县钥,只顯示當(dāng)前shell中的進(jìn)程秀姐。添加 a 選項(xiàng)來查看所有進(jìn)程的終端信息。要查看與進(jìn)程相關(guān)聯(lián)的用戶若贮,請加入u選項(xiàng)省有。在下面的輸出中,第一列顯示的是用戶名谴麦。
[user01@host]$ ps -au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 777 0.0 0.0 225752 1496 tty1 Ss+ 11:03 0:00 /sbin/agetty -o p -- \u --noclear tty1 linux
root 780 0.0 0.1 225392 2064 ttyS0 Ss+ 11:03 0:00 /sbin/agetty -o p -- \u --keep-baud 115200,38400,9600
user01 1207 0.0 0.2 234044 5104 pts/0 Ss 11:09 0:00 -bash
user01 1319 0.0 0.2 266904 3876 pts/0 R+ 11:33 0:00 ps au
前面命令的輸出是按名字顯示用戶蠢沿,但在內(nèi)部,操作系統(tǒng)使用UID來跟蹤用戶匾效。用戶名與UID的映射是在賬戶信息數(shù)據(jù)庫中定義的舷蟀。默認(rèn)情況下,系統(tǒng)使用/etc/passwd文件來存儲(chǔ)本地用戶的信息面哼。
/etc/passwd文件中的每一行都包含一個(gè)用戶的信息野宜。它被分為七個(gè)冒號(hào)分隔的字段。下面是/etc/passwd文件中的一個(gè)例子魔策。
user01: x: 1000: 1000: User One: /home/user01: /bin/bash
- 該用戶的用戶名(user01)匈子。
- 用戶的密碼過去是以加密格式存儲(chǔ)在這里。這已經(jīng)被移到了/etc/shadow文件中代乃,后面會(huì)講到旬牲。這個(gè)字段應(yīng)該永遠(yuǎn)是x。
- 該用戶賬戶的UID號(hào)(1000)
- 該用戶賬戶的用戶組組的GID號(hào)(1000)搁吓。用戶組將在本節(jié)后面討論
- 該用戶的真實(shí)姓名(User One)原茅。
- 該用戶的主目錄(/home/user01)。這是shell啟動(dòng)時(shí)的初始工作目錄堕仔,包含用戶的數(shù)據(jù)和配置設(shè)置擂橘。
- 這個(gè)用戶的默認(rèn)shell程序,在登錄時(shí)運(yùn)行(/bin/bash)摩骨。對于普通用戶通贞,通常是提供用戶的命令行提示符的程序朗若。如果系統(tǒng)用戶不允許交互式登錄,那么系統(tǒng)用戶可以使用/sbin/nologin昌罩。
什么是用戶組哭懈?
用戶組是一個(gè)需要共享文件和其他系統(tǒng)資源的用戶集合。組可以用來授予一組用戶對文件的訪問權(quán)限茎用,而不是只授予單個(gè)用戶遣总。
和用戶一樣,組也有組名轨功,以便于工作時(shí)使用旭斥。在內(nèi)部,系統(tǒng)通過分配給組的唯一識(shí)別號(hào)古涧,即組ID或GID來區(qū)分組垂券。
組名與GID的映射是在組賬戶信息數(shù)據(jù)庫中定義的。默認(rèn)情況下羡滑,系統(tǒng)使用/etc/group文件來存儲(chǔ)關(guān)于本地組的信息菇爪。
在/etc/group文件中的每一行都包含一個(gè)組的信息。每個(gè)組條目被分為四個(gè)冒號(hào)分隔的字段啄栓。下面是/etc/group文件中的一個(gè)例子娄帖。
group01: x: 10000: user01,user02,user03
- 該組的組名(group01)也祠。
- 過時(shí)的組密碼字段昙楚。該字段應(yīng)始終為x。
- 本組的GID號(hào)(10000)诈嘿。
- 作為補(bǔ)充組(user01堪旧、user02、user03)的用戶列表奖亚。主組(或默認(rèn)組)和補(bǔ)充組將在本節(jié)后面討論淳梦。
主要組和補(bǔ)充組
每個(gè)用戶都有一個(gè)主組。對于本地用戶昔字,這是在/etc/passwd文件中按GID號(hào)列出的組爆袍。默認(rèn)情況下,這個(gè)組將擁有該用戶創(chuàng)建的新文件作郭。
通常陨囊,當(dāng)你創(chuàng)建一個(gè)新的普通用戶時(shí),會(huì)創(chuàng)建一個(gè)與該用戶相同名稱的新組夹攒。該組被用作新用戶的主組蜘醋,該用戶是這個(gè)用戶私有組的唯一成員。事實(shí)證明咏尝,這有助于簡化文件權(quán)限的管理压语,這將在后面的課程中討論啸罢。
用戶也可以有補(bǔ)充組。補(bǔ)充組的成員資格由 /etc/group 文件決定胎食。用戶被授予對文件的訪問權(quán)限是基于他們的任何組是否有訪問權(quán)限扰才。對于用戶來說,擁有訪問權(quán)限的組是主組還是補(bǔ)充組并不重要厕怜。
例如训桶,如果用戶user01有一個(gè)主群組用戶01和補(bǔ)充群組 wheel和webadmin,那么該用戶可以讀取這三個(gè)群組中的任何一個(gè)群組可讀的文件酣倾。
id命令也可以用來查找用戶的組成員信息舵揭。
[user03@host ~]$ id
uid=1003(user03) gid=1003(user03) groups=1003(user03),10(wheel),10000(group01) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
在前面的例子中,用戶03的主群組user03是主群組(gid)躁锡。組項(xiàng)列出了該用戶的所有組午绳,除了主組user03之外,該用戶還有組wheel和group01作為補(bǔ)充組映之。
獲得超級(jí)用戶權(quán)限
目標(biāo)
完成本節(jié)內(nèi)容后拦焚,可以切換到超級(jí)用戶賬戶來管理Linux系統(tǒng),并通過sudo命令授予其他用戶超級(jí)用戶權(quán)限杠输。
超級(jí)用戶
大多數(shù)操作系統(tǒng)都有某種超級(jí)用戶赎败,即擁有系統(tǒng)所有權(quán)力的用戶。在 Red Hat Enterprise Linux 中蠢甲,這就是root用戶僵刮。這個(gè)用戶有權(quán)力修改文件系統(tǒng)上的權(quán)限,來管理系統(tǒng)鹦牛。要執(zhí)行諸如安裝或刪除軟件和管理系統(tǒng)文件和目錄等任務(wù)搞糕,用戶必須將其權(quán)限升級(jí)到root用戶。
只有普通用戶中的root用戶才能控制大部分設(shè)備曼追,但也有少數(shù)例外窍仰。例如,正常用戶可以控制USB設(shè)備等可移動(dòng)設(shè)備礼殊。因此驹吮,正常用戶可以添加和刪除文件以及以其他方式管理可移動(dòng)設(shè)備,但默認(rèn)只有root用戶才能管理 "固定 "的硬盤晶伦。
然而碟狞,權(quán)力越大責(zé)任越大。root用戶擁有破壞系統(tǒng)的無限權(quán)力:刪除文件和目錄坝辫、刪除用戶賬戶篷就、添加后門等等。如果root用戶的賬戶被破壞,那么系統(tǒng)的管理控制權(quán)就會(huì)被其他人掌握竭业。在整個(gè)課程中智润,鼓勵(lì)管理員以普通用戶的身份登錄,在需要的時(shí)候才將權(quán)限升級(jí)為根用戶未辆。
Linux中的root賬戶大致相當(dāng)于微軟Windows中的本地管理員賬戶窟绷。在Linux中,大多數(shù)系統(tǒng)管理員都是以非權(quán)限用戶的身份登錄系統(tǒng)咐柜,并使用各種工具暫時(shí)獲得root權(quán)限兼蜈。
切換用戶
su命令允許用戶切換到不同的用戶賬戶。如果你從一個(gè)普通用戶賬戶運(yùn)行su拙友,你會(huì)被提示你要切換到的賬戶的密碼为狸。
[user01@host ~]$ su - user02
Password:
[user02@host ~]$
如果你省略了用戶名,su 或 su - 命令將嘗試在默認(rèn)情況下切換到 root遗契。
[user01@host ~]$ su
Password:
[root@host ~]#
命令su啟動(dòng)一個(gè)非登錄的shell辐棒,而命令su - (帶破折號(hào)選項(xiàng))啟動(dòng)一個(gè)登錄的shell。這兩個(gè)命令的主要區(qū)別在于牍蜂,su -設(shè)置了shell環(huán)境漾根,就像以該用戶的身份新登錄一樣,而su只是以該用戶的身份啟動(dòng)一個(gè)shell鲫竞,但使用的是原始用戶的環(huán)境設(shè)置辐怕。
在大多數(shù)情況下,管理員應(yīng)該運(yùn)行 su - 來獲取一個(gè)帶有目標(biāo)用戶的正常環(huán)境設(shè)置的 shell从绘。更多信息寄疏,請參閱 bash(1) man page。
用sudo運(yùn)行命令
在某些情況下顶考,出于安全考慮赁还,root用戶的賬戶可能根本沒有有效的密碼。在這種情況下驹沿,用戶不能用密碼直接以root身份登錄系統(tǒng),也不能用su來獲取交互式shell蹈胡。在這種情況下渊季,有一個(gè)工具可以用來獲取root權(quán)限,那就是sudo罚渐。
與su不同的是却汉,sudo通常要求用戶輸入自己的密碼進(jìn)行身份驗(yàn)證,而不是他們要訪問的用戶賬戶的密碼荷并。也就是說合砂,使用sudo以root身份運(yùn)行命令的用戶不需要知道root密碼。相反源织,他們使用自己的密碼來驗(yàn)證訪問翩伪。
此外微猖,sudo可以被配置成允許特定用戶以其他用戶的身份運(yùn)行任何命令,或者只以該用戶的身份運(yùn)行某些命令缘屹。
例如凛剥,當(dāng)sudo被配置為允許user01用戶以root身份運(yùn)行usermod命令時(shí),user01可以運(yùn)行以下命令來鎖定或解鎖用戶賬戶:
[user01@host ~]$ sudo usermod -L user02
[sudo] password for user01:
[user01@host ~]$ su - user02
Password:
su: Authentication failure
[user01@host ~]$
如果用戶試圖以另一個(gè)用戶的身份運(yùn)行命令轻姿,而sudo配置不允許犁珠,則該命令將被阻止,該嘗試將被記錄下來互亮,并且默認(rèn)情況下會(huì)向根用戶發(fā)送一封郵件犁享。
[user02@host ~]$ sudo tail /var/log/secure
[sudo] password for user02:
user02 is not in the sudoers file. This incident will be reported.
[user02@host ~]$
使用sudo的另一個(gè)好處是,所有執(zhí)行的命令都會(huì)被記錄到/ var/log/secure豹休。
[user01@host ~]$ sudo tail /var/log/secure
...output omitted...
Feb 6 20:45:46 host sudo[2577]: user01 : TTY=pts/0 ; PWD=/home/user01 ;
USER=root ; COMMAND=/sbin/usermod -L user02
...output omitted...
在Red Hat Enterprise Linux 7和Red Hat Enterprise Linux 8中饼疙,wheel組的所有成員都可以使用sudo以任何用戶的身份運(yùn)行命令,包括root用戶慕爬。用戶會(huì)被提示輸入自己的密碼窑眯。這是與 Red Hat Enterprise Linux 6 及更早的版本相比的一個(gè)變化,在 Red Hat Enterprise Linux 6 及更早的版本中医窿, wheel 組成員的用戶在默認(rèn)情況下不能獲得這種管理權(quán)限磅甩。
使用Sudo獲取root shell
如果系統(tǒng)上有一個(gè)非管理員用戶賬戶可以使用sudo來運(yùn)行su命令,你可以從該賬戶中運(yùn)行sudo su - 來獲得一個(gè)交互式的root用戶shell姥卢。這樣做是因?yàn)?strong>sudo會(huì)以root的身份運(yùn)行su -卷要,而root用戶不需要輸入密碼就可以使用su。
另一種使用 sudo 訪問 root 帳戶的方法是使用 sudo -i 命令独榴。這將切換到根賬戶僧叉,并運(yùn)行該用戶的默認(rèn)shell(通常是bash)和相關(guān)的shell登錄腳本。如果你只是想運(yùn)行shell棺榔,你可以使用sudo -s命令瓶堕。
例如,管理員可以通過使用 SSH 公鑰驗(yàn)證以普通用戶 ec2-user的身份登錄到 AWS EC2 實(shí)例上的交互式 shell症歇,然后通過運(yùn)行 sudo -i 來獲取根用戶的 shell郎笆。
[ec2-user@host ~]$ sudo -i
[sudo] password for ec2-user:
[root@host ~]#
sudo su - 命令和 sudo -i 的行為并不完全相同。這將在本節(jié)末尾簡要討論忘晤。
配置sudo
sudo的主要配置文件是/etc/sudoers宛蚓。為了避免多個(gè)管理員同時(shí)嘗試編輯它,只能用特殊的visudo命令來編輯设塔。
例如凄吏,在 /etc/sudoers 文件中的以下一行可以對wheel組成員進(jìn)行 sudo 訪問。
%wheel ALL=(ALL) ALL
在這一行中,%wheel是指該規(guī)則適用的用戶或組痕钢。%表示這是一個(gè)組图柏,wheel組。ALL=(ALL)指定wheel組可以運(yùn)行任何命令盖喷。最后的ALL指定wheel可以作為系統(tǒng)上的任何用戶運(yùn)行這些命令爆办。
默認(rèn)情況下,/etc/sudoers 也會(huì)將 /etc/sudoers.d 目錄中的任何文件的內(nèi)容作為配置文件的一部分课梳。這允許管理員只需在該目錄中放置一個(gè)適當(dāng)?shù)奈募嗔荆涂梢詾橛脩籼砑?sudo 訪問權(quán)限。
要啟用user01用戶的完全sudo訪問權(quán)限暮刃,可以創(chuàng)建/etc/sudoers.d/user01跨算,內(nèi)容如下:
user01 ALL=(ALL) ALL
要啟用 group01 組的完全 sudo 訪問,可以創(chuàng)建 /etc/sudoers.d/group01椭懊,內(nèi)容如下:
%group01 ALL=(ALL) ALL
也可以設(shè)置sudo诸蚕,允許用戶以另一個(gè)用戶的身份運(yùn)行命令而不輸入密碼。
ansible ALL=(ALL) NOPASSWD:ALL
雖然向用戶或組授予這種級(jí)別的訪問權(quán)限存在明顯的安全風(fēng)險(xiǎn)氧猬,但它經(jīng)常被用于云實(shí)例背犯、虛擬機(jī)和配置系統(tǒng)以幫助配置服務(wù)器。擁有這種訪問權(quán)限的賬戶必須受到謹(jǐn)慎的保護(hù)盅抚,可能需要SSH publickey驗(yàn)證才能讓遠(yuǎn)程系統(tǒng)上的用戶訪問它漠魏。
例如,Amazon Web Services Marketplace 中的 Red Hat Enterprise Linux 的官方 AMI 在出廠時(shí)就鎖定了根用戶和 ec2-user用戶的密碼妄均。ec2-user用戶賬戶被設(shè)置為允許通過SSH公鑰驗(yàn)證進(jìn)行遠(yuǎn)程交互式訪問柱锹。ec2-user 用戶也可以在沒有密碼的情況下以 root 用戶的身份運(yùn)行任何命令,因?yàn)?AMI 的 / etc/sudoers 文件的最后一行設(shè)置如下:
ec2-user ALL=(ALL) NOPASSWD: ALL
在配置系統(tǒng)的過程中丰包,可以重新啟用sudo輸入密碼的要求禁熏,或者在配置系統(tǒng)的過程中,可以進(jìn)行其他的修改來加強(qiáng)安全性邑彪。
在本課程中瞧毙,你會(huì)經(jīng)常看到sudo su -代替sudo -i的使用锌蓄。這兩個(gè)命令都可以使用升筏,但它們之間有一些微妙的區(qū)別。
sudo su - 命令設(shè)置的根環(huán)境和普通登錄一樣瘸爽,因?yàn)?su - 命令會(huì)忽略 sudo 所做的設(shè)置,而是從頭開始設(shè)置環(huán)境铅忿。
sudo -i命令的默認(rèn)配置實(shí)際上是對root用戶環(huán)境的一些細(xì)節(jié)設(shè)置與普通登錄不同剪决。例如,它設(shè)置的PATH環(huán)境變量的方式略有不同。這影響了shell在查找命令的路徑柑潦。
你可以用visudo編輯/etc/sudoers享言,讓sudo -i表現(xiàn)得更像su -通過編輯/etc/sudoers。找到這一行
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
以下兩行:
Defaults secure_path = /usr/local/bin:/usr/bin
Defaults>root secure_path = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
對于大多數(shù)目的來說渗鬼,這并不是一個(gè)很大的區(qū)別览露。但是,為了使系統(tǒng)上的PATH設(shè)置與默認(rèn)的/etc/sudoers文件保持一致譬胎,本課程的作者在實(shí)例中大多使用sudo su -差牛。
管理本地用戶賬戶
目標(biāo)
完成本節(jié)內(nèi)容后,你應(yīng)該能夠創(chuàng)建堰乔、修改和刪除本地用戶賬戶偏化。
管理本地用戶
使用命令行工具來管理本地用戶賬戶。
從命令行創(chuàng)建用戶
- useradd username命令會(huì)創(chuàng)建一個(gè)名為username的新用戶镐侯。它設(shè)置了用戶的主目錄和賬戶信息侦讨,并為這個(gè)名為username的用戶創(chuàng)建了一個(gè)私有組。此時(shí)苟翻,該賬戶沒有設(shè)置有效的密碼韵卤,在設(shè)置好密碼之前,用戶無法登錄崇猫。
- useradd --help命令顯示了可以用來覆蓋默認(rèn)值的基本選項(xiàng)沈条。在大多數(shù)情況下,同樣的選項(xiàng)也可以用usermod命令來修改現(xiàn)有的用戶邓尤。
- 一些默認(rèn)值拍鲤,如有效UID號(hào)碼的范圍和默認(rèn)的密碼過期規(guī)則,都是從/etc/login.defs文件中讀取的汞扎。這個(gè)文件中的值只在創(chuàng)建新用戶時(shí)使用季稳。對這個(gè)文件的更改不會(huì)影響現(xiàn)有用戶。
從命令行修改現(xiàn)有用戶
usermod --help命令顯示可以用來修改賬戶的基本選項(xiàng)澈魄。一些常見的選項(xiàng)包括:
usermod選項(xiàng) | 作用 |
---|---|
-c, --comment COMMENT | 在評(píng)論欄中添加用戶的真實(shí)姓名景鼠。 |
-g, --gid GROUP | 指定用戶賬戶的主要組。 |
-G, --groups GROUPS | 為用戶賬戶指定一個(gè)以逗號(hào)分隔的補(bǔ)充組列表痹扇。 |
-a, --append | 與-G選項(xiàng)一起使用铛漓,可將補(bǔ)充組添加到用戶當(dāng)前的組成員集中,而不是用新的組替換補(bǔ)充組鲫构。 |
-d, --home HOME_DIR | 為用戶賬戶指定一個(gè)特定的主目錄浓恶。 |
-m, --move-home | 將用戶的主目錄移動(dòng)到一個(gè)新的位置。必須與-d選項(xiàng)一起使用结笨。 |
-s, --shell SHELL | 為用戶賬戶指定一個(gè)特定的登錄shell |
-L, --lock | 鎖定用戶賬戶包晰。 |
-U, --unlock | 解鎖用戶賬戶湿镀。 |
從命令行中刪除用戶
- userdel username命令從/etc/passwd中刪除了用戶名的詳細(xì)信息,但保留了用戶的主目錄伐憾。
- userdel -r username命令從/etc/passwd中刪除了用戶名的詳細(xì)信息勉痴,同時(shí)也刪除了用戶的主目錄。
當(dāng)使用 userdel 移除用戶而不指定 -r 選項(xiàng)時(shí)树肃,用戶的文件得到保留蒸矛。再創(chuàng)建新用戶十會(huì)指定未使用的uid,新用戶的UID和老用戶的UID相同胸嘴,新用戶可以訪問老用戶保留的文件雏掠,這種情況可能會(huì)導(dǎo)致信息泄露和其他安全問題。
在 Red Hat Enterprise Linux 7 和 Red Hat Enterprise Linux 8 中筛谚,useradd 命令為新用戶分配了第一個(gè)大于或等于 1000 未使用的UID磁玉,或者使用 -u 選項(xiàng)明確指定一個(gè)UID。
這就是信息泄露的原因驾讲。如果第一個(gè)空閑的UID之前被分配給了一個(gè)用戶賬戶蚊伞,而這個(gè)賬戶已經(jīng)從系統(tǒng)中刪除了,那么老用戶的UID就會(huì)被重新分配給新用戶吮铭,讓新用戶擁有老用戶剩余文件的所有權(quán)时迫。
下面的情景說明了這種情況。
[root@host ~]# useradd user01
[root@host ~]# ls -l /home
drwx------. 3 user01 user01 74 Feb 4 15:22 user01
[root@host ~]# userdel user01
[root@host ~]# ls -l /home
drwx------. 3 1000 1000 74 Feb 4 15:22 user01
[root@host ~]# useradd user02
[root@host ~]# ls -l /home
drwx------. 3 user02 user02 74 Feb 4 15:23 user02
drwx------. 3 user02 user02 74 Feb 4 15:22 user01
注意谓晌,user02現(xiàn)在擁有user01之前擁有的所有文件掠拳。
根據(jù)不同的情況,解決這個(gè)問題的方法之一是當(dāng)創(chuàng)建文件的用戶被刪除時(shí)纸肉,將所有未擁有的文件從系統(tǒng)中刪除溺欧。另一種解決方法是將未擁有的文件手動(dòng)分配給不同的用戶。根用戶可以使用 find / -nouser -o -nogroup 命令查找所有未擁有的文件和目錄柏肪。
從命令行設(shè)置密碼
passwd username命令設(shè)置初始密碼或更改用戶名的現(xiàn)有密碼姐刁。
root用戶可以將密碼設(shè)置為任意值。如果密碼不符合推薦的最低標(biāo)準(zhǔn)烦味,會(huì)顯示一條消息聂使,但隨后會(huì)提示重新輸入新的密碼。
[root@host ~]# passwd user01
Changing password for user user01.
New password: redhat
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word Retype new password: redhat
passwd: all authentication tokens updated successfully.
[root@host ~]#
普通用戶必須選擇一個(gè)至少8個(gè)字符以上的密碼谬俄,而且也不能為弱密碼柏靶。
UID范圍
特定的UID號(hào)和數(shù)字范圍被Red Hat Enterprise Linux用于特定目的。
- UID 0總是被分配給超級(jí)用戶賬戶溃论,root屎蜓。
- UID 1-200是紅帽公司靜態(tài)分配給系統(tǒng)進(jìn)程的 "system users"范圍。
- UID 201-999是系統(tǒng)進(jìn)程所使用的 "system users "范圍钥勋,這些用戶不擁有文件系統(tǒng)中的文件梆靖。它們通常是在安裝需要它們的軟件時(shí)從可用池中動(dòng)態(tài)分配的控汉。程序以這些 "非特權(quán) "系統(tǒng)用戶的身份運(yùn)行笔诵,以限制他們只訪問他們所需要的資源來運(yùn)作返吻。
- UID 1000+是可以分配給普通用戶的范圍。
管理本地用戶組
目標(biāo)
完成本節(jié)內(nèi)容后乎婿,學(xué)生能夠創(chuàng)建测僵、修改和刪除本地用戶組。
管理本地用戶組
在用戶被添加到該組之前谢翎,必須有一個(gè)組存在捍靠。有幾個(gè)命令行工具可以用來管理本地組賬戶。
從命令行創(chuàng)建組
- groupadd命令可以創(chuàng)建組森逮,在沒有選項(xiàng)的情況下榨婆,使用/etc/login.defs文件中指定的下一個(gè)可用的GID來創(chuàng)建組。
- 選項(xiàng) -g 指定了要使用的組的特定 GID褒侧。
[user01@host ~]$ sudo groupadd -g 10000 group01
[user01@host ~]$ tail /etc/group
...output omitted...
group01:x:10000:
選項(xiàng) -r從/etc/login.defs文件中列出的有效系統(tǒng)GID范圍內(nèi)的GID創(chuàng)建一個(gè)系統(tǒng)組良风。在 / etc/login.defs 中的 SYS_GID_MIN 和 SYS_GID_MAX 配置項(xiàng)定義了系統(tǒng) GID 的范圍。
[user01@host ~]$ sudo groupadd -r group02
[user01@host ~]$ tail /etc/group
...output omitted...
group01:x:10000:
group02:x:988:
從命令行修改現(xiàn)有的組
groupmod 命令可以改變現(xiàn)有組的屬性闷供。選項(xiàng) -n 為組指定一個(gè)新的名稱烟央。
[user01@host ~]$ sudo groupmod -n group0022 group02
[user01@host ~]$ tail /etc/group
...output omitted...
group0022:x:988:
注意,組名從group02更新為group0022歪脏。
選項(xiàng)-g指定了一個(gè)新的GID疑俭。
[user01@host ~]$ sudo groupmod -g 20000 group0022
[user01@host ~]$ tail /etc/group
...output omitted...
group0022:x:20000:
注意,GID由988更新為20000婿失。
從命令行中刪除組
groupdel命令刪除組钞艇。
[user01@host ~]$ sudo groupdel group0022
從命令行更改組成員
通過用戶管理來控制組的成員資格。使用 usermod -g 命令來改變用戶的主組豪硅。
[user01@host ~]$ id user02
uid=1006(user02) gid=1008(user02) groups=1008(user02)
[user01@host ~]$ sudo usermod -g group01 user02
[user01@host ~]$ id user02
uid=1006(user02) gid=10000(group01) groups=10000(group01)
使用 usermod -aG 命令將用戶添加到補(bǔ)充組中哩照。
[user01@host ~]$ id user03
uid=1007(user03) gid=1009(user03) groups=1009(user03)
[user01@host ~]$ sudo usermod -aG group01 user03
[user01@host ~]$ id user03
uid=1007(user03) gid=1009(user03) groups=1009(user03),10000(group01)
管理用戶密碼
目標(biāo)
完成本節(jié)內(nèi)容后,你能夠?yàn)橛脩粼O(shè)置密碼管理策略舟误,并手動(dòng)鎖定和解鎖用戶賬戶葡秒。
影子密碼和密碼策略
曾幾何時(shí),加密的密碼被存儲(chǔ)在可讀的/etc/passwd文件中嵌溢。這被認(rèn)為是相當(dāng)安全的眯牧,直到字典攻擊加密密碼變得普遍。那時(shí)候赖草,加密密碼被轉(zhuǎn)移到一個(gè)單獨(dú)的/etc/shadow文件中学少,這個(gè)文件只有root才能讀取。這個(gè)新文件還允許密碼老化和過期功能的實(shí)現(xiàn)秧骑。
像/etc/passwd一樣版确,每個(gè)用戶在/etc/shadow文件中都有一行扣囊。下圖是/etc/shadow文件中的示例行,其中有九個(gè)冒號(hào)分隔的字段绒疗。
user03: $6$CSsX...output omitted...: 17933: 0: 99999: 7: 2: 18113:
- 該密碼所屬賬戶的用戶名侵歇。
- 用戶的加密密碼。加密密碼的格式將在本節(jié)后面討論吓蘑。
- 上次修改密碼的日期惕虑。這是自1970-01-01-01起,以天數(shù)為單位磨镶,以UTC時(shí)區(qū)計(jì)算溃蔫。
- 自上次修改密碼后,用戶再次修改密碼的最低天數(shù)琳猫。
- 在密碼過期前伟叛,不更改密碼的最大天數(shù)∑晟空的字段表示自上次修改后的時(shí)間不會(huì)過期统刮。
- 警告期。當(dāng)用戶在截止日期前的這個(gè)天數(shù)登錄時(shí)雹锣,將被警告密碼過期网沾。
- 閑置期。一旦密碼過期蕊爵,在這多少天內(nèi)仍會(huì)接受登錄辉哥。過了這個(gè)期限后,賬號(hào)將被鎖定攒射。
- 密碼過期的日期醋旦。這是以1970-01-01-01起的天數(shù)為單位,以UTC時(shí)區(qū)計(jì)算会放∷瞧耄空字段意味著它不會(huì)在某一特定日期過期。
- 最后一個(gè)字段通常是空的咧最,留待以后使用捂人。
加密密碼的格式
加密密碼字段存儲(chǔ)三個(gè)信息:使用的散列算法、鹽和加密的散列矢沿。每條信息都用$符號(hào)來分隔滥搭。
$ 6$ CSsXcYG1L/4ZfHr/$ 2W6evvJahUfzfHpc9X.45Jc6H30E...output omitted...
- 這個(gè)密碼使用的散列算法。數(shù)字6表示它是SHA-512散列算法捣鲸,這在Red Hat Enterprise Linux 8中是默認(rèn)的瑟匆。
- 用來加密密碼的鹽。這原本是隨機(jī)選擇的栽惶。
- 用戶密碼的加密哈希值愁溜。將鹽和未加密的密碼結(jié)合起來并加密疾嗅,生成密碼的加密散列。
使用鹽可以防止兩個(gè)密碼相同的用戶在/etc/shadow文件中出現(xiàn)相同的條目冕象。例如代承,即使user01和user02都使用redhat作為他們的密碼,如果他們在/etc/shadow文件中的加密密碼的鹽值不同交惯,那么他們在/etc/shadow中的加密密碼也會(huì)不同次泽。
密碼驗(yàn)證
當(dāng)用戶嘗試登錄時(shí),系統(tǒng)會(huì)在/etc/shadow中查找該用戶的條目席爽,將該用戶的鹽和輸入的未加密密碼結(jié)合起來,并使用指定的散列算法進(jìn)行加密啊片。如果結(jié)果與加密后的散列算法匹配只锻,說明用戶輸入的密碼是正確的。如果結(jié)果與加密的散列算法不匹配紫谷,則說明用戶輸入了錯(cuò)誤的密碼齐饮,登錄嘗試失敗。這種方法允許系統(tǒng)判斷用戶是否輸入了正確的密碼笤昨,而不會(huì)將該密碼存儲(chǔ)在可用于登錄的形式中祖驱。
配置密碼過期
下圖是相關(guān)的密碼時(shí)效參數(shù),可以使用chage命令調(diào)整密碼時(shí)效策略的相關(guān)參數(shù)瞒窒。
[user01@host ~]$ sudo chage -m 0 -M 90 -W 7 -I 14 user03
前面的chage命令分別使用-m捺僻、-M、-M崇裁、-W和-I選項(xiàng)來設(shè)置用戶密碼的最小年齡匕坯、最大年齡、警告期和不活躍期拔稳。
chage -d 0 user03命令強(qiáng)制user03用戶在下次登錄時(shí)更新密碼葛峻。
chage -l user03命令顯示user03的密碼老化信息。
chage -E 2019-08-05 user03 命令會(huì)導(dǎo)致 user03 用戶的賬戶在 2019-08-05 日過期(格式為 YYYY-MM-DD)巴比。
日期命令可以用來計(jì)算未來的日期术奖。-u選項(xiàng)報(bào)告的時(shí)間單位是UTC。
[user01@host ~]$ date -d "+45 days" -u
Thu May 23 17:01:20 UTC 2019
編輯/etc/login.defs文件中的密碼過期配置項(xiàng)轻绞,設(shè)置默認(rèn)的密碼過期策略采记。PASS_MAX_DAYS 設(shè)置密碼的默認(rèn)最大年齡。PASS_MIN_DAYS 設(shè)置密碼的默認(rèn)最小年齡铲球。PASS_WARN_AGE 設(shè)置密碼的默認(rèn)警告期挺庞。默認(rèn)密碼時(shí)效策略的任何更改都只對新用戶有效。現(xiàn)有用戶將繼續(xù)使用舊的密碼時(shí)效設(shè)置稼病,而不是新的密碼時(shí)效設(shè)置选侨。
限制進(jìn)入
你可以使用chage命令來設(shè)置賬戶的到期日期掖鱼。當(dāng)?shù)竭_(dá)該日期后,用戶不能交互式地登錄系統(tǒng)援制。usermod命令可以用-L選項(xiàng)鎖定賬戶戏挡。
user01@host ~]$ sudo usermod -L user03
[user01@host ~]$ su - user03
Password: redhat
su: Authentication failure
如果用戶離開公司,管理員可以通過一條usermod命令鎖定和過期晨仑。日期必須以1970-01-01-01-01以來的天數(shù)褐墅,或以YYY-MM-DD格式給出。
[user01@host ~]$ sudo usermod -L -e 2019-10-05 user03
前面的 usermod 命令使用 -e 選項(xiàng)來設(shè)置用戶賬戶的到期日洪己。而 -L 選項(xiàng)則鎖定了用戶的密碼妥凳。
鎖定賬戶可以防止用戶用密碼驗(yàn)證系統(tǒng)的身份驗(yàn)證。這是推薦的防止已經(jīng)離開公司的員工訪問賬戶的方法答捕。如果該員工回來了逝钥,以后可以用usermod -U來解鎖該賬戶。如果賬戶也是過期的拱镐,一定要同時(shí)更改過期日期艘款。
nologin Shell
nologin shell作為非交互式登錄系統(tǒng)的用戶賬號(hào)的替代shell。從安全的角度來看沃琅,當(dāng)用戶帳號(hào)所服務(wù)的職責(zé)不需要用戶登錄系統(tǒng)時(shí)哗咆,禁止用戶帳號(hào)登錄系統(tǒng)是明智的做法。例如益眉,一個(gè)郵件服務(wù)器可能需要一個(gè)賬戶來存儲(chǔ)郵件晌柬,并需要一個(gè)密碼,讓用戶通過郵件客戶端進(jìn)行身份驗(yàn)證呜叫,以獲取郵件空繁。該用戶不需要直接登錄系統(tǒng)。
針對這種情況朱庆,常見的解決辦法是將用戶的登錄 shell設(shè)置為/sbin/nologin盛泡。如果用戶試圖直接登錄系統(tǒng),nologin shell會(huì)關(guān)閉連接娱颊。
[user01@host ~]$ usermod -s /sbin/nologin user03
[user01@host ~]$ su - user03
Last login: Wed Feb 6 17:03:06 IST 2019 on pts/0 This account is currently not available.
總結(jié)
- 用戶賬戶主要有三種類型:超級(jí)用戶傲诵、系統(tǒng)用戶和普通用戶。
- 一個(gè)用戶必須有一個(gè)主組箱硕,可以是一個(gè)或多個(gè)補(bǔ)充組的成員拴竹。
- 包含用戶和組信息的三個(gè)關(guān)鍵文件是/etc/passwd、/etc/group和/etc/shadow剧罩。
- su和sudo命令可以作為超級(jí)用戶來運(yùn)行命令栓拜。
- useradd、usermod和userdel命令可以用來管理用戶。
- groupadd幕与、groupmod和groupdel命令可以用來管理組挑势。
- chage 命令可用于配置和查看用戶的密碼過期設(shè)置。