Linux賬戶與許可權管理

程式設計師9526發表於2020-12-05
Liunx基於使用者身份對資源訪問進行控制

使用者賬戶

超級使用者、普通使用者、程式使用者
超級使用者(root),uid,gid=0,超級使用者是系統管理員,具備系統最高許可權
程式使用者(每個程式在建立時會自動建立一個程式使用者),uid,gid=1-999,一般這個使用者只在維護這個程式時才會被使用,一般也是不允許此使用者使用賬號密碼登入到系統中去的
普通使用者(系統賬戶,命令建立),uid,gid=1000+,一般的普通使用者的許可權是有限的,需要讓他具備管理員許可權的話,後面會有一個知識點叫sudo,提權。

舉例
cat /etc/passwd (/etc/passwd存放使用者賬戶的檔案)
第一行 root:x (x表示無密碼)
useradd zhangsan 建立一個張三的使用者
cat /etc/passwd (檢視)
zhangsan❌1001:1001::/home/zhangsan:/bin/bash(最後一行表明命令建立的普通使用者zhangsan)
userdel -r zhangsan 刪除zhangsan使用者

組賬號(使用者的二個組)
基本組(私有組) 必須要有 驗證許可權針對私有組
附加組(公共組) 不必須有
[root@server1 ~]# id xwy
uid=1000(xwy)(uid 使用者id) gid=1000(xwy) 組=1000(xwy), (gid組id)10(wheel) (wheel管理員組)
UID和GID
UID(User IDentity,使用者標識號)
GID(Group IDentify,組標識號)

使用者賬戶檔案/etc/passwd
儲存使用者名稱稱、宿主目錄、登入Shell等基本資訊
檔案位置:/etc/passwd
每一行對應一個使用者的賬戶記錄
[root@localhost~]#head -2 /etc/passwd
root❌0:0:root:/root:/bin/bash 第一個root表示使用者名稱稱(可以修改)
第三個root表示宿主目錄/bin/bash登入Shell
在這裡插入圖片描述
[root@server1 ~]# usermod -l wangwu zhangsan 將zhangsan登入名稱改為wangwu
wangwu❌1002:1002::/home/zhangsan:/bin/bash 第一個使用者賬號已改變 現在wangwu生效
bin❌1:1:bin:/bin:/sbin/nologin(程式使用者)sbin/nologin 不可登入
使用者賬號檔案/etc/shadow
儲存使用者的密碼、賬戶有效期等資訊
檔案位置:/etc/shadow
每一行對應一個使用者的密碼記錄
[root@localhost~]#head -2 /etc/shadow
root:$1 55 H B 4 p b x 55HB4pbx 55HB4pbxacHqk4lZiHTZ9cw0ZJe8f0:14374:0:99999:7::: 9個欄位
第一欄位:使用者名稱(也被稱為登入名),在/etc/shadow中,使用者名稱和/etc/passwd是相同的,這樣就把passwd和shadow中用的使用者記錄聯絡在一起,這個欄位是非空的;
第二欄位:密碼(已被加鎖),這個字度是垂空的:
第三欄位:正次修改口令的時間,這個時間是從1970年01月01日算起到最近一次修改口令的時間間隔(天數)。
第四欄位:兩次修改口令間隔最少的夫數;如果這個欄位的值為空,帳號水久可用;
第五欄位:兩次修改口令間隔最多的天數;如篡這個欄位的值為空,帳號永久可用;
第六字度:挺前多心天警告使用者口令將過期:如果這個欄位的值為空。帳號永久可用:
第七欄位:在口令過期之後多少天禁用此使用者;如果這個欄位的值為空,帳號永久可用;
第八欄位:使用者過期日期;此欄位指定了使用者作費的天數(從1970年的1月1日開始的天數),如果這個欄位的值為空,賬戶永久可用
第九欄位:保留欄位,目前為空,以備將來發展之用;
[root@server1 ~]# usermod --help
用法:usermod [選項] 登入

選項:
-c, --comment 註釋 GECOS 欄位的新值
-d, --home HOME_DIR 使用者的新主目錄
-e, --expiredate EXPIRE_DATE 設定帳戶過期的日期為 EXPIRE_DATE
-g, --gid GROUP 強制使用 GROUP 為新主組
-G, --groups GROUPS 新的附加組列表 GROUPS
-a, --append GROUP 將使用者追加至上邊 -G 中提到的附加組中,
並不從其它組中刪除此使用者
-h, --help 顯示此幫助資訊並推出
-l, --login LOGIN 新的登入名稱
-L, --lock 鎖定使用者帳號
-m, --move-home 將家目錄內容移至新位置 (僅於 -d 一起使用)
-o, --non-unique 允許使用重複的(非唯一的) UID
-p, --password PASSWORD 將加密過的密碼 (PASSWORD) 設為新密碼
-R, --root CHROOT_DIR chroot 到的目錄
-s, --shell SHELL 該使用者帳號的新登入 shell
-u, --uid UID 使用者帳號的新 UID
-U, --unlock 解鎖使用者帳號
-Z, --selinux-user SEUSER 使用者賬戶的新 SELinux 使用者對映

