Linux學習——用戶管理

Linxu用戶管理

Linux與Windows用戶登錄區別

用戶就是指用來登錄系統的

Linux是一個多用戶的操作系統(OS),支持同一時刻多個用戶同時登錄

windows支持創建多個用戶,但同一時刻只能有一個用戶登錄

在windows中(這裏特指windows個人版,企業版支持多個用戶同時登錄)

你想要另一個用戶登錄必須退出當前用戶,而Linux中你可以登錄另一個用戶

同時操作,互不影響。如:

在這裏插入圖片描述
在這裏插入圖片描述
在oldboy這個Linux服務器上我同時登陸了root超級管理員用戶也登陸了普通用戶jack,可以看出jack的登錄並沒有將root用戶擠掉。

所以,我們稱Linux是多用戶系統。

Linux系統用戶的存放

在Linux系統中,用戶就是用來登錄系統的。

用戶創建後會被寫到/etc/passwd , /etc/shadow兩個文件中

Linux系統會將用戶的信息存放在/etc/passwd,記錄了用戶的信息,但沒有密碼信息,密碼被存放在/etc/shadow中,這兩個文件非常重要,不要輕易修改、刪除。

/etc/passwd配置文件解釋:
在這裏插入圖片描述

/etc/shadow配置文件解釋:
在這裏插入圖片描述

查看Linux系統的用戶信息

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]

3.系統對用戶的約定

在這裏插入圖片描述

注:在CentOS7系統之前,UID, 1-499用於系統用戶,而UID 500+ 則用於普通用戶

Linux系統增加用戶

#選項
# -u 指定要創建用戶的UID,不允許衝突
# -g 指定要創建用戶默認組
# -G 指定要創建用戶附加組,逗號隔開可添加多個附加組
# -d 指定要創建用戶家目錄
# -s 指定要創建用戶的bash shell
# -c 指定要創建用戶註釋信息
# -M 給創建的用戶不創建家目錄
# -r 創建系統賬戶,默認無家目錄


#1.創建bgx用戶,UID5001,基本組students,附加組sa 註釋信息:2019 new student,登陸shell:/bin/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

注:adduser是useradd的軟連接,建議使用useradd即可

Linux系統修改用戶信息

#選項
# -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(devops)
[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

注:*當然還有很多命令可以查看用戶的信息,以下簡單列舉一些,但都是我們常用,所以瞭解即可

  1. 使用finger命名查詢用戶信息以及登錄信息,示例: finger UserName
  2. 使用chfn命令修改用戶信息,示例: chfn UserName
  3. 使用chsh命令修改用戶登錄Bash Shell,示例: chsh UserName
  4. 使用who、whoami、w檢查用戶登陸情況*

Linux系統刪除用戶

#選項 -r 刪除用戶同時刪除它的家目錄

#1.刪除user1用戶,但不刪除用戶家目錄和 mail spool
[root@bgx ~]# userdel user1

#2.-r參數可以連同用戶家目錄一起刪除(慎用)
[root@bgx ~]# userdel -r user1

Linux系統用戶創建的流程

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 ~]#   #重新連接即可恢復

Linux系統修改用戶密碼以及爲新用戶設定密碼

創建用戶後,如需要使用該用戶登陸系統則需要爲用戶設定密碼,設定密碼使用passwd命令。建議密碼複雜度高一些、長度大於10、出現各種特殊字符、無任何規律(不要出現名字,電話,生日等)
PS: 注意事項
1.普通用戶只允許變更自己的密碼,無法修改其他人密碼,並且密碼長度必須8位字符
2.管理員用戶允許修改任何人的密碼,無論密碼長度多長或多短。

#1.使用passwd命令修改用戶密碼
# passwd        #給當前用戶修改密碼
# passwd root   #給root用戶修改密碼
# passwd oldboy #給oldboy用戶修改密碼,普通用戶只能自己修改自己


#2.驗證如下幾項指標
# passwd                #root管理員用戶登陸,修改root用戶密碼
# passwd ly             #root用戶登陸,修改其他用戶的密碼
$ passwd root           #普通用戶修改root管理員密碼
# echo "123" | passwd --stdin ly    #非交互式修改密碼


#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 --stdin 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/

注:後面兩種隨機生成密碼瞭解即可

用戶組的管理

1.什麼是用戶組

其實就是一種邏輯層面的定義,邏輯上將多個用戶歸納至一個組,當我們對組操作,其實就相當於對組中的所有用戶操作。

2.組的類別?

基本組,用戶只能有一個基本組,創建時可通過-g指定,如未指定則創建一個默認的組(與用戶同名)
附加組,基本組不能滿足授權要求,創建附加組,將用戶加入該組,用戶可以屬於多個附加組

3.組的信息存放

組賬戶信息保存在/etc/group和/etc/gshadow兩個文件中。重點關注group

1./etc/group 配置文件解釋如下圖

