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