Linux使用者管理

老虎死了还有狼發表於2024-08-29

Linux使用者管理

  • Linux下面我們管理系統透過對應的使用者.
  • 我們當前是root使用者.我們就需要有不同型別的使用者,然後透過不同的使用者管理系統.
  • 未來工作中的70%故障,安全事故,基本內部誤操作導致.
  • Linux是多使用者系統,多個使用者登入一般不會互相影響.

1. 分類

UID,GID

  • ⭐ ⭐ ⭐ ⭐ ⭐ UID:User ID使用者id號,類似於身份證號碼.
  • GID:Group ID使用者組號,類似於戶口本號碼.
Linux使用者分類        UID        說明
root                 0         超級使用者,管理員使用者
虛擬使用者(傀儡使用者)    1-999      用於保證服務/程序正常執行的使用者,這種使用者無法直接使用.
普通使用者             >= 1000   開始沒有root那麼高許可權的使用者,只能管理自己的家目錄

2.相關檔案

  • 新增使用者,系統會修改這幾個檔案的內容.
  • 不要直接修改這幾個檔案.
檔案               說明
/etc/passwd       不存放密碼,用於存放使用者的資訊.UID,GID,家目錄,命令直譯器.
/etc/group        使用者組資訊.
/etc/shadow       密碼資訊.密碼過期.透過man 5 shadow檢視幫助
/etc/gshadow      幾乎不用,使用者組密碼.

/etc/passwd ⭐⭐⭐⭐⭐
主要能看出與關注:使用者名稱,UID,家目錄,命令直譯器即可(是否為虛擬使用者).

1:統計/etc/passwd中可以登入系統的使用者的數量
grep '/bin/bash' /etc/passwd | wc -l

2:統計/etc/passwd中虛擬使用者數量(命令直譯器非/bin/bash)
grep -v '/bin/bash' /etc/passwd |wc -l

3:統計排除root使用者後可登入系統的使用者數量(命令直譯器為/bin/bash)
grep -v '^root' /etc/passwd |grep '/bin/bash' |wc -l
# ^ 以...開頭的行,三劍客

3. 核心命令

3.1 增:新增使用者

紅帽系列系統中:useradd,adduser一致,新增普通使用者,虛擬使用者.
debian系列系統中: useradd新增使用者,預設命令直譯器/bin/sh,需要指定-s/bin/bash

useradd選項     說明
-u             # 指定uid
-s             # 指定命令直譯器,預設是/bin/bash(紅帽類系統) ubt/debian 要指定-s /bin/bash
-m             # 建立家目錄(ubt需要指定)
-M             # 不建立家目錄.

紅帽系列新增使用者user1,設定密碼,切換使用者⭐ ⭐ ⭐ ⭐ ⭐

#1.新增使用者
useradd user1
#2.設定密碼
passwd user1 #passwd 使用者名稱只能root使用者使用,其他使用者只能執行
passwd
#3.切換使用者 switch user
su - user1
#4.檢視當前使用者名稱 我是誰
whoami
#5.退出當前使用者
ctrl + d #或者輸入logout/exit

debian系列新增使用者⭐ ⭐ ⭐ ⭐ ⭐

# 指定命令直譯器和要求建立家目錄
[root@ubuntu2204 ~]# useradd -s /bin/bash -m xk2
[root@ubuntu2204 ~]# passwd xk2
New password: 
Retype new password: 
passwd: password updated successfully

su - 與 su區別
su切換使用者 switch user切換使用者.(比如從root切換到user1普通使用者時,user所在家目錄還在/root下)
su - 是su命令的選項.系統在切換使用者時更新環境變數(推薦)

新增虛擬使用者vm1,指定uid 9999.⭐ ⭐ ⭐ ⭐ ⭐

