6、用户管理
1.用戶基本概述
1.1.什么是用戶?
用戶指的是能夠正常登錄Linux或Windows系統(可以理解為你租了房?,能夠正常入駐)
F:那Linux與Windows系統的用戶有什么區別? Q:本質都是登陸系統,只不過Linux?持多個用戶
同時登陸。
F:難道Windows就不算多用戶操作系統嗎? Q:其實不是,在Windows系統中可以創建多個用戶,
但不允許同?時刻多個用戶登陸系統,但Linux系統則允許同?時刻多個用戶同時登陸,登陸后
相互之間操作并不影響。
1.2.Linux下的用戶有什么用,或者說我們為什么要創建用戶?
1.系統上的每?個進程(運行的程序),都需要?個特定的用戶運行2.通常在公司是使用普通用戶管理服務器,因為root權限過?,容易造成故障。
1.3.如何查看系統中所存在的用戶
1.查看當前登錄的用戶信息
[root@bgx ~]# id #查看當前所登陸的用戶信息
uid=0(root) gid=0(root) groups=0(root)
[root@bgx ~]# id oldboy #查看其它用戶的信息
uid=1000(oldboy) gid=1000(oldboy) groups=1000(oldboy) 2.每?個進程都會由?個用戶身份運行
[root@bgx ~]# ps aux|less #簡單使用?下,不用理解
root 33782 0.0 0.0 0 0 ? R 02:46 0:00 [kworker/u256:0]
root 35637 0.0 0.0 0 0 ? R 05:11 0:03 [kworker/0:2] 1.4.那我們的用戶存在哪呢?
Linux系統會將用戶的信息存放在/etc/passwd,記錄了用戶的信息,但沒有密碼信息,密碼被存
放在/etc/shadow中。也就是說這兩個文件非常的重要,不要輕易刪除與修改。
1./etc/passwd 配置文件解釋如下圖,或者man 5 passwd
2./etc/shadow 配置文件解釋如下圖,或者man 5 shadow
PS: 使用change修改密碼過期時間示例
4.最后我們需要了解下系統對用戶的?個約定?(約定娶你,就真的會娶嗎?)
| 用戶UID | 系統中約定的含義 |
|---|---|
| 0 | 超級管理員,最?權限,有著極強的破壞能力 |
| 1~200 | 系統用戶,用來運行系統自帶的進程,默認已創建 |
| 201~999 | 系統用戶,用來運行用戶安裝的程序,所以此類用戶無需登錄系統 |
| 1000+ | 普通用戶,正常可以登陸系統的用戶,權限比較小,能執行的任務有限 |
PS:在CentOS7系統之前, UID1-499用于系統用戶, 而UID 500+則用于普通用戶
2用戶相關命令
下?我們就圍繞著用戶的創建、變更、刪除等來講講涉及到的命令: useradd、usermod、
userdel
2.1.使用useradd命令新增用戶,注意: adduser命令軟鏈接指向useradd命令
#選項
# -u 指定要創建用戶的UID,不允許沖突
# -g 指定要創建用戶默認組
# -G 指定要創建用戶附加組,逗號隔開可添加多個附加組
# -d 指定要創建用戶家目錄
# -s 指定要創建用戶的bash shell
# -c 指定要創建用戶注釋信息
# -M 給創建的用戶不創建家目錄
# -r 創建系統賬戶,默認無家目錄 #1.創建bgx用戶,UID5001,基本組students,附加組sa 注釋信息:2019 new student,登陸shell:/b
in/bash
[root@bgx ~]# groupadd sa
[root@bgx ~]# groupadd students
[root@bgx ~]# useradd -u 5001 -g students -G sa -c "2019 new student" -s /bin/bash
bgx
#2.創建mysql系統用戶,-M不建立用戶家目錄 -s指定nologin使其用戶無法登陸系統
[root@bgx ~]# useradd mysql -M -s /sbin/nologin
[root@bgx ~]# useradd -r dba -s /sbin/nologin 2.2.如何使用usermod命令修改用戶信息
#選項
# -u 指定要修改用戶的UID
# -g 指定要修改用戶基本組
# -G 指定要修改用戶附加組,使用逗號隔開多個附加組, 覆蓋原有的附加組
# -d 指定要修改用戶家目錄
# -s 指定要修改用戶的bash shell
# -c 指定要修改用戶注釋信息
# -l 指定要修改用戶的登陸名
# -L 指定要鎖定的用戶
# -U 指定要解鎖的用戶#1.檢查此前創建的用戶信息
[root@bgx ~]# grep "bgx" /etc/passwd
bgx:x:5001:503:2019 new student:/home/bgx:/bin/bash#2.修改bgx用戶uid、gid,附加組
[root@bgx ~]# groupadd -g 5008 network_sa
[root@bgx ~]# groupadd -g 5009 devops
[root@bgx ~]# usermod -u 6001 -g5008 -a -G 5009 bgx#3.修改bgx用戶的注釋信息, 用戶家目錄, 登錄shell, 登錄名
[root@bgx ~]# usermod -c "2019 new student" -md /bgx -s /bin/sh -l change_bgx bgx
#檢查是否修改成功
[root@bgx ~]# grep "bgx" /etc/passwd
bgx_xuliangwei:x:6001:5008:2019 new student:/bgx:/bin/sh
[root@bgx ~]# id change_bgx
uid=6001(change_bgx) gid=5008(network_sa) groups=5008(network_sa),503(sa),5009(devo
ps)
[root@bgx ~]# ll -d /bgx
drwx------. 2 bgx_xuliangwei network_sa 4096 2014-09-23 00:13 /bgx#4.鎖定用戶[擴展]
[root@bgx ~]# echo "123" |passwd --stdin change_bgx
[root@bgx ~]# usermod -L change_bgx #鎖定后會無法登陸系統#5.解鎖用戶[擴展]
[root@bgx ~]# usermod -U change_bgx PS: 當然還有很多命令可以查看用戶的信息,以下簡單列舉?些,但都是我們常用,所以了解即
可
1) 使用finger命名查詢用戶信息以及登錄信息,示例: finger UserName
2) 使用chfn命令修改用戶信息,示例: chfn UserName
3) 使用chsh命令修改用戶登錄Bash Shell,示例: chsh UserName
4) 使用who、whoami、w檢查用戶登陸情況
2.3.使用userdel命令刪除賬戶
#選項 -r 刪除用戶同時刪除它的家目錄
#1.刪除user1用戶,但不刪除用戶家目錄和 mail spool
[root@bgx ~]# userdel user1
#2.-r參數可以連同用戶家目錄?起刪除(慎用)
[root@bgx ~]# userdel -r user1 3.用戶擴展知識
3.1.前?我們學習如何創建、修改、刪除用戶,接下來了解下用戶的創建流程?
1.useradd創建用戶時,系統會以/etc/login.defs、/etc/defaults/useradd兩個配置文件作為參照物,如果在創建用戶時指定了參數則會覆蓋/etc/login.defs、/etc/defaults/useradd文件默認配置,如未指定則使用默認。
[root@bgx ~]# grep -Ev "^#|^$" /etc/login.defs
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512[root@bgx ~]# cat /etc/default/useradd
GROUP=100
HOME=/home #把用戶的家目錄建在/home中。
INACTIVE=-1 #是否啟用賬號過期停權,-1表示不啟用。
EXPIRE= #賬號終止日期,不設置表示不啟用。
SHELL=/bin/bash #新用戶默認所有的shell類型。
SKEL=/etc/skel #配置新用戶家目錄的默認文件存放路徑。
CREATE_MAIL_SPOOL=yes #創建mail文件。 2.當使用useradd創建用戶時,創建的用戶家目錄下會存在 .bash_* 環境變量相關的文件,這些環境變量文件默認從/etc/skel目錄中拷貝。這個默認拷貝環境變量位置是由/etc/defaults/useradd配置文件中定義的。
#故障案例,在當前用戶家目錄執行了rm -rf .*,下次登錄系統時出現-bash-4.1$,如何解決!
-bash-4.1$ cp -a /etc/skel/.bash* ./
-bash-4.1$ exit
[root@bgx ~]# #重新連接即可恢復 3.2.如何為新用戶設定密碼,?如何變更用戶密碼
創建用戶后,如需要使用該用戶登陸系統則需要為用戶設定密碼,設定密碼使用passwd命令。
建議密碼復雜度??些、?度?于10、出現各種特殊字符、無任何規律(不要出現名字,電話,?日等)
PS: 注意事項
1.普通用戶只允許變更自己的密碼,無法修改其他?密碼,并且密碼?度必須8位字符
2.管理員用戶允許修改任何?的密碼,無論密碼?度多?或多短。
#1.使用passwd命令修改用戶密碼
# passwd #給當前用戶修改密碼
# passwd root #給root用戶修改密碼
# passwd oldboy #給oldboy用戶修改密碼,普通用戶只能自己修改自己#2.驗證如下?項指標
# passwd #root管理員用戶登陸,修改root用戶密碼
# passwd xuliangwei #root用戶登陸,修改其他用戶的密碼
$ passwd root #普通用戶修改root管理員密碼
# echo "123" | passwd --stdin xuliangwei #非交互式修改密碼#3.系統內置變量?成隨機字符串
[root@bgx ~]# echo $RANDOM|md5sum|cut -c 1-10
d09fe9b1xs
[root@bgx ~]# echo $(echo $RANDOM|md5sum |cut -c 5-14) |tee pass.txt| passwd --sn xuliangwei#4.mkpasswd?成隨機字符串, -l設定密碼?度,-d數?,-c小寫字?,-C?寫字?,-s特殊字符
[root@bgx ~]# yum install -y expect //需要安裝擴展包
[root@bgx ~]# mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4
|K&13bR)i/ PS: 推薦密碼保存套件工具,?持windows、MacOS、Iphone以及瀏覽器插件Lastpass官方?站
4.用戶組的管理
4.1.什么是用戶組?
其實就是?種邏輯層?的定義,邏輯上將多個用戶歸納至?個組,當我們對組操作,其實就相當于對組中的所有用戶操作。
4.2.對于用戶來說,組有?種類別?
基本組,用戶只能有?個基本組,創建時可通過-g指定,如未指定則創建?個默認的組(與用戶同名)
附加組,基本組不能滿?授權要求,創建附加組,將用戶加入該組,用戶可以屬于多個附加組
4.3.那組的信息保存在哪呢?
組賬戶信息保存在/etc/group和/etc/gshadow兩個文件中。重點關注group
4.3.1./etc/group 配置文件解釋如下圖
4.3.2./etc/gshadow 配置文件解釋如下圖
1.使用groupadd命令新增組,groupadd [-g GID] groupname
#創建基本組, 不指定gid
[root@bgx ~]# groupadd no_gid
[root@bgx ~]# tail -n1 /etc/group
no_gid:x:1000#創建基本組, 指定gid為5555
[root@bgx ~]# groupadd -g 5555 yes_gid
[root@bgx ~]# tail -n1 /etc/group
yes_gid:x:5555:#創建系統組,gid從201-999
[root@bgx ~]# groupadd -r sys_group
[root@bgx ~]# tail -n1 /etc/group
sys_group:x:990: 2.使用groupmod命令新增組
#-g 修改組gid
[root@bgx ~]# groupmod -g 1111 no_gid
[root@bgx ~]# tail -1 /etc/group
no_gid:x:1111#-n 修改組名稱
[root@bgx ~]# groupmod -n active_group yes_gid
[root@bgx ~]# tail -1 /etc/group
active_group:x:5555: 3.groupdel刪除組,刪除時需要注意,如果用戶存在基本組則無法直接刪除該組,如果刪除用戶則會移除默認的私有組,而不會移除基本組。
#刪除組
[root@bgx ~]# groupdel active_group#刪除用戶附加組
[root@bgx ~]# id xuliangwei
uid=1069(xuliangwei) gid=5005(xuliangwei) groups=5005(xuliangwei),5004(devops)
[root@bgx ~]# groupdel devops
[root@bgx ~]# id xuliangwei
uid=1069(xuliangwei) gid=5005(xuliangwei) groups=5005(xuliangwei)#無法刪除用戶基本組
[root@bgx ~]# groupdel network_sa
groupdel: cannot remove the primary group of user 'bgx_xuliangwei'
#只有刪除用戶或者用戶變更基本后,方可刪除該組 4.使用gpasswd設置組密碼[擴展,可以不會]
[root@bgx ~]# groupadd devops
[root@bgx ~]# gpasswd devops
Changing the password for group devops
New Password
Re-enter new password: 5.使用newgrp命令切換基本組身份[擴展,可以不會]
#1.檢查賬戶信息
[root@bgx ~]# useradd xuliangwei
[root@bgx ~]# id xuliangwei
uid=1069(xuliangwei) gid=5005(xuliangwei) groups=5005(xuliangwei)#2.切換普通用戶
[root@bgx ~]# su - xuliangwei#3.創建新文件,查看文件的屬主和屬組
[xuliangwei@bgx ~]$ touch file_roots
[xuliangwei@bgx ~]$ ll
-rw-rw-r-- 1 xuliangwei xuliangwei 0 Jun 13 10:06 file_roots#4.使用newgrp切換到devops組
[xuliangwei@bgx ~]$ newgrp devops
Password:#5.創建文件,檢查屬主和屬組
[xuliangwei@bgx ~]$ touch file_test
[xuliangwei@bgx ~]$ ll
-rw-rw-r-- 1 xuliangwei xuliangwei 0 Jun 13 10:06 file_roots
-rw-r--r-- 1 xuliangwei devops 0 Jun 13 10:08 file_test 5.用戶如何提權
往往公司的服務器對外都是禁止root用戶直接登錄,所以我們通常使用的都是普通用戶,那么問題來了?
當我們使用普通用戶執行/sbin目錄下的命令時,會發現沒有權限運行,這種情況下我們無法正常的管理服務器,那如何才能不使用root用戶直接登錄系統,同時?保證普通用戶能完成日常工作?
PS: 我們可以使用如下兩種方式: su、sudo
1.su切換用戶,使用普通用戶登錄,然后使用su命令切換到root。優點:簡單 缺點:需要知道root密碼
2.sudo提權,當需要使用root權限時進行提權,而無需切換至root用戶,優點:安全、方便 缺點:復雜
5.1.su身份切換
在使用su切換前,我們需要了解?些預備知識,比如shell分類、環境變量配置文件有哪些
5.1.1.Linux Shell主要分為如下?類
交互式shell,等待用戶輸入執行的命令(終端操作,需要不斷提示)
非交互式shell,執行shell腳本, 腳本執行結束后shell自動退出
登陸shell,需要輸入用戶名和密碼才能進入Shell,日常接觸的最多的?種
非登陸shell,不需要輸入用戶和密碼就能進入Shell,比如運行bash會開啟?個新的會話窗? 5.1.2.bash shell配置文件介紹(文件主要保存用戶的工作環境)
個?配置文件: ~/.bash_profile ~/.bashrc 全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc
profile類文件, 設定環境變量, 登陸前運行的腳本和命令。bashrc 類文件, 設定本地變量, 定義命令別名PS: 如果全局配置和個?配置產?沖突,以個?配置為準。 5.1.3.登陸系統后,環境變量配置文件的應用順序是?
登錄式shell配置文件執行順序: /etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc
非登陸式shell配置文件執行順序: ~/.bashrc->/etc/bashrc->/etc/profile.d/*.shPS: 驗證使用echo在每行添加?個輸出即可 5.1.4.說了這么多預備知識,那這些和su命令切換用戶有什么關系?
su - username屬于登陸式shell,su username屬于非登陸式shell,區別在于加載的環境變量不?樣。
普通用戶 su - 可以直接切換至root用戶,但需要輸入root用戶的密碼。
超級管理員root用戶使用 su - username 切換普通用戶不需要輸入任何密碼。 #1.普通用戶使用su切換root
[xuliangwei@node1 ~]$ su
密碼: #輸入root的密碼
[root@node1 xuliangwei]# pwd
/home/xuliangwei
#2.普通用戶使用su -切換到root,會加載root的環境變量
[xuliangwei@node1 ~]$ su -
密碼:
[root@node1 ~]# pwd
/root
#3.以某個用戶的身份執行某個服務,使用命令`su -c username`
[root@bgx ~]# su - xuliangwei -c 'ifconfig'
[root@bgx ~]# su - xuliangwei -c 'ls ~' 5.2.sudo提權
su 命令在切換用戶身份時,如果每個普通用戶都能拿到 root 用戶的密碼,當其中某個用戶不小心泄漏了 root 的密碼,那系統會變得非常不安全。
為了改進這個問題,從而產?了 sudo 這個命令。
sudo 執行?個僅有 root 身份才能執行的命令是可以辦到的,但是需要輸入密碼,這個密碼并不是 root 的密碼而是用戶自己的密碼。
默認只有 root 用戶能使用 sudo 命令,普通用戶想要使用 sudo 需要 root 預先設定,即使用visudo 命令去編輯相關的配置文件 /etc/sudoers
Centos7 提權
[root@node1 ~]# usermod bgx -G wheel
//日志審計
[root@node1 ~]$ sudo tail -f /var/log/secureCentOS6 提權
#1.系統安裝后就有sudo命令,如果沒有sudo命令,可通過如下方式安裝
[root@bgx ~]# yum install -y sudo
#2.使用`visudo`命令編輯sudo配置文件, 相當于 vim /etc/sudoers`配置文件
[root@bgx ~]# visudo #會對配置進行驗證
xuliangwei ALL=(ALL) /bin/rm, /bin/cp #新增
#3.配置選項詳解
1.用戶名 2.主機名 3.??名 4.命令名
root ALL= (ALL) ALL
xuliangwei ALL 使用最???執行 /bin/rm, /bin/cp #允許使用sudo執行命令
xuliangwei ALL=(ALL) NOPASSWD:/bin/cp, /bin/rm //不需要密碼使用rm、cp命令
#4.使用visudo -c檢查配置文件
[root@bgx ~]# visudo -c
/etc/sudoers: parsed OK 5.3.普通用戶驗證 sudo 權
#1.切換普通用戶
[root@bgx ~]# su - xuliangwei#2.檢查普通用戶sudo權限明細
[xuliangwei@xuliangwei ~]$ sudo -l
...
User xuliangwei may run the following commands on this host:(ALL) /bin/rm, (ALL) /bin/cp
#3.普通用戶刪除opt目錄,刪除失敗
[xuliangwei@xuliangwei ~]$ rm -rf /opt/
rm: cannot remove `/opt': Permission denied#4.使用sudo提權,驗證用戶權限是否可用,需要輸入普通用戶的密碼
[xuliangwei@xuliangwei ~]$ sudo rm -rf /opt 5.4.sudo免密碼配置選項
#1.普通用戶執行sudo不需要輸入密碼配置
[root@bgx ~]# visudo
xuliangwei ALL=(ALL) /bin/rm, /bin/cp #默認
xuliangwei ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #修改后#2.默認普通用戶無權刪除
[xuliangwei@xuliangwei ~]$ rm -f /root/002
rm: cannot remove `/root/002': Permission denied
#3.驗證sudo免密碼執行權限
[xuliangwei@xuliangwei ~]$ sudo rm -f /root/002 5.5. sudo 配置組
//如果每增加?個用戶需配置?行sudo,這樣設置非常麻煩。所以可以進行如下設置
%gbx ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #新增組
//group1這個組的所有用戶都擁有sudo的權力。接下來只需要將用戶加入該組即可。//創建用戶加入該組
[root@bgx ~]# groupadd bgx
[root@bgx ~]# useradd bgx1 -g bgx
[root@bgx ~]# useradd bgx2 -g bgx//root用戶建立目錄
[root@bgx ~]# mkdir /root/bgx_sudo//切換用戶并刪除測試
[root@node1 ~]# su - bgx1
[bgx1@xuliangwei ~]$ rm -rf /root/bgx_sudo
rm: cannot remove `/root/bgx_sudo': Permission denied//使用sudo
[bgx1@xuliangwei ~]$ sudo rm -rf /root/bgx_sudo 當然配置文件 /etc/sudoers 包含了諸多配置項,可以使用命令 man sudoers 來獲得幫助信息。
下?介紹?個很實用的案例,我們的需求是將 Linux 服務器設置成如下:
1.僅允許使用普通賬戶登陸 Linux 服務器,禁止root直接登錄
2.可以讓普通用戶不輸入密碼就能 sudo su - 切換到 root 賬戶
//禁止root用戶登陸
[root@bgx ~]# sed -i 's@#PermitRootLogin yes@PermitRootLogin no@g' /etc/ssh/sshd_c
onfig[root@bgx ~]# systemctl restart sshd
//配置sudo權限
[root@bgx ~]# visudo
User_Alias USER_SU = bgx1,bgx2,xuliangwei
Cmnd_Alias SU = /bin/su
USER_SU ALL=(ALL) NOPASSWD:SU
//使用root登陸服務器失敗
? ~ ssh root@192.168.56.11
root@192.168.56.11's password:
Permission denied, please try again.
//使用普通用戶登陸服務器
? ~ ssh xuliangwei@192.168.56.11
xuliangwei@192.168.56.11's password:
Last login: Mon Oct 30 09:28:21 2017 from 192.168.56.2
//使用sudo提權至root用戶
[xuliangwei@xuliangwei ~]$ sudo su -
[root@bgx ~] 5.6. sudo 執行流程:
1.普通用戶執行sudo命令, 會檢查/var/db/sudo是否存在時間戳緩存
2.如果存在則不需要輸入密碼, 否則需要輸入用戶與密碼
3.輸入密碼會檢測是否該用戶是否擁有該權限
4.如果有則執行,否則報錯退出
來自為知筆記(Wiz)
轉載于:https://www.cnblogs.com/Forever-x/p/75bbadf60d36d2e5edd0c91ad4ad4e94.html
總結
- 上一篇: 上不了名校?可以在 GitHub 上读他
- 下一篇: Kubernetes 架构(下)【转】