bin:*:14374:0:99999:7:::
[root@localhost~]#tail -1 /etc/shadow
teacher: 1 1 1BT7teaYX$s2sr6uFUwKhtU.8/8VpzB1:14374:0:99999:7
新增使用者賬戶
useradd命令
useradd [選項]… 使用者名稱
常用選項
-u、-d、-e、-g、-G、-M、-s
1.查詢使用者賬戶
cat /etc/passwd 全部列出
head 【-5】 /etc/passwd 列出前5個 (省略的話,預設列出前10個)
tail 【-5】 /etc/passwd 列出後5個(省略的話,預設列出前10個)
2.查詢使用者密碼(密文)
cat /etc/shadow
head -5 /etc/shadow
tail -3 /etc/shadow
3.新增使用者
useradd -u 指定uid 使用者名稱
-d 指定宿主目錄
-e 指定賬戶失效時間
-g 指定使用者基本組
-G 指定使用者附加組
-M 不建立宿主目錄
-s 指定使用者登入shell
舉例 useradd -u 1010 liming 指定uid
tail/etc/passwd 檢視
mkdir /chenli 建立一個目錄
useradd -d /chenli(宿主目錄) chenli (使用者名稱稱 )指定宿主目錄
useradd -e 2020-09-01 yy(yy使用者名稱稱)指定賬戶失效時間
cat /etc/passwd 全部列出 是否有yy生成
cat /etc/shadow 檢視失效時間是否生成
groupadd sk 建立組sk
groupadd st 建立組st
useradd -g sk -G st sky 建立sky使用者指向基本組(sk基本組 st附加組)
id sky 檢視用是否在組裡

useradd -M -s /sbin/nologin apache 不建立宿主目錄 指定使用者登入
cat /etc/passwd

4.設定使用者密碼
設定/更改使用者口令passwd
passwd命令
passwd[選項]… 使用者名稱
常用選項
-d、-l、-S、-u、
不指定使用者名稱時,修改當前賬號的密碼

    passwd           使用者名稱
    passwd  -d  清空密碼
            -l  鎖定使用者 
            -S  查詢使用者狀態
            -u  解鎖賬戶

echo “123456”| passwd --stdin 使用者名稱 給使用者初始密碼為123456
舉例 useradd ski 新建使用者ski 沒有設定密碼是出現兩個感嘆號 不可登入
passwd ski 建立使用者shi密碼
passwd -d ski 清空密碼 檢視密碼發現是空的 但是可以登入 管理員才能操作
passwd -l ski 鎖定ski使用者
passwd -S ski 檢視ski的狀態
tail -f /var/log/secure 檢視日誌 觀察使用者鎖定後登入報錯情況
echo “123456”| passwd --stdin lining 給使用者lining初始密碼為123456

5.修改使用者賬號屬性usermod
usermod -u 修改使用者uid 使用者名稱
-d 修改宿主目錄
-e 修改使用者賬戶失效時間
-s 指定使用者登入shell
-l 更改使用者登入名
-L 鎖定使用者
-U 解鎖使用者
-g 修改使用者所屬的基本組
-G 修改使用者所屬的附加組

6.刪除使用者
userdel 使用者名稱
userdel -r 刪除使用者時將宿主目錄也連帶刪除
新增組賬號groupadd
groupadd命令
groupadd[-g GID] 組賬號名
示例
[root@localhost~]#groupadd -g 1000 market 新增組賬號marke
[root@localhost~]#tail -1 /etc/group
market❌1000:
7.新增組賬戶
groupadd 使用者名稱
-g 指定組id
舉例
groupadd -g 1050 tx 建立指定tx組
useradd -g tx aa 將使用者aa基本組指定tx
tail /etc/passwd 發現不是同名組
8.查詢組賬戶
grep “使用者名稱”/etc/group
tail /etc/group 專門放賬戶的地方 快速找到使用者名稱
grep tx /etc/group 查詢tx組
9.刪除組賬戶(若組賬戶中存在使用者,則無法刪除,需要先刪除(或修改基本組)使用者在進行刪除)
groupdel 使用者名稱
舉例
groupdel tx 刪除組賬戶,因為存在使用者aa,無法移除 (基本組無法移除)把使用者移除在基本組中是不生效的
userdel aa 刪除使用者 或 usermod -g abd aa )(先建立一個abd的組)
groupdel tx

10.將使用者加入指定組中
gpasswd -a 使用者名稱 組名 (使用者 要已存在)