# 潛臺詞:虛擬使用者不需要建立家目錄,指定命令直譯器為/sbin/nologin
[root@Kylin-V10-sp3 ~]# useradd -u 9999 -s /sbin/nologin -M vm1
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# grep vm1 /etc/passwd
vm1:x:1001:1001::/home/vm1:/sbin/nologin
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# tree /home/
/home/
└── xk2

非互動修改密碼(passwd為互動輸入密碼)

# 非互動: 一個回車/一鍵自動化實現功能
####紅帽系統####
# 方法01: passwd選項實現(主要說這個)
# passwd --stdin非互動模式,透過管道獲取密碼.
[root@Kylin-V10-sp3 ~]# echo 1 | passwd --stdin user1
###紅帽系統+ubt######
#方法02: 專用的批次修改密碼的命令chpasswd
[root@ubuntu2204 ~] cat pass.txt |chpasswd
[root@ubuntu2204 ~]# cat pass.txt
xk:1
xk2:2

3.2 刪:刪除使用者

userdel預設不會刪除家目錄,需要加上引數-r 
[root@Kylin-V10-sp3 ~]# userdel -r xk2
如果刪除失敗,可以透過kill結束對應的程序,佔用使用者的程序.
#推薦大家透過在/etc/passwd進行註釋操作,替代userdel刪除.避免使用userdel.

3.3 改

修改已有使用者的資訊,很少用 瞭解即可 usermod
usermod選項與useradd類似

[root@ubuntu2204 ~]# usermod -c 'xk linux'  xk   # 給xk使用者新增註釋資訊"xk linux"
[root@ubuntu2204 ~]# 
[root@ubuntu2204 ~]# id xk
uid=1000(xk) gid=1000(xk) groups=1000(xk),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd)
[root@ubuntu2204 ~]# 
[root@ubuntu2204 ~]# usermod -G root xk  # 改變使用者組
[root@ubuntu2204 ~]# 
[root@ubuntu2204 ~]# id xk
uid=1000(xk) gid=1000(xk) groups=1000(xk),0(root)
[root@ubuntu2204 ~]# 
[root@ubuntu2204 ~]# grep xk /etc/passwd
xk:x:1000:1000:xk linux:/home/xk:/bin/bash
xk2:x:1001:1001::/home/xk2:/bin/bash
[root@ubuntu2204 ~]# 
[root@ubuntu2204 ~]# usermod -s /sbin/nologin xk   # 改變直譯器資訊
[root@ubuntu2204 ~]# 
[root@ubuntu2204 ~]# grep xk /etc/passwd
xk:x:1000:1000:xk linux:/home/xk:/sbin/nologin
xk2:x:1001:1001::/home/xk2:/bin/bash
[root@ubuntu2204 ~]#

3.4 查:檢視使用者的資訊

查詢使用者資訊指令   說明
whoami           # 顯示當前使用者名稱字
id               # 檢視使用者的資訊或檢查使用者是否存在.
w                # 檢視誰登入了系統並在做什麼
last             # 檢視使用者的登入情況(誰,哪裡,登入時間,登出時間)
lastlog          # 檢視所有使用者的登入情況


查詢使用者資訊指令  說明                                       應用場景
whoami     顯示當前使用者名稱字                                  # 檢視使用者,寫入指令碼劇本.
id         檢視使用者的資訊或檢查使用者是否存在.                  # 檢查使用者是否存在.
w          檢視誰登入了系統並在做什麼檢視系統登入了哪些使用者?    # 排查與定位系統是否繁忙(平均負載)?
last       檢視使用者的登入情況(誰,哪裡,登入時間,登出時間)       # 檢視歷史登入資訊.
lastlog    檢視所有使用者的登入情況                             # 檢視歷史登入資訊.

檢查使用者是否存在

[root@Kylin-V10-sp3 ~]# id xk2
使用者id=1000(xk2) 組id=1000(xk2) 組=1000(xk2)
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# id user3
id: “user3”:無此使用者
[root@Kylin-V10-sp3 ~]# 

檢視此時此時系統中有誰登入了?並且正在做啥?

