1. 程式人生 > 其它 >許可權管理-使用者組管理

許可權管理-使用者組管理

許可權管理-使用者組管理

1.Linux使用者介紹

1 .1什麼是使用者

使用者對硬體資源的操作都需要通過作業系統,比如使用者要讀取硬碟中的一份關鍵資料
出於安全考慮,作業系統的開發者們都專門開發了安全機制,要使用作業系統必須事先輸入正確的使用者名稱與密碼
這便是使用者的由來
# 使用者是作業系統提供的一種安全機制
# 使用者是權力的化身

1.2為何要有使用者? 或者說為什麼要建立使用者?

#  劃分許可權,增強安全性
# 沒啟動一個程序都會與一個使用者關聯
# 程序->使用者->許可權(作用在檔案身上)
1、系統上的每一個程序,都需要一個特定的使用者執行,一個使用者擁有特定的許可權,該使用者執行的程序與使用者許可權一致
2、通常在公司是使用普通使用者管理伺服器,因為root許可權過大,容易出問題

1.3組的概念

# 手動建立使用者
主組:使用者本身所在的部門
附加組:為使用者新增的部門

使用者與組的關係:
一對一:一個使用者可以屬於一個組,使用者預設就在自己的主組下
一對多:一個使用者可以屬於多個組,使用者只有一個主組,但可以為使用者新增多個附加組
多對多:多個使用者可以屬於多個組

1.3如何檢視使用者相關資訊

id 檢視當前使用者
whoami 檢視當前使用者是誰
who 檢視所有登入的使用者

1.4Linux系統中使用者角色劃分

在Linux系統中的使用者分為管理員使用者與其他使用者
管理員使用者擁有最高許可權
其他使用者根據管理員的分配擁有不同的許可權
#需要強調的是:
對於Linux系統來說,使用者的角色是通過UID和GID識別的,;使用者系統賬號的名稱(rock)其實給管理員看的,Linux系統能夠識別的僅僅是UID和GID這種數字

1.4.1 UID 和 GID

1.UID(User Identify)使用者ID,唯一標識一個系統使用者的賬號,UID在系統中是唯一的。UID相當於身份證,使用者名稱相當於名字
2.GID(Group Identify)組ID,如果把一個作業系統當成一家公司,UID相當於這個人的員工號,GID相當於他的部門編號

centos7系統之前約定
uid: 0 由超級使用者或具備超級使用者許可權的使用者建立的使用者(貧民老百姓,大臣,布衣/bin/bash)
uid: 1~499 系統虛擬使用者:UID範圍1-499,存在滿足檔案或服務啟動的需要。一般不能登入,只是傀儡
uid: 500-65535 普通使用者

centos7系統約定:
0 超級管理員,最高許可權,有著極強的破壞能力
1~200 系統使用者,用來執行系統自帶的程序,預設已建立
201~999 系統使用者,用來執行安裝的程式,所以此類使用者無需登入系統
1000+ 普通使用者,正常可以登入系統的使用者,許可權比較小,能執行的任務有限

1.5 超級使用者

預設是root使用者,其UID和GID均為0。root使用者在每臺unix/linux作業系統中都是唯一且真實存在的,通過它可以登入系統,可以作業系統中任何檔案和命令,擁有最高的管理許可權。

舉個例子:
- 1、作業系統=》一個國家
- 2、root使用者=》國王
- 3、root使用者的家目錄=》皇宮

需要注意的是:
- 1、在生產環境中,一般會禁止root帳號通過SSH遠端連線伺服器(保護好皇帝),當然了,也會更改預設的SSH埠(保護好皇宮),以加強系統安全。
- 2、企業工作中:沒有特殊需求,應該儘量不要登入root使用者進行操作,應該在普通使用者下操作任務,然後用sudo管理普通使用者的許可權,可以細到每個命令許可權分配。
- 3、在linux系統中,uid為0的使用者就是超級使用者。但是通常不這麼做,如果確實有必要在某一操作上用到管理的許可權的話,那就用sudo單獨授權,也不要直接用uid為0的使用者,

1.6擴充套件閱讀

# Linux/Unix是一個多使用者、多工的作業系統
# windows是一個單使用者多工作業系統

多使用者不是說可以建立多個使用者,而是指一次可以登入多個使用者
多工指的是可以併發執行多個程序

回憶之前講過的linux發展史:
multics-》unix-》linux,所以linux是多使用者的,天然支援多個連機終端,連機終端在沒有網際網路的情況下是有意義的,多個人可以用不同的連機終端連到一臺機器/伺服器上使用,而有了網際網路之後,多個人可通過網路訪問伺服器,這個時候多使用者or單使用者的概念就不再那麼重要