在這裏插入圖片描述

2. /etc/gshadow 配置文件解釋如下圖

3.增加組

#創建基本組, 不指定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:

4.修改組

#-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:

5.刪除組

#刪除組
[root@bgx ~]# groupdel active_group

#刪除用戶附加組
[root@bgx ~]# id ly
uid=1069(ly) gid=5005(ly) groups=5005(ly),5004(devops)
[root@bgx ~]# groupdel devops
[root@bgx ~]# id ly
uid=1069(ly) gid=5005(ly) groups=5005(xuliangwei)

#無法刪除用戶基本組
[root@bgx ~]# groupdel network_sa
groupdel: cannot remove the primary group of user 'bgx_ly'
#只有刪除用戶或者用戶變更基本後,方可刪除該組

注 :groupdel刪除組,刪除時需要注意,如果用戶存在基本組則無法直接刪除該組,如果刪除用戶則會移除默認的私有組,而不會移除基本組。

6.修改組密碼

[root@bgx ~]# groupadd devops
[root@bgx ~]# gpasswd devops
Changing the password for group devops
New Password:
Re-enter new password:

7.切換基本組身份

#1.檢查賬戶信息
[root@bgx ~]# useradd ly
[root@bgx ~]# id ly
uid=1069(ly) gid=5005(ly) groups=5005(ly)

#2.切換普通用戶
[root@bgx ~]# su - ly

#3.創建新文件,查看文件的屬主和屬組
[ly@bgx ~]$ touch file_roots
[ly@bgx ~]$ ll
-rw-rw-r-- 1 ly ly 0 Jun 13 10:050 filely_roots

#4.使用newgrp切換到devops組
[ly@bgx ~]$ newgrp devops
Password:

#5.創建文件,檢查屬主和屬組
[ly@bgx ~]$ touch file_test
[ly@bgx ~]$ ll
-rw-rw-r-- 1 ly xuliangwei 0 Jun 13 10:56 file_roots
-rw-r--r-- 1 ly devops     0 Jun 13 10:58 file_test

用戶如何提權限

往往公司的服務器對外都是禁止root用戶直接登錄,所以我們通常使用的都是普通用戶,那麼問題來了?
當我們使用普通用戶執行/sbin目錄下的命令時,會發現沒有權限運行,這種情況下我們無法正常的管理服務器,那如何才能不使用root用戶直接登錄系統,同時又保證普通用戶能完成日常工作?
PS: 我們可以使用如下兩種方式: su、sudo
1.su切換用戶,使用普通用戶登錄,然後使用su命令切換到root。優點:簡單 缺點:需要知道root密碼
2.sudo提權,當需要使用root權限時進行提權,而無需切換至root用戶,優點:安全、方便 缺點:複雜

1.su身份切換

在使用su切換前,我們需要了解一些預備知識,比如shell分類、環境變量配置文件有哪些

1.Linux Shell主要分爲如下幾類

交互式shell,等待用戶輸入執行的命令(終端操作,需要不斷提示)
非交互式shell,執行shell腳本, 腳本執行結束後shell自動退出
登陸shell,需要輸入用戶名和密碼才能進入Shell,日常接觸的最多的一種
非登陸shell,不需要輸入用戶和密碼就能進入Shell,比如運行bash會開啓一個新的會話窗口*

2.bash shell配置文件介紹(文件主要保存用戶的工作環境)*

個人配置文件:~/.bash_profile ~/.bashrc 。全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc
profile類文件, 設定環境變量, 登陸前運行的腳本和命令。bashrc 類文件, 設定本地變量, 定義命令別名
PS: 如果全局配置和個人配置產生衝突,以個人配置爲準。*

3.登陸系統後,環境變量配置文件的應用順序是?

