今天是學習馬哥教育第四天,也是第一個博客作業,寫一篇關于用戶及權限管理的簡介型的博客文章,作文水品有限,所以寫出來有可能有病句或者意境有問題,請大家多多包涵。
首先,用戶及權限管理,需要從2方面入手來說,首先來說用戶管理。
何謂用戶,這是馬哥一上來就提到的問題,我簡單的理解,用戶其實就是一個人機交互的接口,人機交互的接口是shell ,但是登錄shell的時候都需要有用戶名和密碼登錄,否則系統是不會允許用戶登錄的,這一點和windows 不太一樣,在windows中,是允許空密碼登錄的,這一點Linux 比 Windows 安全,Linux 是不允許空密碼登錄的。那么我們怎樣去理解用戶這個概念呢,在人的角度上來說,我們每一個人都是一個用戶,我們去銀行辦卡,那個賬戶其實就是用戶,人類識別用戶很簡單,就是用戶名,也就是字符串來識別,我們每個人的銀行賬戶都是唯一的,都只代表了你一個人,不能代表其他人,當然,你可以辦很多的卡,但是每一個賬戶都是唯一的。對于計算機來說,它識別的最簡單的就是二進制,所以說,計算機識別的用戶是用戶的ID號,我們叫做UID,那么當我們登錄賬號和密碼的時候,在計算機中這個過程是怎樣的呢?首先當我們輸入完賬號和密碼之后,計算機會先找到/etc/passwd 其實這個文件就是一個簡單的數據庫文件,請看下面截圖:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
(圖1)
這個文件中的每一行可以看成是一條記錄,每一列其實使用:分割開了,就像是一個數據庫的二維表一樣,可以通過類似的查詢語句找到我們登錄的用戶名是否存在,如果不存在,系統會報出這樣一個錯誤:,意思是登錄不正確。
然后我們再看密碼驗證機制,其實密碼驗證機制還需要進一步的展開說明。
提到密碼,我們先來看一下密碼使用策略原則,必須滿足以下幾點
1、使用隨機密碼
2、最短長度不要低于8位
3、應該使用大寫字母、小寫字母、數字和標點符號4類字符中最少3類做為密碼
4、密碼需要定期更換
然后我們來講一下加密算法,打個比方來說,如果在計算機上設置好密碼之后,就把密碼明文存放在計算機的文件中或者是數據庫中的話,這樣是非常不安全的,因為如果其他的用戶登錄系統,如果具有高級管理員權限的話,就會造成密碼泄露,所以我們需要使用加密算法來加密保存用戶設置的密碼?,F在的加密算法主要分為以下3類
1、對稱加密 加密和解密使用同一個密碼,速度快,但是不安全
2、非對稱加密 加密和解密使用一對密鑰,密鑰分公鑰和私鑰,這樣比較安全,但是速度太慢,非對稱加密所用的時間是對稱加密的3個數量級
3、單向加密 只能加密不能解密,提取數據指紋(特征碼)
單向加密的特點是定長輸出,什么是定長輸出呢,就是說8位的密碼。20位的密碼,都會被當作加密內容定長加密,密文的長度都是一樣的
單向加密的特點還有就是雪崩效應或者說是蝴蝶效應,也就是說,你更改了密碼或者是文件當中的一小部分內容,那么密文的結果將會是翻天覆地的變化
linux 主要用到的單向加密分以下6種
1、md5 message digest 5是版本號,是128位定長
2、sha secure hash algorithm 安全的哈希加密算法 160位定長
3、sha224
4、sha256
5、sha384
6、sha512
不論是用哪一種加密算法加密出的密文,在加密之前都需要加上隨機數(salt)之后再加密,這是因為如果用戶能打開/etc/shadow 看到和自己一樣的密文,就能猜出其他用戶的密碼
這里我們提到了用戶的密碼存放位置 /etc/shadow 這個文件,其實用戶登錄的時候內核在驗證完/etc/passwd 之后,如果用戶名存在,那么就需要把你剛剛輸入的用戶名提取出來,到/etc/shadow 這個文件中去比對,請看下面的截圖:
root:$6$r2KRPIf/llqwEcCt$jW8yjiWYaEKqMEGuWctlOeqrM9yb6bSSBU57wcwWcpeMTbJNBrPExBYXFi1fkCWkU8pdOfuh51m/SuP5VFQ4r/::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
adm:*:16659:0:99999:7:::
lp:*:16659:0:99999:7:::
sync:*:16659:0:99999:7:::
shutdown:*:16659:0:99999:7:::
halt:*:16659:0:99999:7:::
mail:*:16659:0:99999:7:::
operator:*:16659:0:99999:7:::
games:*:16659:0:99999:7:::
ftp:*:16659:0:99999:7:::
nobody:*:16659:0:99999:7:::
avahi-autoipd:!!:17036::::::
systemd-bus-proxy:!!:17036::::::
systemd-network:!!:17036::::::
dbus:!!:17036::::::
polkitd:!!:17036::::::
tss:!!:17036::::::
postfix:!!:17036::::::
sshd:!!:17036::::::
test:$6$EgCCFvGO$.DVY878bWmEQdd/arosOmsFy/N1sPHLJ9ALGNxS4.ZLmlQ5bOPgexwEWsz/heVw6BseQJsxNh4oMdNrVu3.p/0:17041:0:99999:7:::
(圖2)
從這個文件中先查找出用戶名所對應的密碼。然后找到這個密碼的隨機數(salt)然后把隨機數和你剛剛輸入的密碼添加到一起做單項加密,把加密后的結果和這個文件中所對應的記錄的密碼做比對,如果正確,那么就允許用戶登錄,如果錯誤,就報錯
說了這么多,其實就是解釋了一個用戶登錄shell或者說使用linux系統的一個簡單的過程而已,下面來講一下linux是怎樣對用戶進行管理的。
首先,我們明白一個道理 就是linux系統的用戶管理有這樣一個映射關系
用戶——–用戶組(角色)———-權限
多對多 多對多
我們每一個用戶都是一個獨立的個體,所以我們每一個用戶都有自己獨立的權限,但是有時候有這樣或者那樣的需求,比如說我們想讓tom和jerry具有相同的訪問某一個目錄的權限,如果不使用用戶組(角色)的話,我們需要分別給tom 設置好權限,在給jerry設置好權限,但是如果有用戶組的概念的話,我們可以讓tom 和jerry所屬為同一個用戶組,我們給這個用戶組某種權限,這樣tom和jerry就具有了相同的權限,這樣就可以方便的去訪問相應的目錄了,所以說,用戶組(角色)的作用就是方便我們管理不同用戶的相同的權限。
我們來單獨看用戶的管理,linux中把用戶分為管理員用戶和普通用戶,普通用戶又可以分為系統用戶和登錄用戶,用一個圖這樣表示:
-
管理員用戶 root UID 0
普通用戶 UID 1-60000
系統用戶 非登錄用戶 對于CentOS7 1-999 CentOS6 1-499
登錄用戶 CentOS7 1000-60000 CentOS6 500-60000
然后我們來說用戶組,用戶組我們可以理解成程序的角色,也就是用戶的容器,用戶組如果從靜態的角度來分,和上面的用戶分類是一樣的
組類別劃分1
管理員用戶組 root UID 0
普通用戶組 UID 1-60000
系統用戶組 非登錄用戶 對于CentOS7 1-999 CentOS6 1-499
登錄用戶組 CentOS7 1000-60000 CentOS6 500-60000
組類別劃分2
用戶的主組,基本組
用戶的附加組
組類別劃分3
用戶的私有組 組名同用戶名且包含一個用戶
用戶的公共組 組內可以包含多個用戶
說完上述2個概念之后,我們來詳細說明/etc/passwd 中的內容,我們可以使用man 5 passwd 命令來查詢passwd中的詳細信息
/etc/passwd:用戶的信息庫文件(圖1)
name:password:UID:GID:GECOS:directory:shell
UID:用戶ID
GID:用戶所屬的主組的ID號
GECOS:用戶的注釋信息
directory:用戶的家目錄
shell:用戶的默認shell
/etc/shadow:用戶密碼文件(圖2)
用戶名:加密的密碼:最近一次修改密碼的時間:密碼的最短使用期限:密碼的最長使用期限:密碼警告期限:賬戶過期期限:保留字段
用一幅圖來描述一下各個期限的范圍
/etc/group 組信息庫
group_name:password:GID:user_list
user_list 改組的用戶成員:以此組為附加組的用戶列表
下面具體的講解Linux用戶和組管理的各種命令
1、groupadd命令 創建組命令
groupadd [選項] group
有2個選項,一個是
-g GID 手動指定GID 默認如果不指定的話,是上一個組的GID號加1
-r 創建系統組
介紹一下安全上下文的概念,任何一個進程,都要以發起者的身份運行
比如說,進程訪問文件時,對文件的訪問權限,取決于發起此進程的用戶的權限。
例如:cat /etc/shadow 如果以管理員的身份運行這個命令的時候,那么訪問這個文件的權限就要以管理員的身份進行訪問,也就是先要查詢這個文件的屬主 屬組 和其他權限是什么,如果說這個文件的屬主和發起進程,(運行命令)的用戶一樣,那么就執行屬主的權限,如果沒有,那么就要看文件的屬組中有沒有進程發起者這個用戶,如果有,就執行屬組權限,否則最后就執行其他權限。
至于說系統用戶,就是為了能夠讓那些后臺進程或服務類進程以非管理員的身份運行,通常需要為此任務創建多個普通用戶,這類用戶不用登陸系統,這類用戶就叫做系統用戶。
2、刪除組命令 groupdel 命令
groupdel [選項] GROUP
3、修改組屬性命令 groupmod 命令
groupmod [選項] GROUP
-g GID :修改GID 原組名
-n new_name 原組名
4、useradd命令:創建用戶
useradd [選項] 登錄名
-u, –uid UID:指定UID;
-g, –gid GROUP:指定基本組ID,此組得事先存在;
-G, –groups GROUP1[,GROUP2,…[,GROUPN]]]:指明用戶所屬的附加組,多個組之間用逗號分隔;
-c, –comment COMMENT:指明注釋信息;
-d, –home HOME_DIR:以指定的路徑為用戶的家目錄;通過復制/etc/skel此目錄并重命名實現;指定的家目錄路徑如果事先存在,則不會為用戶復制環境配置文件;
-s, –shell SHELL:指定用戶的默認shell,可用的所有shell列表存儲在/etc/shells文件中;
-r, –system:創建系統用戶;
注意:創建用戶時的諸多默認設定配置文件為/etc/login.defs
useradd -D:顯示創建用戶的默認配置;
useradd -D 選項: 修改默認選項的值;
修改的結果保存于/etc/default/useradd文件中;
5、usermod命令:修改用戶屬性
usermod [選項] 登錄
-u, –uid UID:修改用戶的ID為此處指定的新UID;
-g, –gid GROUP:修改用戶所屬的基本組;
-G, –groups GROUP1[,GROUP2,…[,GROUPN]]]:修改用戶所屬的附加組;原來的附加組會被覆蓋;
-a, –append:與-G一同使用,用于為用戶追加新的附加組;
-c, –comment COMMENT:修改注釋信息;
-d, –home HOME_DIR:修改用戶的家目錄;用戶原有的文件不會被轉移至新位置;
-m, –move-home:只能與-d選項一同使用,用于將原來的家目錄移動為新的家目錄;
-l, –login NEW_LOGIN:修改用戶名;
-s, –shell SHELL:修改用戶的默認shell;
-L, –lock:鎖定用戶密碼;即在用戶原來的密碼字符串之前添加一個"!";
-U, –unlock:解鎖用戶的密碼;
6、userdel命令:刪除用戶
userdel [選項] 登錄
-r:刪除用戶時一并刪除其家目錄;
7、passwd命令:
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [–stdin] [username]
(1) passwd:修改用戶自己的密碼;
(2) passwd USERNAME:修改指定用戶的密碼,但僅root有此權限;
-l, -u:鎖定和解鎖用戶;
-d:清除用戶密碼串;
-e DATE: 用戶賬戶過期期限,日期;
-i DAYS:非活動期限,寬限期;
-n DAYS:密碼的最短使用期限;
-x DAYS:密碼的最長使用期限;
-w DAYS:警告期限;
不懂去看那副圖
–stdin:
echo "PASSWORD" | passwd –stdin USERNAME
8、gpasswd命令:
組密碼文件:/etc/gshadow
gpasswd [選項] group
-a USERNAME:向組中添加用戶
-d USERNAME:從組中移除用戶
9、newgrp命令:臨時切換指定的組為基本組;
newgrp [-] [group]
-: 會模擬用戶重新登錄以實現重新初始化其工作環境;
10、chage命令:更改用戶密碼過期信息
chage [選項] 登錄名
-d:–lastday 修改最近一次修改密碼的時間 是距離1970.1.1的Days天數
-E:–expiredate EXPIRE_DATE 賬戶過期日期 EXPIRE_DATE 設置為 -1 會移除賬戶的過期日期。
-W:–warndays WARN_DAYS 警告日期天數
-m:–mindays MIN_DAYS 密碼最小使用的天數 在密碼更改之間的最小天數設置為 MIN_DAYS。此字段中的 0 值表示用戶可以在任何時間更改其密碼。
-M:–maxdays MAX_DAYS 密碼最大最長使用的天數 MAX_DAYS 設置為 -1 會移除密碼有效性檢查。
11、id命令:顯示用戶的真和有效ID;
id [OPTION]… [USER]
-u: 僅顯示有效的UID;
-g: 僅顯示用戶的基本組ID;
-G:僅顯示用戶所屬的所有組的ID;
-n: 顯示名字而非ID;
12、su命令:switch user
登錄式切換:會通過讀取目標用戶的配置文件來重新初始化
su – USERNAME
su -l USERNAME
非登錄式切換:不會讀取目標用戶的配置文件進行初始化
su USERNAME
注意:管理員可無密碼切換至其它任何用戶;
-c 'COMMAND':僅以指定用戶的身份運行此處指定的命令;
其他需要了解的命令:
其它幾個命令:chsh, chfn, finger, whoami, pwck, grpck
權限管理:
ls -l
rwxrwxrwx:
左三位:定義user(owner)的權限
中三位:定義group的權限;
右三位:定義other的權限
進程安全上下文:
進程對文件的訪問權限應用模型:
進程的屬主與文件的屬主是否相同;如果相同,則應用屬主權限;
否則,則檢查進程的屬主是否屬于文件的屬組;如果是,則應用屬組權限;
否則,就只能應用other的權限;
權限:
r:readable, 讀
w:writable, 寫
x:excutable,執行
文件:
r:可獲取文件的數據;
w: 可修改文件的數據;
x:可將此文件運行為進程;
目錄:
r:可使用ls命令獲取其下的所有文件列表;
w: 可修改此目錄下的文件列表;即創建或刪除文件;
x: 可cd至此目錄中,且可使用ls -l來獲取所有文件的詳細屬性信息;
mode:rwxrwxrwx
ownership:user, group
權限組合機制:
— 000 0
–x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7
練習:rw-rw-r–, rwxrwxr-x, rwxr-x—, rw——, rwxr-xr-x
664, 640, 600, 775, 750, 755
權限管理命令:
chmod命令:
chmod [OPTION]… MODE[,MODE]… FILE…
chmod [OPTION]… OCTAL-MODE FILE…
chmod [OPTION]… –reference=RFILE FILE…
三類用戶:
u:屬主
g:屬組
o:其它
a: 所有
(1) chmod [OPTION]… MODE[,MODE]… FILE…
MODE表示法:
賦權表示法:直接操作一類用戶的所有權限位rwx;
u=
g=
o=
a=
授權表示法:直接操作一類用戶的一個權限位r,w,x;
u+, u-
g+, g-
o+, o-
a+, a-
(2) chmod [OPTION]… OCTAL-MODE FILE…
(3) chmod [OPTION]… –reference=RFILE FILE…
選項:
-R, –recursive:遞歸修改
注意:用戶僅能修改屬主為自己的那些文件的權限;
從屬關系管理命令:chown, chgrp
chown命令:
chown [OPTION]… [OWNER][:[GROUP]] FILE…
chown [OPTION]… –reference=RFILE FILE…
選項:
-R:遞歸修改
chgrp命令:
chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… –reference=RFILE FILE…
注意:僅管理員可修改文件的屬主和屬組;
思考:用戶對目錄有寫權限,但對目錄下的文件沒有寫權限時,能否修改此文件內容?能否刪除此文件?
模擬之;
umask:文件的權限反向掩碼,遮罩碼;
文件:
666-umask
目錄:
777-umask
注意:之所以文件用666去減,表示文件默認不能擁有執行權限;如果減得的結果中有執行權限,則需要將其加1;
umask: 023
666-023=644
777-023=754
umask命令:
umask:查看當前umask
umask MASK: 設置umask
注意:此類設定僅對當前shell進程有效;
練習:完成以下任務
1、新建系統組mariadb, 新建系統用戶mariadb, 屬于mariadb組,要求其沒有家目錄,且shell為/sbin/nologin;嘗試root切換至用戶,查看其命令提示符;
2、新建GID為5000的組mageedu,新建用戶gentoo,要求其家目錄為/users/gentoo,密碼同用戶名;
3、新建用戶fedora,其家目錄為/users/fedora,密碼同用戶名;
4、新建用戶www, 其家目錄為/users/www;刪除www用戶,但保留其家目錄;
5、為用戶gentoo和fedora新增附加組mageedu;
6、復制目錄/var/log至/tmp/目錄,修改/tmp/log及其內部的所有文件的屬組為mageedu,并讓屬組對目錄本身擁有寫權限;
install命令:
install – copy files and set attributes
單源復制:
install [OPTION]… [-T] SOURCE DEST
多源復制:
install [OPTION]… SOURCE… DIRECTORY
install [OPTION]… -t DIRECTORY SOURCE…
創建目錄:
install [OPTION]… -d DIRECTORY…
常用選項:
-m, –mode=MODE:設定目標文件權限,默認為755;
-o, –owner=OWNER:設定目標文件屬主;
-g, –group=GROUP:設定目標文件屬組;
mktemp命令:
mktemp – create a temporary file or directory
mktemp [OPTION]… [TEMPLATE]
常用選項:
-d:創建臨時目錄
注意:mktemp會將創建的臨時文件名直接返回,因此,可直接通過命令引用保存起來;
原創文章,作者:luobo3692003,如若轉載,請注明出處:http://www.www58058.com/41896