2.使用者與組相關檔案

2.1 和使用者、組相關的檔案

/etc/passwd 
/etc/shadow
/etc/group
/etc/gshadow

/etc/passwd

root:x:0:0:root:/root:/bin/bash

第一欄位:使用者名稱(也被稱為登入名)
第二欄位:口令;在例子中我們看到的是一個x,其實密碼已被對映到/etc/shadow 檔案中;
第三欄位:UID ;請參看本文的UID的解說;
第四欄位:GID;請參看本文的GID的解說;
第五欄位:描述資訊,可選
第六欄位:使用者的家目錄所在位置;
第七欄位:使用者所用SHELL的型別

/etc/shadow

big_egon:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:


第一欄位:使用者名稱(也被稱為登入名),在/etc/shadow中,使用者名稱和/etc/passwd 是相同的,這樣就把passwd 和shadow中用的使用者記錄聯絡在一起;這個欄位是非空的;

第二欄位:密碼(已被加密),如果是有些使用者在這段是x,表示這個使用者不能登入到系統;這個欄位是非空的;

第三欄位:上次修改口令的時間;這個時間是從1970年01月01日算起到最近一次修改口令的時間間隔(天數),您可以通過passwd 來修改使用者的密碼,然後檢視/etc/shadow中此欄位的變化;

第四欄位:兩次修改口令間隔最少的天數;如果設定為0,則禁用此功能;也就是說使用者必須經過多少天才能修改其口令;此項功能用處不是太大;預設值是通過/etc/login.defs檔案定義中獲取,PASS_MIN_DAYS 中有定義;

第五欄位:兩次修改口令間隔最多的天數;這個能增強管理員管理使用者口令的時效性,應該說在增強了系統的安全性;如果是系統預設值,是在新增使用者時由/etc/login.defs檔案定義中獲取,在PASS_MAX_DAYS 中定義;

第六欄位:提前多少天警告使用者口令將過期;當用戶登入系統後,系統登入程式提醒使用者口令將要作廢;如果是系統預設值,是在新增使用者時由/etc/login.defs檔案定義中獲取,在PASS_WARN_AGE 中定義;

第七欄位:在口令過期之後多少天禁用此使用者;此欄位表示使用者口令作廢多少天后,系統會禁用此使用者,也就是說系統會不能再讓此使用者登入,也不會提示使用者過期,是完全禁用;

第八欄位:使用者過期日期;此欄位指定了使用者作廢的天數(從1970年的1月1日開始的天數),如果這個欄位的值為空,帳號永久可用; www.hackdig.com

第九欄位:保留欄位,目前為空,以備將來Linux發展之用;

如果更為詳細的,請用 man shadow來檢視幫助,您會得到更為詳盡的資料;

/etc/group:組檔案

/etc/gshadow:組密碼檔案

/etc/skel/ 使用者老家的模板

/home/xxx 使用者家目錄

/var/spool/mail/xxx 使用者郵箱檔案

3.使用者管理命令

3.1 使用者管理命令彙總

useradd  新增使用者
serdel 刪除使用者
usermod 修改使用者資訊

3.11 建立使用者

useradd user1 

3.12 檢視使用者

id user1
who 檢視所有登入的使用者資訊
shoami 檢視當前登入的使用者名稱

注意:當建立一個使用者時,如果沒有指定使用者的主組,將會建立一個同名的組作為使用者的主組。

3.13 刪除使用者

userdel user1  #刪除使用者user1,但不刪除使用者家目錄和mail
userdel -r user1 #徹底刪除

3.14 useradd命令詳解: 建立使用者的同時指定選項

1) 掌握useradd命令的功能:新增一個使用者。
2) 瞭解useradd命令的常用選項:
3) –u:指定使用者的UID
4) –g:指定使用者所屬的主群
–G:指定使用者所屬的附加群
5) –d:指定使用者的家目錄
6) –c:指定使用者的備註資訊
7) –s:指定使用者所用的shell
8) -e:修改過期時間
9) -M: 不建立家目錄
10) -r: 建立系統賬戶,uid處於系統使用者範圍內,預設就沒有家目錄

3.15 usermod 命令

同useradd引數基本一致,只不過useradd是新增,usermod是修改

-u     #指定要修改使用者的UID

-g #指定要修改使用者基本組

-a #將使用者新增到補充組。僅與-G選項一起使用

-G #指定要修改使用者附加組,使用逗號隔開多個附加組, 覆蓋原有的附加組

-d #指定要修改使用者家目錄

-c #指定要修改使用者註釋資訊

-s #指定要修改使用者的bash shell

其他選項
-m #將使用者主目錄的內容移動到新位置。如果當前主目錄不存在,則不會建立新的主目錄