登錄式shell配置文件執行順序: /etc/profile->/etc/profile.d/*.sh->/.bash_profile->/.bashrc->/etc/bashrc
非登陸式shell配置文件執行順序: ~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh
PS: 驗證使用echo在每行添加一個輸出即可

4.說了這麼多預備知識,那這些和su命令切換用戶有什麼關係?

su - username屬於登陸式shell,su username屬於非登陸式shell,區別在於加載的環境變量不一樣。
普通用戶su -可以直接切換至root用戶,但需要輸入root用戶的密碼。
超級管理員root用戶使用su - username切換普通用戶不需要輸入任何密碼。

#1.普通用戶使用su切換root
[ly@node1 ~]$ su
密碼:         #輸入root的密碼
[root@node1 ly]# pwd
/home/ly

#2.普通用戶使用su -切換到root,會加載root的環境變量
[ly@node1 ~]$ su -
密碼:
[root@node1 ~]# pwd
/root

#3.以某個用戶的身份執行某個服務,使用命令su -c username
[root@bgx ~]# su - ly -c 'ifconfig'
[root@bgx ~]# su - ly -c 'ls ~'

2.sudo提權限

su命令在切換用戶身份時,如果每個普通用戶都能拿到root用戶的密碼,當其中某個用戶不小心泄漏了root的密碼,那系統會變得非常不安全。爲了改進這個問題,從而產生了sudo這個命令。

其實sudo就相當於給某個普通用戶埋下了浩克(hulk)的種子,當需要執行一些高級操作時,進行發怒,但正常情況下還是普通人,還是會受到限制。

1.快速配置sudo方式
#1.快速配置sudo方式[先睹爲快]
[root@node1 ~]# usermod bgx -G wheel
[root@node1 ~]$ sudo tail -f /var/log/secure    #sudo審計日誌

#2.一般正常配置sudo方式
[root@www ~]# #visudo => vim /etc/sudoers
#1.用戶名  2.主機名=(角色名)       4.命令名
bgx       ALL=(ALL)         /usr/bin/yum,/usr/sbin/useradd   #允許使用sudo執行命令
oldboy   ALL=(ALL)          NOPASSWD:/bin/cp, /bin/rm   #NOPASSWD不需要使用密碼
2.普通用戶使用sudo
#1.切換普通用戶
[root@bgx ~]# su - xuliangwei

#2.檢查普通用戶能提權的命令
[xuliangwei@xuliangwei ~]$ sudo -l
User xuliangwei may run the following commands on this host:
    (ALL) ALL

#3.普通用戶正常情況下是無法刪除opt目錄的
[xuliangwei@xuliangwei ~]$ rm -rf /opt/
rm: cannot remove `/opt: Permission denied

#4.使用sudo提權,需要輸入普通用戶的密碼。
[xuliangwei@xuliangwei ~]$ sudo rm -rf /opt
3.提升的權限太大,能否有辦法限制僅開啓某個命令的使用權限?其他命令不允許?
#第一種方式:使用sudo中自帶的別名操作,將多個用戶定義成一個組,這個組只有sudo認可
[root@bgx ~]# visudo  #也可以使用vi /etc/sudoers來配置
# 1.使用sudo定義分組,這個系統group沒什麼關係
User_Alias OPS = oldboy,alex
User_Alias DEV = bgx,py

# 2.定義可執行的命令組,便於後續調用
Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum
Cmnd_Alias SERVICES = /sbin/service, /usr/bin/systemctl start
Cmnd_Alias STORAGE = /bin/mount, /bin/umount
Cmnd_Alias DELEGATING = /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

# 3.使用sudo開始分配權限
OPS  ALL=(ALL) NETWORKING,SOFTWARE,SERVICES,STORAGE,DELEGATING,PROCESSES
DEV  ALL=(ALL) SOFTWARE,PROCESSES

#4.登陸對應的用戶使用 sudo -l 驗證權限
#第二種方式:使用groupadd添加組,然後給組分配sudo的權限,如果有新用戶加入,直接將用戶添加到該組.
#1.添加兩個真實的系統組,  group_dev group_op
[root@www ~]# groupadd group_dev
[root@www ~]# groupadd group_op

#2.添加兩個用戶,      group_dev(user_a  user_b)   group_op(user_c  user_d)
[root@www ~]# useradd user_a -G group_dev
[root@www ~]# useradd user_b -G group_dev
[root@www ~]# useradd user_c -G group_op
[root@www ~]# useradd user_d -G group_op

#3.記得添加密碼
[root@www ~]# echo "1" | passwd --stdin user_a
[root@www ~]# echo "1" | passwd --stdin user_b
[root@www ~]# echo "1" | passwd --stdin user_c
[root@www ~]# echo "1" | passwd --stdin user_d

#4.在sudo中配置規則
[root@www ~]# visudo
    Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
    Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum
    Cmnd_Alias SERVICES = /sbin/service, /usr/bin/systemctl start
    Cmnd_Alias STORAGE = /bin/mount, /bin/umount
    Cmnd_Alias DELEGATING = /bin/chown, /bin/chmod, /bin/chgrp
    Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

    %group_dev ALL=(ALL) SOFTWARE
    %group_op ALL=(ALL) SOFTWARE,PROCESSES

#5.檢查sudo是否配置有錯
[root@www ~]# visudo -c
/etc/sudoers: parsed OK


#6.檢查user_a,和user_d的sudo權限
[[email protected] ~]$ sudo -l
User user_a may run the following commands on www:
    (ALL) /bin/rpm, /usr/bin/yum

[[email protected] ~]$ sudo -l
User user_d may run the following commands on www:
    (ALL) /bin/rpm, /usr/bin/yum, /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
4.sudo命令的執行流程
  1. 普通用戶執行sudo命令時, 會檢查/var/db/sudo是否存在時間戳緩存
  2. 如果存在則不需要輸入密碼, 否則需要輸入用戶與密碼
  3. 輸入密碼會檢測是否該用戶是否擁有該權限
  4. 如果有則執行,否則報錯退出

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章