# 登入使用者名稱名字(USER)
# 登入使用者來自於哪裡(FROM)
# 登入使用者正在做什麼(WATH)
[root@ubuntu2204 ~]# w
 16:58:44 up  6:31,  3 users,  load average: 0.08, 0.04, 0.01
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
xk       tty1     -                16:58   20.00s  0.05s  0.01s -bash
root     pts/0    10.0.0.1         16:57    2.00s  0.01s  0.00s w
root     pts/1    10.0.0.1         16:58   12.00s  0.01s  0.00s tail -f /etc/passwd
[root@ubuntu2204 ~]# 
[root@ubuntu2204 ~]# tty
/dev/pts/0
[root@ubuntu2204 ~]# 

# tty表示終端  tty1表示本地登入
# WHAT -bash表示當前沒做操作
# FROM  - 表示本地的登入

其他命令

[root@Kylin-V10-sp3 ~]# whoami
root
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# last | head -3    # 檢視所有使用者登入,登出情況.是否有異常登入
root     pts/2        10.0.0.1         Wed Aug 28 12:52   still logged in
root     pts/1        10.0.0.1         Wed Aug 28 11:42 - 14:15  (02:33)
root     pts/0        10.0.0.1         Sun Aug 25 12:25 - 14:17 (3+01:52)
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# lastlog | head -5   # 所有使用者最近1次登入情況.
使用者名稱           埠     來自             最後登入時間
root             pts/2    10.0.0.1         三 8月 28 12:52:11 +0800 2024
bin                                        **從未登入過**
daemon                                     **從未登入過**
adm                                        **從未登入過**
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# export LANG=C
[root@Kylin-V10-sp3 ~]#              
[root@Kylin-V10-sp3 ~]# lastlog | head -5
Username         Port     From             Latest
root             pts/2    10.0.0.1         Wed Aug 28 12:52:11 +0800 2024
bin                                        **Never logged in**
daemon                                     **Never logged in**
adm                                        **Never logged in**
[root@Kylin-V10-sp3 ~]# 

4. 使用者組

5. 安全防護

  • 給危險命令設定別名,暫時無法使用rm。shell程式設計可以寫回收站指令碼,代替rm命令
  • 給普通使用者設定sudo許可權,以root許可權執行命令
  • 使用者操作審計,堡壘機,跳板機

5.1 sudo提權

5.1.1 應用場景
  • 普通使用者需要以root許可權執行命令的時候或檢視沒有許可權的檔案的時候.
  • 使用sudo實現需求.
  • 也就是說想讓普通使用者臨時成為root
5.1.2 案例
# 1 授權xk使用者檢視日誌許可權
選擇好命令,head/tail/grep/less/more/cat
var log messages
var log secure
..
root使用者進行授權(尚方寶劍)
xk使用者使用(亮劍)
visudo #命令
100行
寫入配置
xk ALL=(ALL) /bin/cat, /bin/head, /bin/less, /bin/more,
/bin/tail
儲存
修改xk密碼
echo 密碼 | passwd --stdin oldboy

tail /var/log/secure
sudo tail /var/log/secure
輸入當前使用者密碼

# 2: 授權devops-li所有許可權並且不需要輸入密碼
# root授權
devops-li ALL=(ALL) NOPASSWD: ALL 

# devops-li測試
# 檢視當前使用者具有什麼sudo許可權
sudo -l

#然後切換到root
sudo su - 直接切換到root不需要密碼.
su - root 或su - 一個意思.切換為root.

# ubt/debian配置sudo
vim /etc/sudoers
在env_reset這行上面寫上,
Defaults editor=/usr/bin/vim
Defaults env_reset
visudo的時候預設使用的是nano編輯器
5.1.3 sudo總結

能夠說出sudo應用場景.
能夠給普通使用者配置sudo許可權執行指定的命令.
能夠給普通使用者配置sudo許可權執行所有命令並且不需要密碼.
visudo === vi /etc/sudoers
後面直接新增到末尾.

