Linux 用戶和用戶組管理 用戶工作環境PATH
Linux系統是一個多用戶多任務的分時操作系統,任何一個要使用系統資源的用戶,都必須首先向系統管理員申請一個賬號,然后以這個賬號的身份進入系統。
用戶的賬號一方面可以幫助系統管理員對使用系統的用戶進行跟蹤,並控制他們對系統資源的訪問;另一方面也可以幫助用戶組織文件,並為用戶提供安全性保護
每個用戶賬號都擁有一個唯一的用戶名和各自的口令。
用戶在登錄時鍵入正確的用戶名和口令后,就能夠進入系統和自己的主目錄。
實現用戶賬號的管理,
用戶賬號的添加、刪除與修改。
用戶口令的管理。
用戶組的管理。
一、用戶賬號的管理
用戶賬號的管理工作主要涉及到用戶賬號的添加、修改和刪除。
添加用戶賬號就是在系統中創建一個新賬號,然后為新賬號分配用戶號、用戶組、主目錄和登錄Shell等資源。剛添加的賬號是被鎖定的,無法使用。
1.useradd添加新的用戶賬號
語法:
useradd 選項 用戶名
-u指定UID -g指定主組 -G指定附屬組 -d指定家目錄 -s指定登錄后使用的shell
參數說明:
選項:
-c comment 指定一段注釋性描述。
-d 目錄 指定用戶主目錄,如果此目錄不存在,則同時使用-m選項,可以創建主目錄。
-g 用戶組 指定用戶所屬的用戶組。
-G 用戶組,用戶組 指定用戶所屬的附加組。
-s Shell文件 指定用戶的登錄Shell。
-u 用戶號 指定用戶的用戶號,如果同時有-o選項,則可以重復使用其他用戶的標識號。
用戶名:
指定新賬號的登錄名。
實例1.
# useradd –d /home/sam -m sam
此命令創建了一個用戶sam,
其中-d和-m選項用來為登錄名sam產生一個主目錄 /home/sam(/home為默認的用戶主目錄所在的父目錄)。
實例2.
# useradd -s /bin/sh -g group –G adm,root gem
此命令新建了一個用戶gem,
該用戶的登錄Shell是 /bin/sh,
它屬於group用戶組,
同時又屬於adm和root用戶組,
其中group用戶組是其主組。
這里可能新建組:#groupadd group及groupadd adm
增加用戶賬號就是在/etc/passwd文件中為新用戶增加一條記錄,
同時更新其他系統文件如/etc/shadow, /etc/group等。
2.userdel刪除帳號
如果一個用戶的賬號不再使用,可以從系統中刪除。
刪除用戶賬號就是要將/etc/passwd等系統文件中的該用戶記錄刪除,必要時還刪除用戶的主目錄。
刪除一個已有的用戶賬號使用userdel命令,
(1)語法
userdel 選項 用戶名
常用的選項是 -r,它的作用是把用戶的主目錄一起刪除。
(2)例如:
userdel -r sam
此命令刪除用戶sam在系統文件中 主要是/etc/passwd, /etc/shadow, /etc/group等的記錄,同時刪除用戶的主目錄。
3.usermod修改帳號 附屬組 id -s -d -g
修改用戶賬號就是根據實際情況更改用戶的有關屬性,如用戶號、主目錄、用戶組、登錄Shell等。
修改已有用戶的信息使用usermod命令,
(1)語法
usermod 選項 用戶名
常用的選項包括-c, -d, -m, -g, -G, -s, -u以及-o等,
這些選項的意義與useradd命令中的選項一樣,可以為用戶指定新的資源值。
另外,有些系統可以使用選項:-l 新用戶名
這個選項指定一個新的賬號,即將原來的用戶名改為新的用戶名。
(2)例如:
# usermod -s /bin/ksh -d /home/z –g developer sam
此命令將用戶sam的登錄Shell修改為ksh,
主目錄改為/home/z,用戶組改為developer。
1.修改附屬組:
usermod -G grp1,grp2 liu 用戶原來屬於的附屬組刪除,修改為grp1,grp2
usermod -a -G grp4 liu 增加附屬組grp3,原來的附屬組保持
2、修改用戶名:
usermod -l 新名字 舊名字
練習:
usermod -u 1070 -s /sbin/nologin -a -G grp3 user1
usermod -s /bin/bash user1
系統上的用戶,UID修改為1070,shell修改為/bin/nologin,新增加附屬組grp3,再將shell修改回/bin/bash
4、passwd用戶密碼的管理 設置密碼 清空密碼 鎖密碼
用戶管理的一項重要內容是用戶口令的管理。用戶賬號剛創建時沒有口令,但是被系統鎖定,無法使用,必須為其指定口令后才可以使用,即使是指定空口令。
指定和修改用戶口令的Shell命令是passwd。超級用戶可以為自己和其他用戶指定口令,普通用戶只能用它修改自己的口令。
(1)語法
passwd 選項 用戶名
可使用的選項:
-l 鎖定口令,即禁用賬號。
-u 口令解鎖。
-d 使賬號無口令。
-f 強迫用戶下次登錄時修改口令。
如果默認用戶名,則修改當前用戶的口令。
鎖用戶--- 即禁用用戶用戶的密碼管理可在增添用戶后修改。
方式一-- 鎖密碼
第2列:passwd -l user1 ——鎖定口令
passwd -u user1 ——解鎖口令
第3列:passwd -e 0 user1 ——重新設置口令
第5列:passwd -x 180(天數) user1 ——修改口令最長生命周期
第8列:useradd -e 20201001 user1 ——修改賬戶失效期,注意格式
usermod -e 20201001 user1
例如,假設當前用戶是sam,則下面的命令修改該用戶自己的口令:
$ passwd
Old password:******
New password:*******
Re-enter new password:*******
如果是超級用戶,可以用下列形式指定任何用戶的口令:
# passwd sam
New password:*******
Re-enter new password:*******
普通用戶修改自己的口令時,passwd命令會先詢問原口令,驗證后再要求用戶輸入兩遍新口令,如果兩次輸入的口令一致,則將這個口令指定給用戶;而超級用戶為用戶指定口令時,就不需要知道原口令。
清空口令
為用戶指定空口令時,執行下列形式的命令:
# passwd -d sam
此命令將用戶 sam 的口令刪除,這樣用戶 sam 下一次登錄時,系統就不再允許該用戶登錄了。
passwd 命令還可以用 -l(lock) 選項鎖定某一用戶,使其不能登錄,例如:
# passwd -l sam
二、用戶組的管理
每個用戶都有一個用戶組,系統可以對一個用戶組中的所有用戶進行集中管理。不同Linux 系統對用戶組的規定有所不同,如Linux下的用戶屬於與它同名的用戶組,這個用戶組在創建用戶時同時創建。
用戶組的管理涉及用戶組的添加、刪除和修改。組的增加、刪除和修改實際上就是對/etc/group文件的更新。
1、增加一個新的用戶組使用groupadd命令。
1.groupadd增加組
(1)語法
groupadd 選項 用戶組
可以使用的選項有:
-g GID 指定新用戶組的組標識號(GID)。
-o 一般與-g選項同時使用,表示新用戶組的GID可以與系統已有用戶組的GID相同。
(2)實例
# groupadd group1
此命令向系統中增加了一個新組group1,新組的組標識號是在當前已有的最大組標識號的基礎上加1。
實例2:
# groupadd -g 101 group2
此命令向系統中增加了一個新組group2,同時指定新組的組標識號是101。
2、如果要刪除一個已有的用戶組,使用groupdel命令,
2.groupdel刪除組
(1)語法
groupdel 用戶組
groupdel group1
此命令從系統中刪除組group1。
修改用戶組的屬性使用groupmod命令。
3.groupmod修改用戶屬性
(1)語法
groupmod 選項 用戶組
常用的選項有:
-g GID 為用戶組指定新的組標識號。
-o 與-g選項同時使用,用戶組的新GID可以與系統已有用戶組的GID相同。
-n新用戶組 將用戶組的名字改為新名字
(2)實例
# groupmod -g 102 group2
此命令將組group2的組標識號修改為102。
2
# groupmod –g 10000 -n group3 group2
此命令將組group2的標識號改為10000,組名修改為group3
3.如果一個用戶同時屬於多個用戶組,那么用戶可以在用戶組之間切換,以便具有其他用戶組的權限。
用戶可以在登錄后,使用命令newgrp切換到其他用戶組,這個命令的參數就是目的用戶組。例如:
$ newgrp root
這條命令將當前用戶切換到root用戶組,前提條件是root用戶組確實是該用戶的主組或附加組。類似於用戶賬號的管理,用戶組的管理也可以通過集成的系統管理工具來完成。
3.組管理
組分類
私有組 ---又稱主組,primary group
每個用戶必須屬於且只能屬於一個私有組
添加用戶時,若不做特殊指定,Linux系統將自動創建一個與用戶同名的組,作為用戶的私有組
一個私有組,可以同時是多個用戶的私有組
私有組不可刪
標准組 ---又稱附屬組
普通用於多用戶管理的組,用戶可以在、不在、或在多個標准組中
標准組可刪
注:一個組可以即是私有組,又是標准組
管理命令
groupadd zu11
vi /etc/group ---組配置文件
共四列: 組名:組密碼:組ID,即GID:標准組成員
gpasswd -a zhang zu11 ---用戶加入組
id zhang ---查看用戶的相關id、組信息
gpasswd -d zhang zu11 ---從組中刪除用戶
gpasswd -A zhang zu11 --- -A指定組的管理員,注:只有組管理員才有權給組中添加、刪除用戶
gpasswd -A zhang,lisi zu11 ---設置多個組的管理員
gpasswd -A root zu11 --- 組管理員的設置是替換式,則設置root后,原管理員被撤銷
usermod -G zu22 zhang --- 把用戶加入標准組中,但是以替換式操作的,即會從原有的標准組中退出
usermod -g zu11 zhang --- 更改用戶私有組
groupdel zu22 ---刪除組
用戶復雜命令
useradd -u 1100 -g zu11 -G zu22 -d /mnt/zs -s /bin/bash zhang
--- -u指定UID -g 指定私有組 -G 指定標准組 -d 指定家目錄 -s 指定登錄后使用的shell
注:這些參數,在usermod命令中大多都可使用
創建用戶后,會影響到的文件:/etc/passwd /etc/shadow /etc/group /home家目錄(環境變量配文件)
4.用戶組,實驗練習:
1、useradd -u 1050 user1 創建指定UID為1050的用戶user1,用戶的組是缺省的,組名和用戶名相同,組id和用戶id也相同。刪除用戶時,組也會一同刪除。
2、groupadd -g 1010 grp1 創建一個新的組
useradd -g grp1 user1 創建指定GID為1010的用戶user1,加入的組必須已經創建
3、useradd -G grp1 user1 創建指定附屬組grp1的用戶user1
4、groupadd -g 1012 grp2
groupadd -g 1013 grp3
useradd -g 1010 -G grp2,1013 user1 創建指定主組id為1010,附屬組為grp2,附屬組id1013的用戶user1
5、useradd -u 1040 -g 1010 -G grp2,grp3 user1 創建指定UID為1040、指定主組id為1010,附屬組為grp2,附屬組id1013的用戶user1
6、mkdir /user1
useradd -d /user1/myuser user1 創建指定家目錄為/user1/myuser的用戶user1
passwd
7、rm -rf /user1
useradd -d /user1/myuser user1 沒有user1目錄,創建指定家目錄為/user1/myuser的用戶user1能夠成功創建但遠程登錄后會在shell下
8、創建user1.將其使用的shell指定為/bin/sh或/sbin/nologin
useradd -s /bin/sh user1
9、綜合練習
在centos7上,執行下述命令,產生如顯示的結果:
#grep liuwei /etc/passwd
#liuwei:x:1030:1002:Liu Wei Xin:/app/home/liuwx:/sbin/nologin
#grep liuwei /etc/group
#dongfang:x:1008:liuwei
根據上述信息,推導出創建用戶liuwei的命令
groupadd -g 1008 dongfang
mkdir -p /app/home
useradd -u 1030 -c Liu\ Wei\ Xin -g 1002 -G 1008 -d /app/home/liuwx -s /sbin/nologin liuwei
三個系統文件
完成用戶管理的工作有許多種方法,但是每一種方法實際上都是對有關的系統文件進行修改。
與用戶和用戶組相關的信息都存放在一些系統文件中,
這些文件包括/etc/passwd, /etc/shadow, /etc/group等。
/etc/passwd文件是用戶管理工作涉及的最重要的一個文件。
Linux系統中的每個用戶都在/etc/passwd文件中有一個對應的記錄行,它記錄了這個用戶的一些基本屬性。
這個文件對所有用戶都是可讀的。
1.)cat /etc/passwd 用戶密碼 七個字段意義
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
從上面的例子我們可以看到,/etc/passwd中一行記錄對應着一個用戶,每行記錄又被冒號(:)分隔為7個字段
7個字段其格式和具體含義如下:
用戶名:口令:用戶標識號:組標識號:注釋性描述:主目錄:登錄Shell
sam:x:200:50:Sam san:/home/sam:/bin/sh
用:號隔開
cat /etc/passwd ——用戶信息
1、用戶
2、x,密碼列,由於Linux把密碼轉存到了另一個專用的密碼配置文件,所以用x填充
3、用戶id
4、主組id
5、用戶屬性列,如:電話、郵箱、地址,一般不填
6、用戶所在家目錄
7、用戶所使用的的shell版本
2.cat /etc/shadow 保存口令 用戶狀態 9個字段
登錄名:加密口令:最后一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標志
cat /etc/shadow保存口令信息用戶的狀態
root:Dnakfw28zf38w:8764:0:168:7:::
daemon:*::0:0::::
bin:*::0:0::::
sys:*::0:0::::
adm:*::0:0::::
uucp:*::0:0::::
nuucp:*::0:0::::
auth:*::0:0::::
cron:*::0:0::::
listen:*::0:0::::
lp:*::0:0::::
sam:EkdiSECLWPdSa:9740:0:0::::
9個字段
1:用戶名
*2: 加密后的口令,若包括非crypt3()結果的字符,如有! ? *等,則用戶不能用Linux口令登錄(用戶登錄系統有其它意義),被鎖定了。
*3: 最近一次改變密碼的日期。是網1970 1 1開始的天數。0表示下次登錄必須改變密碼( -e --expired) ,空表示密碼有效期的特性被禁用。
4:口令最短生命期,單位天,表示間隔幾天,才允許修改口令。0或空表示不設期限(-n --minimum)
*5: 口令最長生命周期,單位天,表示間隔幾天就要修改口令,但超過該期限,口令依然有效,但下次登錄就要求修改口令了。空值表示沒有最長生命周期,也沒有告警周期,也沒有非活動周期。若最長周期短語最小周期,則用戶不能修改口令(-x --maximum)
6: 告警期,單位天。表示在最大生命期之前的幾天,用戶收到口令將過期警告。0或空值表示無告警期。 (W --warning)
7:非活動期,單位天。口令超過了最大生命周期后,口令依然可用的期限(單用戶登錄后要求修改口令)。超過該期限,用戶不能登錄。空值表示沒有強制的非活動期,即非活動期不受限制。 (-i --inactive )
*8:賬戶失效期單位天。從1970. l 1開始的天數。空值表示無失效期,即永遠有效: 0不要用,因為即可能被認為無失效期,也可能被認為期限就到1970.1.1。
注意:賬戶失效和口令的過期不同,賬戶失效表示賬戶不再允許登錄,口令失效表示不能用原來失效的口令登錄。 (useradd usermod修改過期)
9: 保留,用於將來使用。
用戶組的所有信息都存放在/etc/group文件中。
3.cat /etc/group文件 組 四個字段
每個用戶都屬於某個用戶組;一個組中可以有多個用戶,一個用戶也可以屬於不同的組。
當一個用戶同時是多個組中的成員時,在/etc/passwd文件中記錄的是用戶所屬的主組,也就是登錄時所屬的默認組,而其他組稱為附加組。
用戶要訪問屬於附加組的文件時,必須首先使用newgrp命令使自己成為所要訪問的組中的成員。
組名:口令:組標識號:組內用戶列表
cat /etc/group ——組信息
1、組名
2、密碼
3、主組id
4、附屬組為該組的用戶名
用戶組的所有信息都存放在/etc/group文件中。此文件的格式也類似於/etc/passwd文件,由冒號(:)隔開若干個字段,
四個字段
組名:口令:組標識號:組內用戶列表
"組名"是用戶組的名稱,由字母或數字構成。與/etc/passwd中的登錄名一樣,組名不應重復。
"口令"字段存放的是用戶組加密后的口令字。一般Linux 系統的用戶組都沒有口令,即這個字段一般為空,或者是*。
"組標識號"與用戶標識號類似,也是一個整數,被系統內部用來標識組。
"組內用戶列表"是屬於這個組的所有用戶的列表/b],不同用戶之間用逗號(,)分隔。這個用戶組可能是用戶的主組,也可能是附加組。
cat /etc/group
root::0:root
bin::2:root,bin
sys::3:root,uucp
adm::4:root,adm
daemon::5:root,daemon
lp::7:root,lp
users::20:root,sam
四、添加批量用戶 user
1.先編輯一個文本用戶文件。
vim /etc/passwd一個范例文件user.txt
user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
每一列按照/etc/passwd密碼文件的格式書寫,要注意每個用戶的用戶名、UID、宿主目錄都不可以相同,其中密碼欄可以留做空白或輸入x號。
2.以root身份執行命令 /usr/sbin/newusers,從剛創建的用戶文件user.txt中導入數據,創建用戶:
# newusers < user.txt
vipw 或
vi /etc/passwd 檢查文件是否已經出現這些用戶的數據,並且用戶的宿主目錄是否已經創建。
3.執行命令/usr/sbin/pwunconv。
將 /etc/shadow 產生的 shadow 密碼解碼,然后回寫到 /etc/passwd 中,
並將/etc/shadow的shadow密碼欄刪掉。
這是為了方便下一步的密碼轉換工作,即先取消 shadow password 功能。
# pwunconv
4.編輯每個用戶的密碼對照文件。
范例文件 passwd.txt 內容如下:
user001:密碼
user002:密碼
user003:密碼
5.以root身份執行命令 /usr/sbin/chpasswd。
創建用戶密碼,chpasswd 會將經過 /usr/bin/passwd 命令編碼過的密碼寫入 /etc/passwd 的密碼欄。
chpasswd < passwd.txt
6.確定密碼經編碼寫入/etc/passwd的密碼欄后。
執行命令 /usr/sbin/pwconv 將密碼編碼為 shadow password,並將結果寫入 /etc/shadow。
# pwconv
這樣就完成了大量用戶的創建了,之后您可以到/home下檢查這些用戶宿主目錄的權限設置是否都正確,並登錄驗證用戶密碼是否正確。
五.用戶工作環境PATH sudo 授權 發送通知
每個用戶都有自己的工作環境,環境的設置有配置文件確定,配置文件中采用設置變量的方式設定工作環境, 變量用 鍵值對的方式 設置。
shell有固定的變量定義,都采用大寫,稱為保留變量, 用於環境的保留變量又叫環境變量。
例:PATH PWD SHELL HOME等。
查看環境變量使用env命令
設置環境變量使用 變量名=值,但設置只對當前shell有效。若對子shell有效,要將變量輸出。
輸出環境變量 使用export命令
export 變量=值
用上述方式設置的環境變量只對當前會話有效,若永久有效,需修改配置文件。
1.設置系統 和 個人 環境變量配置文件 修改path
(1)系統環境變量配置文件
針對整個系統生效,即所有用戶都會繼承、遵守
/etc/bashrc針對系統shell
/etc/profile針對外圍程序,一般更改此文件
(2)個人環境變量配置文件
針對單個用戶生效,不影響其他用戶,每個用戶都用一份
$HOME/.bachrc針對shell
$HOME/.bash_profile針對外圍程序
$HOME/.profile默認不存在,等同於.bash_profile
vi /etc/profile ---更改系統配置
PS1="{\u@\h \t \W}\\$"
alias cd /etc/sysconfig/network-scripts"
保存退出
vi $HOME/.bash_profile
寫入環境變量、別名的配置命令
注:個人配置與系統配置沖突,以個人為准。原因:開機時先讀系統的,后讀個人的,后讀覆蓋先讀
練習:
1、自己定義環境變量:
USERHOME 該環境變量的值為 /usr/local/userhome
設置到自己用戶的環境文件中,並輸出為全部可用環境變量 使用env命令可以看到
vim .bash_profile在/~/.bash_profile文件中修改
export USERHOME=/usr/local/userhome
2、設置PATH環境變量,將現有的PATH環境變量增加搜索/usr/local/userhome/bin目錄。
vim .bash_profile在/~/.bash_profile文件中修改
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/userhome/bin
2.用戶切換
su zhang 切換到指定用戶界面下
su - zhang 有- 表示su過去后,使用對方用戶的環境變量配置,
不加-,表示su過去后,使用原用戶的環境變量配置
root用戶切換時不需要輸入密碼可直接切換,普通用戶切換時需要輸入密碼
3.sudo授權 普通用戶對系統進行管理 功能格式 案例
功能:允許指定用戶使用某些系統命令
缺省情形下,只要將用戶加入wheel組,就可以執行管理命令
visudo 編輯sudo配置文件,visudo是一個整命令,實質是編輯的/etc/sudoers文件
格式:
找到 root ALL=(ALL) ALL 行,在下面寫入或底行寫入
目標用戶 主機名=(以誰的身份) 允許使用的命令的絕對路徑,ALL表示所有全部命令 絕對路徑可用whereis、which查到
例:
zhang CentOS7-3=(root) /usr/bin/mount,/usr/bin/umount ALL 表示所有
解釋:
允許用戶zhang,在CentOS7-3主機上,以root用戶的身份,運行mount、umount命令
su - zhang
sudo useradd my_user1
4.su'do進階給組授權:
visudo
%zu11 CentOS7-3=(root) GUAZAI --- %表示給組授權
5.用戶通信:發通知
write zhang 給已登錄用戶發送消息,回車后,進入消息編輯狀態,ctrl+d停止編寫並發送
write root tty1 給指定終端上的用戶發送消息
wall 發送廣播消息,所有在線用戶都收
mail zhang 給指定用戶發送郵件,回車后,進入郵件編輯界面,ctrl+d停止編寫並發送
mail 查看個人郵件,輸入郵件編號,查看郵件,輸入r 回復郵件,q鍵退出
說明:通過以上的保留字,制定的一些文件名、字符的格式,稱為正則表達式
網址的正則表達式:http://?*.?*.?* 郵箱的正則表達式:?*@?*.?*