11.查詢賬戶資訊
id 使用者名稱 查詢使用者的uid和gid,所屬的基本組,附加組資訊 (id wenyu 注:wenyu為組名)
groups 使用者名稱 查詢使用者所屬的組
finger 使用者名稱 查詢使用者詳細資訊 (fing xuwenyu預設這條資訊是沒有的 需要利用RPM 安裝 cd /mnt/Packages/ rpm-ivh finger-0… 即可正常使用)
w 查詢當前主機使用者登入情況 (查詢登陸上系統的賬戶有哪些)
12.將使用者從指定組中移除
gpasswd -d 使用者名稱 組名
13.指定多個使用者同時加入某個組
gpasswd -M xxx1, xxx2, xxx3, xxx4 adm(組名)
舉例 gpasswd -M chenli,yy,sky,apache abd (chenli,yy,sky為三個已存在的組,abd為組名且是附加組,基本組建立的時候就存在)
grep abd /etc/group (查詢效果)
14.修改檔案的屬主和屬組
chown 屬主:屬組 檔案 修改該檔案的屬主和屬組
chown 屬主 只修改該檔案的屬主
chown :屬組 只修改改檔案的屬組
15.修改目錄/檔案的許可權|
chmod -R (遞迴) +/-x 目錄
755
檔案/目錄的許可權和歸屬
訪問許可權
讀取r:允許檢視檔案內容、顯示目標列表(cat檢視 ls顯示 get下載屬於讀的範疇)
寫入w 允許修改檔案內 容、允許在目錄中新建、移動、刪除檔案或子目錄
可執行x:允許允許程式、切換目錄
歸屬(所有權)
屬主:擁有該檔案或目錄的使用者賬戶
屬組:擁有該檔案或目錄的組賬戶
許可權分為三段
屬主:屬組:其它使用者
檔案屬性:‘d’-目錄 ‘-’-檔案 ‘l’-連結檔案 ‘b’一塊裝置檔案

檢視檔案/目錄的許可權和歸屬
[root@localhost ~]# ls -l install.log
-rw-r–r-- (檔案型別、許可權) 1 root root 34298 04-02 00:23 install.log
屬主、屬組
在這裡插入圖片描述
設定檔案和目錄的許可權chmod
chmod命令
chmod [ugoa] [±=] [rwx] 檔案或目錄

chmod nnn 檔案或目錄…
[ugoa] u、g、o、a分別表示屬主、屬組、其它使用者、所有使用者
[±=] 分別表示、增加、去除、設定許可權
[rwx] r、w、x分別表示讀、寫、執行許可權
[n n n ] 3位八進位制數

常用選項
-R:遞迴修改指定目錄下所有子項的許可權

例子./config 表示執行有x許可權 .表示在當前路徑下找到這個命令並執行
chomd 755 abc 將這個檔案許可權改為755(針對檔案)
mkdir a 新建目錄
cd a
vi a.txt
ls -lh 此時a的許可權為6 4 4
cd …
ls -lh 此時目錄a許可權為7 5 5
chmod -R 777 a
cd a
ls -lh 此時a為7 7 7

設定檔案和目錄的歸屬chown
chown命令
chown 屬主 檔案或目錄
chown :屬組 檔案或目錄
chown 屬主:屬組 檔案或目錄
常用選項
-R:遞迴修改指定目錄下所有檔案、子目錄的歸屬

舉例
mkdir aaa 新建目錄aaa
cd aaa
vi a1.txt
ls -lh 檢視到檔案a1的許可權為6 4 4
cd …
ls -lh 檢視到目錄aaa為7 5 5
cd aaa
ls -lh 檢視到屬主和屬組為root root
cd
cat /etc/passwd 檢視哪些賬戶
cat /etc/group 檢視屬組
將目錄aaa的屬主改為abc 將屬組改為abd
chown -R abc:abd aaa (屬組屬主要已存在)(因為物件是目錄,所有加-R)
ls -lh 發現aaa的屬主為abc 屬組為abd
cd aaa
ls -lh 發現a1的屬主和屬組繼承了aaa
cd …
chmod -R 777 aaa
ls -lh 發現aaa許可權變為777
cd aaa
ls -lh 發現a1許可權也變為777 注後面一段視訊暫時理解不了

許可權掩碼umask
umask作用
控制新建的檔案或者目錄的許可權
預設許可權去除umask的許可權為新建的檔案或者目錄的許可權
umask設定:umask 022 (最高許可權減去022,故對應的許可權為755)
umask檢視:umask
示例
將umask設為000,新建目錄或者檔案,檢視許可權 (此時對應的許可權為777)
將umask設為022,新建目錄或者檔案,在檢視許可權
touch 新建的檔案 預設不帶x許可權 即預設最高許可權為666 沒有執行許可權
mkdir 新建的目錄 預設最高許可權為777
[root@server1 ~]#umask 000
[root@server1 ~]#umask
0000
第一個0:(SetUID):普通使用者能改自己的密碼,但是對shadow檔案沒有許可權
suid是讓普通使用者可以以root或其他的使用者角色執行只有root或其他賬號才能執行的命令或程式,或程式命令對應本來沒有許可權操作的檔案等,suid為某一個命令設定特殊許可權,使用者為所有人