5.2 別名

用於給命令設定暱稱.
用途:
🅰 給危險命令加層防護. ✅
🅱 新增方便.給ls -l 設定別名ll

5.2.1 檢視系統已有別名

# Ubuntu
[root@ubuntu2204 ~]# alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
[root@ubuntu2204 ~]# 

# kylin 
[root@Kylin-V10-sp3 ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
[root@Kylin-V10-sp3 ~]# 

5.2.2 設定別名 ⭐⭐⭐⭐只要執行rm命令,實際執行echo命令輸出警告 pls do not use rm

# 臨時配置別名
alias rm='echo pls do not use rm'
# 測試別名
touch /test/1.txt
rm -fr /test/1.txt #發現無法刪除
# 臨時取消別名,使命令可用
\rm -fr /test/1.txtt


#(修改/etc/profile檔案)永久配置別名
#1.修改配置檔案 /etc/profile
vim /etc/profile
寫入到最後一行
alias rm='echo pls do not use rm'
#2. 自己配置的rm別名與系統配置的rm別名衝突
#修改~/.bashrc裡面關於rm的別名(只限於rm別名的時候)
vim ~/.bashrc
找到rm的那一行,行首新增個#註釋即可.
#3. 別名或環境變數生效
source /etc/profile
#4. 最後測試(重新連線測試)
alias rm

5.2.3 配置grep,egrep別名,增加顏色

命令列臨時測試
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
永久生效,/etc/profile
重新登入並生效,檢查

5.3 Xshell無法使用

  • 備用方案1:git bash
  • 備份方法2:powershell
  • 蘋果系統(linux,unix)
上面各種系統通用的2個命令
ssh (遠端連線)  ssh -p 22 root@10.0.0.200
scp (傳輸檔案)  scp -P 22 -r KeePass-2.50.rar root@10.0.0.200:/home/

5.4 /etc/skel/

5.4.1 詳解

  • 目錄下存放新使用者的家目錄模板.
  • 新增新使用者的時候會複製/etc/skel下面所有內容到新使用者的家目錄.
  • 應用場景:
    想讓所有新使用者,家目錄下帶個說明檔案.
    家目錄被你刪除了,透過複製/etc/skel下面內容恢復.
[root@kylin-v10-sp3 ~]# ll -a /etc/skel/
總用量 24
drwxr-xr-x. 2 root root 62 8月 23 12:14 .
drwxr-xr-x. 81 root root 8192 9月 4 08:18 ..
-rw-r--r--. 1 root root 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 root root 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 root root 231 4月 1 2020 .bashrc

5.4.2 故障案例:使用者不小心誤刪除家目錄,導致命令列變成-bash-4.2$形式⭐⭐⭐⭐⭐⭐

# 故障模擬(centos7)
第1步:註釋掉/etc/profile中的 PS1的部分.
加上井號即可:
vim /etc/profile
G到最後一行,如果沒有PS1,則不用修改直接到第2步即可.
#export PS1=xxxxxxxxxx
第2步:新增普通使用者
useradd user1
第3步:切換使用者,切換到user1使用者
su - user1
第4步驟:刪根
rm -f ~/.bash*
第5步驟:退出使用者,重新切換到oldboy
按ctrl+d退出使用者
su - user1重啟切換到oldboy即可

# 故障原因:
使用者誤刪除家目錄下面的幾個隱藏檔案導致的.
.bash_profile 和.bashrc
命令列PS1的樣子沒了.

# 故障解決
從/etc/skel/下面重新複製即可(出故障的問題)
cp /etc/skel/.bash* ~
重新登入即可.

5.5 堡壘機

核心應用場景:

  • 加強網站,系統安全(為了等保測評).
  • 對使用者操作,審計,限制(sudo),遮蔽命令.

http://docs.jumpserver.org 幫助與部署文件.
http://demo.jumpserver.org 演示站點.

相關文章