-l #指定要修改使用者的登陸名

-L #指定要鎖定的使用者

-U #指定要解鎖的使用者

3.16 設定與修改密碼

passwd # 預設給當前使用者設定密碼
passwd 使用者名稱 # root使用者可以給自己以及所有其他使用者設定密碼,普通使用者只能設定自己的密碼
echo "密碼" | passwd --stdin 使用者名稱 # 非互動式

# 補充:可以利用系統內建變數生成隨機字串來充當密碼
# echo $RANDOM|md5sum|cut -c 1-10

擴充套件閱讀

useradd建立使用者時,對於未指定的選項(-u、-g等等),會以/etc/login.defs、/etc/default/useradd兩個配置檔案中的配置作為參照物

#配置檔案/etc/login.defs詳解
[root@egon ~]# grep -Ev "^#|^$" /etc/login.defs
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999 #密碼最大有效期
PASS_MIN_DAYS 0 #兩次修改密碼的最小間隔時間
PASS_MIN_LEN 5 #密碼最小長度,對於root無效
PASS_WARN_AGE 7 #密碼過期前多少天開始提示
UID_MIN 1000 #使用者ID的最小值
UID_MAX 60000 #使用者ID的最大值
SYS_UID_MIN 201 #系統使用者ID的最小值
SYS_UID_MAX 999 #系統使用者ID的最大值
GID_MIN 1000 #組ID的最小值
GID_MAX 60000 #組ID的最大值
SYS_GID_MIN 201 #系統使用者組ID的最小值
SYS_GID_MAX 999 #系統使用者組ID的最大值
CREATE_HOME yes #使用useradd的時候是可以建立使用者家目錄
UMASK 077 #建立家目錄時umask的預設控制權限
USERGROUPS_ENAB yes #刪除使用者的時候是否同時刪除使用者組
ENCRYPT_METHOD SHA512 #密碼加密規則

#配置檔案/etc/default/useradd詳解
[root@egon ~]# cat /etc/default/useradd
GROUP=100 #依賴於/etc/login.defs的USERGRUUPS_ENAB引數,如果為no,則在此處控制
HOME=/home #把使用者的家目錄建在/home中。
INACTIVE=-1 #是否啟用賬號過期停權,-1表示不啟用。
EXPIRE= #賬號終止日期,不設定表示不啟用。
SHELL=/bin/bash #新使用者預設所有的shell型別。
SKEL=/etc/skel #配置新使用者家目錄的預設檔案存放路徑。
CREATE_MAIL_SPOOL=yes #建立mail檔案。


當使用useradd建立使用者時,建立的使用者家目錄下會存在.bash_* 環境變數相關的檔案,這些環境變數檔案預設
/etc/skel目錄中拷貝。這個預設拷貝環境變數位置是由/etc/default/useradd配置檔案中定義的。


#故障案例,在當前使用者家目錄下執行了rm -rf .*命令,下次登入系統時出現-bash-4.1$,如何解決!
-bash-4.1$ cp -a /etc/skel/.bash* ./
-bash-4.1$ exit
[root@egon ~]# #重新連線即可恢復

4.組管理

4.1組管理命令管理彙總

groupadd
groupmod
groupdel
gpasswd 設定組密碼
newgrp 切換組

4.2建立組

groupadd gg1  建立基本組,不指定gid
groupadd -g 5555 gg2 建立基本組,指定gid為5555
group -r gg3 建立系統組,GID201-999

4.3 修改組

groupmod -g 1111 gg3   修改組GID
groupmod -n new_gg3 gg3 修改組名稱

4.4 刪除組

useradd rock1
group devops
usermod -G devops rock1

groupdel devops
#可以刪除附加組,主組無法刪除

4.5 組成員管理

對於使用者來說,組是分類的 1、一類是基本組或稱主組,使用者只能有一個基本組,建立時可通過-g指定,如未指定則建立一個預設的組(與使用者同名)

2、附加組,基本組不能滿足授權要求,建立附加組,將使用者加入該組,使用者可以屬於多個附加組,加入一個組後就擁有了該組的許可權

注意:gpasswd將使用者新增到組或從組中刪除,只針對已存在的使用者
[root@root ~]# gpasswd -a user07 it # 將某個使用者加入到某個組
[root@root ~]# gpasswd -M user02,user03,user04 it # 將多個使用者加入到it組
[root@root ~]# gpasswd -A lhf it # 指定lhf為組it的組長,除了root使用者外lhf使用者也可以採用第一條命令往it組裡新增成員
[root@root ~]# grep 'it' /etc/group # 檢視it組中的成員
it:x:505:user02,user03,user04
[root@root ~]# gpasswd -d user07 it # 刪除使用者usr07從it組

