1. 程式人生 > 實用技巧 >linux之使用者、使用者組、許可權

linux之使用者、使用者組、許可權

一、使用者管理

1、介紹

1、Linux下系統允許同一個時刻多個使用者同時登陸,建立使用者,對使用者進行管理,可以避免因root許可權過大,造成故障。

2、使用者密碼存放的位置

使用者資訊都是存在/etc/passwd,但是沒有存密碼,密碼是存在/etc/shadow中

密碼存放檔案/etc/shadow

3、使用者UID一般約定

使用者uid 約定含義
0 超級管理員,最高許可權
1~200 系統使用者,用來執行系統自帶的程序,預設已建立
201~999 系統使用者,用來執行使用者安裝的程式,這類使用者無需登入系統
1000以上 普通使用者,正常可以登陸系統的使用者,許可權比較小,執行的任務有限

二、使用者相關的命令

1、檢視使用者

[root@192 ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# uid:使用者id,系統只能識別uid,不能識別名字,人看名字
# gid:組id

# id+使用者名稱,檢視指定使用者
[root@192 ~]# id mysql
uid=5002(mysql) gid=5002(mysql) groups=5002(mysql)

2、新增使用者

注意:adduser也可以建立使用者,但是adduser命令軟連結是指向useradd命令,實質還是執行adduser

#選項
# -u 指定要建立使用者的UID,不允許衝突
# -g 指定要建立使用者預設組
# -G 指定要建立使用者附加組,逗號隔開可新增多個附加組
# -d 指定要建立使用者家目錄
'''
/bin/bash     # 可以登陸系統
/sbin/nologin # 不可以登陸系統,一般用在只需啟動服務的那些使用者
'''
# -s 指定要建立使用者的bash shell  /bin/bash   /sbin/nologin
# -c 指定要建立使用者註釋資訊
# -M 給建立的使用者不建立家目錄
# -r 建立系統賬戶,預設無家目錄


#1.建立nq31使用者,UID5001,基本組students,附加組sa 註釋資訊,登陸shell:/bin/bash
[root@192 ~]# groupadd sa #新增一個組 [root@192 ~]# groupadd students #新增一個組 [root@192 ~]# useradd -u 5001 -g students -G sa -c "這是使用者註釋資訊" -s /bin/bash nq31 #2.建立mysql系統使用者,-M不建立使用者家目錄 -s指定nologin使其使用者無法登陸系統 [root@192 ~]# useradd mysql -M -s /sbin/nologin [root@192 ~]# useradd -r admin -s /sbin/nologin

3、修改使用者資訊

#選項
# -u 指定要修改使用者的UID
# -g 指定要修改使用者基本組
# -G 指定要修改使用者附加組,使用逗號隔開多個附加組, 覆蓋原有的附加組,-aG追加
# -d 指定要修改使用者家目錄 -md 舊家搬新家
# -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,附加組  -a表示追加
[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, 登入名 -l:改名字,-md,把環境也帶過去
[root@bgx ~]# usermod -c "2019 new student" -md /bgx -s /bin/sh -l change_bgx bgx

#檢查是否修改成功
[root@bgx ~]# grep "bgx" /etc/passwd
bgx_lqz: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_lqz 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

4、刪除使用者

使用userdel命令刪除賬戶

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

#1.刪除user1使用者,但不刪除使用者家目錄和 mail spool
[root@bgx ~]# userdel user1
[root@bgx ~]# ls /var/spool/mail/

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

5、設定、修改密碼

'''
root超級使用者可以給其他使用者修改密碼
普通使用者只能自己修改自己
'''
passwd + 使用者名稱
echo "密碼" | passwd --stdin 使用者名稱 #非互動式修改密碼

三、使用者組管理

1、使用者組概念

使用者組本質:就是一種邏輯層面的定義,邏輯上將多個使用者歸納至一個組,當對組操作,就相當於對組內所有使用者操作

主要分為:基本組、附加組

2、組的資訊位置

一般存放在 /etc/group和 /etc/gshadow兩個檔案

(1)/etc/group配置(比較重要)

(2)/etc/gshadow配置檔案

3、組的基本命令

'''
1、groupadd 新增組
'''
#建立基本組, 不指定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 修改組名稱(把yes_gid名字改為active_group)
[root@bgx ~]# groupmod yes_gid -n active_group 
[root@bgx ~]# tail -1 /etc/group
active_group:x:5555:

'''
# 3、groupdel刪除組
注意:刪除時需要注意,如果使用者存在基本組則無法直接刪除該組,如果刪除使用者則會移除預設的私有組,而不會移除基本組
'''

# 私有組的情況,直接刪除使用者,組也就沒了
[root@bgx ~]# userdel jack
#刪除組
[root@bgx ~]# groupdel active_group
#刪除使用者附加組
[root@bgx ~]# id lqz
uid=1069(lqz) gid=5005(lqz) groups=5005(lqz),5004(devops)
[root@bgx ~]# groupdel devops
[root@bgx ~]# id lqz
uid=1069(lqz) gid=5005(lqz) groups=5005(lqz)
#無法刪除使用者基本組
[root@bgx ~]# groupdel network_sa
groupdel: cannot remove the primary group of user 'bgx_lqz'
#只有刪除使用者或者使用者變更基本後,方可刪除該組

'''
4、gpasswd設定組密碼
'''
[root@bgx ~]# groupadd devops
[root@bgx ~]# gpasswd devops
Changing the password for group devops
New Password:
Re-enter new password:
    
'''
5、newgrp切換基本組身份
'''
#使用newgrp切換到devops組
[lqz@bgx ~]$ newgrp devops
Password:

#5.建立檔案,檢查屬主和屬組
[lqz@bgx ~]$ touch file_test
[lqz@bgx ~]$ ll
-rw-rw-r-- 1 lqz lqz 0 Jun 13 10:06 file_roots
-rw-r--r-- 1 lqz devops     0 Jun 13 10:08 file_test

四、使用者提權

1、提權方式

(1)使用者提權方式有兩種:

su:切換到root使用者,需要知道root的密碼,安全性不高

sudo:無需切換到root,方便安全,但是,相對會複雜一點

2、su

'''
su - username  屬於登陸式shell
su username    屬於非登陸式shell
區別:載入的環境變數不一樣,su - 會載入使用者的環境變數
普通使用者切換超級使用者需要密碼
超級使用者切換普通使用者不需要密碼
'''
#1.普通使用者使用su切換root
[root@VM-4-16-centos ~]$ su 
密碼:         #輸入root的密碼
[root@VM-4-16-centos ~]# pwd
/root
#2.普通使用者使用su -切換到root,會載入root的環境變數
[test@VM-4-16-centos ~]$ su -
Password: 
Last login: Sat Jan  9 15:31:28 CST 2021 on pts/0
Last failed login: Sat Jan  9 15:34:20 CST 2021 from 222.186.133.50 on ssh:notty
There were 104 failed login attempts since the last successful login.
[root@VM-4-16-centos ~]#pwd
/root
#3.以某個使用者的身份執行某個服務,使用命令su -c username
[root@VM-4-16-centos ~]#su - test -c 'ifconfig'
[root@VM-4-16-centos ~]# su - lqz -c 'ls ~'
# 4 關閉root遠端登陸,普通使用者登進來,su - 切換到root使用者
vim /etc/ssh/sshd_config
PermitRootLogin yes  # 設成no

3、sudo

sudo方式:使用方式,在命令前新增sudo,進行提權

(1)命令配置

'''
sudo配置
檢測配置是否有誤:visudo -c
檢視對主機有哪些許可權:sudo -l
'''
#1、快速配置方式:將使用者加到wheel組中,因為wheel組是已經配置了sudo的 
[root@VM-4-16-centos test2]# usermod test2 -G wheel

#2、正常配置方式,在vi sudo 或者vim /etc/sudoers中配置
[root@VM-4-16-centos test2]# vim /etc/sudoers
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere 
# Defaults   env_keep += "HOME"

..........
'''
使用者名稱        主機名=(角色名)  命令名
test             ALL=(ALL)        ALL
注意:使用者名稱前加%表示組
'''
test ALL=(ALL) ALL #允許使用者test執行sudo所有命令,需要輸入密碼
test ALL=(ALL) NOPASSWD:/usr/bin/yum,/usr/sbin/useradd  #  允許使用者test執行sudo中的yum、useradd命令,不需要輸入密
%wheel  ALL=(ALL)       ALL

(2)sudo四種別名

'''
sudo四種類型別名:
1、使用者別名:User_Alias
2、主機別名:Host_Alias
3、runas別名:Runas_Alias
4、COMMAND別名:Cmnd_Alias

總結:四類別名都需要大寫,都可以進行巢狀
'''
#1、用一個使用者別名一次性將多個使用者定義為一個使用者組
User_Alias 自定義使用者別名 = 使用者1,使用者2....
User_Alias UA = root,%wheel
User_Alias UB= UA
#注意:使用者名稱還可以是%使用者組名,已經定義好的使用者別名

#2、使用主機別名來定義一組主機
Host_Alias HOSTSNAME(自定義別名) = localhost1,localhost2
#注意,主機名可以是一個ip地址、網路地址、也可以是已經定義了的主機別名

#3、使用其他使用者的身份去執行相關的命令
Runas_Alias RA(自定義別名) = username,uid,%wheel

#4、命令別名
Cmnd_Alias NETWORKING(自定義別名) = /sbin/ifconfig, /bin/ping
#命令可以是目錄,也可以是其他定義好的命令別名

(3)命令使用限制

1、sudo的使用者別名,將多個使用者定義成一個組,進行命令使用限制

2、將使用者新增到指定的組裡,然後給組分配許可權

(4)sudo執行流程

五、擴充套件知識點shell

(1)shell主要分為四類:

互動式shell,等待使用者輸入命令進行互動(日常使用ssh操作伺服器一樣)

非互動式shell,執行shell指令碼,結束後會自動退出

登陸shell,需要輸入使用者名稱和密碼才能進入shell

非登陸shell,不需要輸入使用者和密碼就能進入shell

(2)shell配置檔案

個人配置檔案: ~/.bash_profile ~/.bashrc

全域性配置檔案:/etc/profile /etc/profile.d/*.sh /etc/bashrc

注意:個人優先順序大於全域性

profile類檔案,主要設定環境變數,登陸前執行的指令碼和命令

bashrc類檔案,主要是設定本地變數,定義命令的別名

登陸式shell配置檔案執行順序:/etc/profile -> /etc/profile.d/.sh -> /.bash_profile -> /.bashrc -> /etc/bashrc

非登陸式shell配置檔案執行順序:~/.bashrc -> /etc/bashrc -> /etc/profile.d/.sh