umask 000 設定許可權掩碼為000
touch a 新建檔案 a
mkdir aa 新建目錄 a1
ls -lh 發現a許可權為666 a1許可權為777

在這裡插入圖片描述
只能覆蓋 無法修改
使用者賬戶的初始配置檔案
檔案來源
新建使用者賬號時,從/etc/skel目錄中複製而來
主要的使用者初始配置檔案
~/.bash_profile
~/.bashrc
~/.bash_logout
環境變數是Shell緊密相關的,使用者登入系統後就啟動了一個Shell。對於Linux來說一般是bash,但也可以重新設定或切換到其他的Shell。對於UNIX,可能是CShelll。環境變數是通過Shell命令來設定的,設定好的環境變數又可以被所有當前使用者所執行的程式使用。對於bash這個Shell程式來說,可以通過變數名來訪問相應的環境變數,通過export來設定變數。下面通過幾個例項來說明。
1)etc /profile:此檔案為系統的每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行,並從etc/profile.d目錄的配置檔案中搜尋shell的設定
注:在這裡我們設定是為所有使用者可使用的全域性變數
2)/etc/bashrc:為每一個允許bash shell的使用者執行此檔案。當bash shell被開啟時,該檔案被讀取
3)~/.bash_profile:每個使用者都可以使用改檔案輸入專用於自己使用的shell資訊,當使用者登入時,改檔案僅僅執行一次!預設情況下,他設定一些變數,執行使用者的.bsahrc檔案。
注:~在LINUX下面是代表HOME這個變數的。
另外在不同的LINUX作業系統中,這個檔案可能是不同的,可能是~/.bash_profile
/.profile,其中的一種或幾種,如果存在幾種的話,那麼執行的順序便是:/.bash_profile、/.bash_login、~/.profile。
4)~/.bashrc:該檔案包含專用於你的bash shell的bash資訊,當登入時以及每次開啟新的shell時,改檔案被讀取。(注:這個檔案是.開頭的,所以在資料夾中被隱藏了)
那麼我們如何新增自己定義的環境變數呢?
用記事本開啟這個檔案,然後在裡面最後寫上:
xiaokang=kangkang
然後儲存,這樣每次開啟一個新的terminal的時候,我們這個變數就生效了。記住,如果你已經開啟一個terminal,然後你修改了這個檔案,那麼在這個terminal下是不會生效的。一般情況使用者最好在這裡進行修改,但是有時候會覆蓋父級的變數,比如PATH是ROOT設定的,但是如果你在這個檔案裡面寫了PATH=xx,那麼獎來所有的PHAT都成了xx了,所有我們應該在這個檔案中寫為:
PATH=$PATH:xx
這樣就把原來的和你自己的一起加上了。而且注意在LINUX系統下用:分割表示並列,而不是windo的;
3和4都是在使用者目錄下的,他們唯一的不同是:.bash_profile只能在登入的時候啟動一次。在我的Ubuntu裡面這個3檔案似乎沒有。

5)~/.bash_logout:當每次退出系統(退出bash shell)時,執行該檔案
另外,/etc/profile中設定的變數(全域性)的可以作用於任何使用者,而~/.bashrc等中設定的變數(區域性)只能繼承/etc/profile中的變數,他們是/”父子/”關係.
~/.bash_profile是互動式、login方式進入bash執行的
~/.bashrc是互動式non-login 方式進入bash執行的
通常二者設定大致相同,所以通常前者會呼叫後者。

好的,總結一下他們的執行方式:
當你登入並登入shell是bash時,bash首先執行/etc/profile檔案中的命令(如果該檔案存在),然後它順序尋找/.bash_profile,/.bash_login或/.profile檔案,並執行找到的第一個可讀檔案中的命令,當登入bash退出時,它將執行/.bash_logout檔案中的命令。
當啟動一個互動的bash時,它將執行~/.bashrc檔案中的命令(如果該檔案存在並且可讀).當非互動地啟動以執行一個shell指令碼時,bash將查詢bash_env環境變數,確定執行檔案的名稱

本章總結
使用者賬戶管理(useradd、passwd、usermod、userdel)
組賬號管理(groupadd、gpasswd、groupdel)
使用者賬號檔案與組賬號檔案
查詢賬號相關資訊的命令(groups、id、finder、w)
設定目錄與檔案許可權(chmod)
設定目錄與檔案歸屬(chown)

相關文章