8.15 Linux su命令:用戶間切換(包含su和su -的區(qū)別)
- su 是最簡單的用戶切換命令,通過該命令可以實現(xiàn)任何身份的切換,包括從普通用戶切換為 root 用戶、從 root 用戶切換為普通用戶以及普通用戶之間的切換。普通用戶之間切換以及普通用戶切換至 root 用戶,都需要知曉對方的密碼,只有正確輸入密碼,才能實現(xiàn)切換;從 root 用戶切換至其他用戶,無需知曉對方密碼,直接可切換成功。su 命令的基本格式如下:
[root@CncLucZK ~]# su [選項] 用戶名
# #代表root用戶
$代表普通用戶
- 選項:
- -:當前用戶不僅切換為指定用戶的身份,同時所用的工作環(huán)境也切換為此用戶的環(huán)境(包括 PATH 變量、MAIL 變量等),使用 - 選項可省略用戶名,默認會切換為 root 用戶。
- -l:同 - 的使用類似,也就是在切換用戶身份的同時,完整切換工作環(huán)境,但后面需要添加欲切換的使用者賬號。
- -p:表示切換為指定用戶的身份,但不改變當前的工作環(huán)境(不使用切換用戶的配置文件)。
- -m:和 -p 一樣;
- -c 命令:僅切換用戶執(zhí)行一次命令,執(zhí)行后自動切換回來,該選項后通常會帶有要執(zhí)行的命令。
- 切換用戶后還想在退回到之前的用戶,在終端輸入exit或logouti或使用快捷方式ctrl+d,可以退回到原來用戶,其實ctrl+d也是執(zhí)行的exit命令
[root@CncLucZK ~]# su - zk #"-"代表連帶環(huán)境變量一起切換,不能省略
Last login: Fri Oct 14 23:08:16 CST 2022 on pts/1
[zk@CncLucZK ~]$ su -
Password: #輸入 root 用戶的密碼
Last login: Sat Oct 15 09:33:21 CST 2022 from 116.115.8.116 on pts/0
Last failed login: Sat Oct 15 09:36:06 CST 2022 on pts/0
There was 1 failed login attempt since the last successful login.
[root@CncLucZK ~]#
[zk@CncLucZK ~]$ whoami
zk
[zk@CncLucZK ~]$ su --c 'useradd u-dev2' root
Password:
[zk@CncLucZK ~]$ whoami
zk
[zk@CncLucZK ~]$ su -c 'passwd -S u-dev2' root
Password:
u-dev2 LK 2022-10-15 0 99999 7 -1 (Password locked.)
[zk@CncLucZK ~]$ grep 'u-dev2' /etc/passwd
u-dev2:x:1004:1004::/home/u-dev2:/bin/bash
[zk@CncLucZK ~]$ whoami
zk
[zk@CncLucZK ~]$ su - u-dev1
Password:
Last login: Fri Oct 14 22:25:55 CST 2022 on pts/1
Last failed login: Sat Oct 15 10:39:14 CST 2022 on pts/0
There were 3 failed login attempts since the last successful login.
[u-dev1@CncLucZK ~]$ whoami
u-dev1
[u-dev1@CncLucZK ~]$ exit
logout
[zk@CncLucZK ~]$ whoami
zk
-
su 和 su - 的區(qū)別:注意,使用 su 命令時,有 - 和沒有 - 是完全不同的,- 選項表示在切換用戶身份的同時,連當前使用的環(huán)境變量也切換成指定用戶的。我們知道,環(huán)境變量是用來定義操作系統(tǒng)環(huán)境的,因此如果系統(tǒng)環(huán)境沒有隨用戶身份切換,很多命令無法正確執(zhí)行(無法使用 service 命令等)。如:普通用戶 zk通過 su 命令切換成 root 用戶,但沒有使用 - 選項,這樣情況下,雖然看似是 root 用戶,但系統(tǒng)中的 $PATH 環(huán)境變量依然是 zk的(而不是 root 的),因此當前工作環(huán)境中,并不包含 /sbin、/usr/sbin等超級用戶命令的保存路徑,這就導致很多管理員命令根本無法使用。不僅如此,當 root 用戶接受郵件時,會發(fā)現(xiàn)收到的是 zk用戶的郵件,因為環(huán)境變量 $MAIL 也沒有切換。
-
通過下面這個例子,可直觀的看到 su 和 su - 的區(qū)別:可以看到,在不使用 su - 的情況下,雖然用戶身份成功切換,但環(huán)境變量依舊用的是原用戶的,切換并不完整。
[zk@CncLucZK ~]$ whoami #查詢用戶身份,我是zk
zk
[zk@CncLucZK ~]$ su root #輸入root密碼
Password: #切換到root,但是沒有切換環(huán)境變量。注意:普通用戶切換到root需要密碼
[root@CncLucZK zk]# whoami
root
[root@CncLucZK zk]# echo $MAIL
/var/spool/mail/zk
[root@CncLucZK zk]# env |grep zk #查看環(huán)境變量,提取包含zk的行
#用戶名還是zk,而不是root
USER=zk
PWD=/home/zk
#命令査找的路徑不包含超級用戶路徑
MAIL=/var/spool/mail/zk
LOGNAME=zk
PATH=/home/zk/.local/bin:/home/zk/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
#郵箱、主目錄、目前用戶名還是lamp
8.16 Linux whoami和who am i命令用法和區(qū)別
- whoami 命令和 who am i 命令是不同的 2 個命令,前者用來打印當前執(zhí)行操作的用戶名,后者則用來打印登陸當前 Linux 系統(tǒng)的用戶名。如:將shell切換到root用戶環(huán)境:
[root@CncLucZK ~]# who am i
root pts/0 2022-10-15 09:33 (116.115.8.116)
[root@CncLucZK ~]# whoami
root
#在此基礎(chǔ)上,使用 su 命令切換到 zk 用戶下,再執(zhí)行一遍上面的命令:
[zk@CncLucZK ~]$ who am i
root pts/0 2022-10-15 09:33 (116.115.8.116)
[zk@CncLucZK ~]$ whoami
zk
- 在未切換用戶身份之前,whoami 和 who am i 命令的輸出是一樣的,但使用 su 命令切換用戶身份后,使用 whoami 命令打印的是切換后的用戶名,而 who am i 命令打印的仍舊是登陸系統(tǒng)時所用的用戶名。
執(zhí)行 whoami 命令,等同于執(zhí)行 id -un 命令;執(zhí)行 who am i 命令,等同于執(zhí)行 who -m 命令。
[zk@CncLucZK ~]$ id -un zk [zk@CncLucZK ~]$ who -m root pts/0 2022-10-15 09:33 (116.115.8.116)
-
使用 su 或者 sudo 命令切換用戶身份,whoami會通過,但who am i無法通過。要解釋這背后的運行機制,需要搞清楚什么是實際用戶(UID)和有效用戶(EUID,即 Effective UID)。
-
實際用戶,指的是登陸 Linux 系統(tǒng)時所使用的用戶,因此在整個登陸會話過程中,實際用戶是不會發(fā)生變化的;而有效用戶,指的是當前執(zhí)行操作的用戶,也就是說真正決定權(quán)限高低的用戶,這個是能夠利用 su 或者 sudo 命令進行任意切換的。
-
一般情況下,實際用戶和有效用戶是相同的,如果出現(xiàn)用戶身份切換的情況,它們會出現(xiàn)差異。需要注意的是,實際用戶和有效用戶出現(xiàn)差異,切換用戶并不是唯一的觸發(fā)機制,至于其他的觸發(fā)條件,后續(xù)章節(jié)會做詳細介紹。
-
那么,whoami 和 who am i通常應用在哪些場景中呢?通常,對那些經(jīng)常需要切換用戶的系統(tǒng)管理員來說,經(jīng)常需要明確當前使用的是什么身份;另外,對于某些 shell 腳本,或者需要特別的用戶才能執(zhí)行,這時就需要利用 whoami 命令來搞清楚執(zhí)行它的用戶是誰;甚至還有一些 shell 腳本,一定要某個特別用戶才能執(zhí)行,即便使用 su 或者 sudo 命令切換到此身份都不行,此時就需要利用 who am i 來確認。
8.22 添加批量用戶
- 添加和刪除用戶對每位Linux系統(tǒng)管理員都是輕而易舉的事,比較棘手的是如果要添加幾十個、上百個甚至上千個用戶時,我們不太可能還使用useradd一個一個地添加,必然要找一種簡便的創(chuàng)建大量用戶的方法。Linux系統(tǒng)提供了創(chuàng)建大量用戶的工具,可以讓您立即創(chuàng)建大量用戶,方法如下:
- 先編輯一個文本用戶文件:每一列按照
/etc/passwd
密碼文件的格式書寫,要注意每個用戶的用戶名、UID、宿主目錄都不可以相同,其中密碼欄可以留做空白或輸入x號。一個范例文件user.txt內(nèi)容如下:
[root@CncLucZK test]# cat user.txt
user01:x:1010:1010:user dec1:/home/user01:/bin/bash
user02:x:1003:1011:user dec2:/home/user02:/bin/bash
- 以root身份執(zhí)行命令 /usr/sbin/newusers,從剛創(chuàng)建的用戶文件user.txt中導入數(shù)據(jù),創(chuàng)建用戶
[root@CncLucZK test]# newusers < user.txt
- 然后可以執(zhí)行命令
vipw
或vi /etc/passwd
檢查/etc/passwd
文件是否已經(jīng)出現(xiàn)這些用戶的數(shù)據(jù),并且用戶的宿主目錄是否已經(jīng)創(chuàng)建。
[root@CncLucZK test]# newusers < user.txt
[root@CncLucZK test]# grep user /etc/passwd /etc/shadow
...
/etc/passwd:user01:x:1010:1010:user dec1:/home/user01:/bin/bash
/etc/passwd:user02:x:1003:1011:user dec2:/home/user02:/bin/bash
/etc/shadow:user01:$6$4nRCI2BqG8/$MUVJvj4AUHvCigCJa209ALwmtlqqb7x89/akPLQV4C5tvtxQSSyGF.N74HQimPyAezJl9riS.Q/0vHCJ1u1Nm1:19281:0:99999:7:::
/etc/shadow:user02:$6$Lw1xW/zJ..P/i$S075Qq.758w3Q9XdPM0cVWVI.QDKehsOHnb5EbVhl4LrDTKa/RLFx2GHhhQ2HCDIghuNJJbpSEx8vINhXvnnw.:19281:0:99999:7:::
- 執(zhí)行命令/usr/sbin/pwunconv:將 /etc/shadow 產(chǎn)生的 shadow 密碼解碼,然后回寫到 /etc/passwd 中,并將/etc/shadow的shadow密碼欄刪掉。這是為了方便下一步的密碼轉(zhuǎn)換工作,即先取消 shadow password 功能。
[root@CncLucZK test]# pwunconv
[root@CncLucZK test]# grep user /etc/passwd /etc/shadow
/etc/passwd:user01:$6$4nRCI2BqG8/$MUVJvj4AUHvCigCJa209ALwmtlqqb7x89/akPLQV4C5tvtxQSSyGF.N74HQimPyAezJl9riS.Q/0vHCJ1u1Nm1:1010:1010:user dec1:/home/user01:/bin/bash
/etc/passwd:user02:$6$Lw1xW/zJ..P/i$S075Qq.758w3Q9XdPM0cVWVI.QDKehsOHnb5EbVhl4LrDTKa/RLFx2GHhhQ2HCDIghuNJJbpSEx8vINhXvnnw.:1003:1011:user dec2:/home/user02:/bin/bash
grep: /etc/shadow: No such file or directory
- 編輯每個用戶的密碼對照文件:格式為:
用戶名:密碼
實例文件 passwd.txt
內(nèi)容如下:文章來源:http://www.zghlxwxcb.cn/news/detail-403377.html
user01:123456
user02:123456
- 以 root 身份執(zhí)行命令 /usr/sbin/chpasswd:創(chuàng)建用戶密碼,
chpasswd
會將經(jīng)過/usr/bin/passwd
命令編碼過的密碼寫入/etc/passwd
的密碼欄。
確定密碼經(jīng)編碼寫入/etc/passwd的密碼欄后。[root@CncLucZK test]# vi passwd.txt
[root@CncLucZK test]# chpasswd < passwd.txt
[root@CncLucZK test]# grep user /etc/passwd /etc/shadow
/etc/passwd:user01:$6$eFL/r/bByqMA$U1RmOwaGvKnR6eYc3LrWLij2r6xoSvVMZQq/COOgMKDkkkas8JdjOHZzmxPq07vqk/s2lkYYwyZbLyjWGrBv21:1010:1010:user dec1:/home/user01:/bin/bash
/etc/passwd:user02:$6$YftLR/Ot$INIIidOOOC3DPElJIbWaof5ZJKs39H885PuSdjqroIINca9olA6s4AJ/vCKagwWwsw.04bTOwYJzTU1qMEep6.:1003:1011:user dec2:/home/user02:/bin/bash
#密碼和初始密碼不一樣了,說明passwd.txt中的密碼已經(jīng)被轉(zhuǎn)碼到/etc/passwd文件中
- 確定密碼經(jīng)編碼寫入/etc/passwd的密碼欄后:執(zhí)行命令 /usr/sbin/pwconv 將密碼編碼為 shadow password,并將結(jié)果寫入 /etc/shadow。
[root@CncLucZK test]# pwconv
[root@CncLucZK test]# grep user /etc/passwd /etc/shadow
/etc/passwd:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
/etc/passwd:zk:x:1002:1002:commons user:/home/zk:/bin/bash
/etc/passwd:u-dev1:x:1003:1003:devloper user:/home/u-dev1:/bin/bash
/etc/passwd:user01:x:1010:1010:user dec1:/home/user01:/bin/bash
/etc/passwd:user02:x:1003:1011:user dec2:/home/user02:/bin/bash
/etc/shadow:user01:$6$eFL/r/bByqMA$U1RmOwaGvKnR6eYc3LrWLij2r6xoSvVMZQq/COOgMKDkkkas8JdjOHZzmxPq07vqk/s2lkYYwyZbLyjWGrBv21:19281:0:99999:7:::
/etc/shadow:user02:$6$YftLR/Ot$INIIidOOOC3DPElJIbWaof5ZJKs39H885PuSdjqroIINca9olA6s4AJ/vCKagwWwsw.04bTOwYJzTU1qMEep6.:19281:0:99999:7:::
- 這樣就完成了大量用戶的創(chuàng)建了,之后可以到/home下檢查這些用戶宿主目錄的權(quán)限設(shè)置是否都正確,并登錄驗證用戶密碼是否正確。
[root@CncLucZK home]# su - user01
[user01@CncLucZK ~]$ su - user02
Password:
Last login: Sun Oct 16 15:10:50 CST 2022 on pts/0
#user01和user02可以正常切換
[user02@CncLucZK ~]$ pwd
/home/user02
#可以正常執(zhí)行/bin/bash命令
參考文獻:
Linux su命令:用戶間切換(包含su和su -的區(qū)別)
Linux 用戶和用戶組管理文章來源地址http://www.zghlxwxcb.cn/news/detail-403377.html
下一篇:Linux學習-29-用戶組信息相關(guān)命令
到了這里,關(guān)于Linux學習-28-用戶間切換相關(guān)命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!