我們可以為組設定密碼,然後讓一些非組成員的使用者通過命令”newgrp 組”臨時切換到組內並輸入密碼的方式獲取使用者組的許可權和特性,如下

[root@localhost ~]# groupadd group1
[root@localhost ~]# gpasswd group1
正在修改 group1 組的密碼
新密碼:
請重新輸入新密碼:
[root@localhost ~]# touch /tmp/a.txt
[root@localhost ~]# ll /tmp/a.txt
-rw-r--r-- 1 root root 0 810 21:01 /tmp/a.txt
[root@localhost ~]# chown .group1 /tmp/a.txt
[root@localhost ~]# !ll
ll /tmp/a.txt
-rw-r--r-- 1 root group1 0 810 21:01 /tmp/a.txt
[root@localhost ~]# chmod g+w /tmp/a.txt
[root@localhost ~]# gpasswd group1

[root@localhost ~]# su - egon
上一次登入:一 810 21:01:46 CST 2020pts/0
[egon@localhost ~]$ echo 123 >> /tmp/a.txt # 此時沒有許可權
-bash: /tmp/a.txt: 許可權不夠
[egon@localhost ~]$ newgrp group1 # 臨時切換到組group1下,擁有其許可權
密碼:
[egon@localhost ~]$ echo 123 >> /tmp/a.txt
[egon@localhost ~]$ cat /tmp/a.txt
123

5. 手動建立使用者

5.1 /etc/passwd

vim /etc/passwd   #新加一行
tail -1 /etc/passwd
rock2:x:2013:5557::/home/rock2:/bin/bash

5.2 /etc/shadow

[root@aliyun ~]# openssl passwd -1 -salt 'i have a dream'
Password:
$1$i have a$jBGkkhpFu9WPSI1Nv.whT/


[root@aliyun ~]# vim /etc/shadow
[root@aliyun ~]# tail -1 /etc/shadow
egon:$1$i have a$jBGkkhpFu9WPSI1Nv.whT/:18303::::::

製作密碼

openssl passwd 手動生成密碼
引言:在Linux系統中我們要向手動生成一個密碼可以採用opensll passwd來生成一個密碼作為使用者賬號的密碼。Linux系統中的密碼存放在/etc/shadow檔案中,並且是以加密的方式存放的,根據加密方式的不同,所產生的加密後的密碼的位數也不同。

openssl passwd的作用是用來計算密碼hash的,目的是為了防止密碼以明文的形式出現。

語法格式: openssl passwd [option] passwd

openssl passwd常用的選項如下:

-1:表示採用的是MD5加密演算法。

-salt:指定salt值,不使用隨機產生的salt。在使用加密演算法進行加密時,即使密碼一樣,salt不一樣,所計算出來的hash值也不一樣,除非密碼一樣,salt值也一樣,計算出來的hash值才一樣。salt為8位元組的字串。

示例:

[tom@localhost ~]$ openssl passwd -1 -salt 'i have a dream' ##注意'i have a dream' 不是密碼而是密碼的鹽,注意密碼的鹽裡不要有中文
Password: ##這裡輸入的是密碼
$1$12345678$1qWiC4czIc07B4J8bPjfC0 ##這是生成的密文密碼



##將生成的密碼串,手動新增到/etc/shadow中就可用作使用者的登陸密碼了。

5.3 /etc/group

[root@aliyun ~]# vim /etc/group
[root@aliyun ~]# tail -1 /etc/group
rock2:x:2002:

5.4 /etc/gshadow

[root@aliyun ~]# vim /etc/gshadow
[root@aliyun ~]# tail -1 /etc/gshadow
rock2:!::

5.5 建立使用者家目錄,並用使用者老家的模板/etc/skel/ 裝修一下,注意許可權

[root@aliyun ~]# mkdir /home/egon
[root@aliyun ~]# cp -r /etc/skel/.[!.]* /home/rock2/
[root@aliyun ~]# chmod 700 /home/rock2/
[root@aliyun ~]# chown -R rock2.rock2 /home/rock2/

5.6 /var/spool/mail/xxx 使用者郵箱檔案

[root@aliyun ~]# touch /var/spool/mail/rock2
[root@aliyun ~]# chmod 660 !$
chmod 660 /var/spool/mail/rock2
[root@aliyun ~]# chown rock2.mail /var/spool/mail/rock2

測試賬號的登入

[root@aliyun ~]# ssh [email protected]

[email protected]'s password:

Last login: Mon Aug 10 22:20:51 2021 from 127.0.0.1

Welcome to Alibaba Cloud Elastic Compute Service !

[rock2@aliyun ~]$ whoami

rock2