十三、su命令、sudo命令、限制root遠程登錄
一、su命令
格式為su [-] username,後面可以跟-,也可以不跟。普通用戶的su命令不加username時,就是切換到root用戶。root用戶也可以使用su命令切花到普通用戶。該命令加上-後,會初始化當前用戶的各種環境變量。示例加與不加-的區別,命令:
# su user1
[user1@yaowei-01 root]$ pwd
/root
[user1@yaowei-01 root]$ ls
ls: 無法打開目錄.: 權限不夠
[user1@yaowei-01 root]$ su root
密碼:
[root@yaowei-01 ~]# su - user1
上一次登錄:二 2月 6 20:18:12 CST 2018pts/0 上
[user1@yaowei-01 ~]$ pwd
/home/user1
[user1@yaowei-01 ~]$ ls -la
總用量 12
drwx------. 2 user1 grp1 62 1月 30 18:46 .
drwxr-xr-x. 4 root root 32 2月 6 18:50 ..
-rw-r--r--. 1 user1 grp1 18 8月 3 2017 .bash_logout
-rw-r--r--. 1 user1 grp1 193 8月 3 2017 .bash_profile
-rw-r--r--. 1 user1 grp1 231 8月 3 2017 .bashrc
不加-表示還在root用戶下,沒有徹底切換過來,加-後可以發現在自己的家目錄下/home/user1,在自己的家目錄下就會加載自己家目錄下的配置文件,比如ls -la。
因此,切記切換用戶的時候要加上“-”,這樣切換才徹底。
用法:
root用戶下,以普通用戶的身份執行命令:
[root@yaowei-01 ~]# su - -c "touch /tmp/13.txt" user1
[root@yaowei-01 ~]# ls -lt /tmp/|head
總用量 0
-rw-r--r--. 1 user1 grp1 0 2月 6 20:28 13.txt
-rw-r--r--. 1 user1 grp1 0 2月 6 20:27 12.txt
drwx------. 3 root root 17 2月 3 03:57 systemd-private-6777d80f894446f799d9a6e27f054b68-vmtoolsd.service-aSrK8x
drwx------. 3 root root 17 2月 3 03:57 systemd-private-6777d80f894446f799d9a6e27f054b68-vgauthd.service-0Lc2Vi
drwxr-xr-x. 2 root root 19 1月 30 19:10 test
drwx------. 3 root root 17 1月 27 03:22 systemd-private-e8721cff7b864cf6acc2f0604f95bb97-vmtoolsd.service-8ks2ZG
drwx------. 3 root root 17 1月 27 03:22 systemd-private-e8721cff7b864cf6acc2f0604f95bb97-vgauthd.service-T7GMmu
drwx------. 3 root root 17 1月 26 04:41 systemd-private-13ad930731b445abbdd9798b690f2917-vmtoolsd.service-lslC0Q
drwx------. 3 root root 17 1月 26 04:41 systemd-private-13ad930731b445abbdd9798b690f2917-vgauthd.service-iI6GMz
切換的用戶若沒有系統的配置文件,前綴會顯示.bash字樣,可進入系統的模板目錄:/etc/skel/,復制下面的".bash"文件:
# ls -la /etc/skel
總用量 24
drwxr-xr-x. 2 root root 62 1月 22 01:48 .
drwxr-xr-x. 74 root root 8192 2月 6 18:57 ..
-rw-r--r--. 1 root root 18 8月 3 2017 .bash_logout
-rw-r--r--. 1 root root 193 8月 3 2017 .bash_profile
-rw-r--r--. 1 root root 231 8月 3 2017 .bashrc
# cp /etc/skel/.bash* /home/user5/ 復制到它的家目錄下去,比如user5。
# chown -R user5:user5 /home/user5 然後不要忘記了更改所有者及所屬組,/home/user5可以用!$(上一條命令的最後一個參數)代替。
復制過去後,再登錄查看,前綴即可正常顯示。
二、sudo命令
sudo命令:只有root用戶可以使用的命令,普通用戶若想使用sudo命令,需要root預先設定。可以使用visudo命令編輯它的配置文件/etc/sudoers。若沒有visudo這個命令,使用命令yum install -y sudo安裝。
root默認支持sudo,因為這個文件中有一行root ALL=(ALL)ALL。
在該行下面加入test ALL=(ALL)ALL
就可以讓test用戶擁有sudo的特權。從左到右,第一段test這裏為一個用戶,指定讓哪個用戶擁有sudo特權,第二段ALL=(ALL),左邊的ALL指的是所有的主機,右邊的ALL指的是獲取哪個用戶的身份,第二段幾乎不用配置;第三段設定可以使用sudo命令的有哪些。
visudo這個命令可以檢測錯誤,因此建議使用這個命令。
使用visudo命令編輯/etc/sudoers配置文件,必須要使用root用戶。
操作方法:進入這個文件,然後在root下面加上一行。示例:
## Allow root to run any commands anywhere (整個文件中最核心的一個項目)
root ALL=(ALL) ALL
user1 ALL=(ALL) ALL(可以自定義一些命令,如ls,mv,cat,這些命令需要些絕對路徑,否則不可用,找不到文件)
此時方可驗證user1的權限了,方法如下:(如下操作是在root賬戶下進行的)
# su user1
[user1@yaowei-01 root]$ ls
ls: 無法打開目錄.: 權限不夠
[user1@yaowei-01 root]$ sudo ls
我們信任您已經從系統管理員那裏了解了日常註意事項。
總結起來無外乎這三點:
#1) 尊重別人的隱私。
#2) 輸入前要先考慮(後果和風險)。
#3) 權力越大,責任越大。
[sudo] user1 的密碼:
123 1.txt anaconda-ks.cfg dir3 dir4
小技巧:在文件內,":set nu"可以顯示文件內的行號。
使用sudo時,要輸入自身的密碼,也可設置不要密碼。如下的user2:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
user1 ALL=(ALL) ALL
user2 ALL=(ALL) NOPASSWD: ALL:
這個下面也可以加入別名的組。
host可以設置別名,用戶也可以。alias命令。
獲取到的命令那裏
由於切換到user1用戶後當前目錄還是root,user1沒有任何權限,所以ls查看時,提示權限不夠。然而使用命令sudo ls輸入user1自身的密碼後,就有權限了。初次使用sudo命令時,會出現上面的一大段提示,再次使用sudo命令時則不再提示。
若每增加一個用戶就設置一行,這樣就很麻煩,所以可以這樣設置:
# %wheel ALL=(ALL)
將# %wheel ALL=(ALL)前面的#去掉,讓這一行生效。它的意思是,wheel這個組的所有用戶都擁有了sudo的權力。接下來,只要把需要設置sudo權限的用戶加入到wheel這個組即可。如下所示:
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
新加入別名的組,加入到這一行命令下面,如下:
# User_Alias ADMINS = jsmith, mikem
實用案例:
我們的需求是把Linux服務器設置成這個樣子:只允許使用普通賬戶登錄,登錄後,可以不輸入密碼就能用sudo切換到root賬戶。配置方法是:
# visudo
在文件最後加入三行:
User_Alias USER_SU = user1, user2 user3
Cmnd_Alias SU = /usr/bin/su
USER_SU ALL=(ALL)NOPASSWD:SU
第一行設定了一個user別名,其實這個USER_SU相當於是user1,user2,user3三個賬戶;第二行設定了一個命令別名,SU相當於/usr/bin/su;
第三行,保存配置文件後,使用user1、2、3這三個賬戶登錄Linux。
三、限制root遠程登錄
/etc/ssh/sshd_config為sshd服務的配置文件,默認允許root賬戶用過ssh遠程登錄Linux。要想限制root用戶遠程登錄Linux,操作方法為:修改配置文件/etc/ssh/sshd_config,在文件中查找#PermitRootLogin yes並修改為PermitRootLogin no。保存配置文件後,重啟sshd服務,如下所示:
# systemctl restart sshd.service
需註意的是,這個方法只適用於通過ssh遠程登錄Linux的情況。
十三、su命令、sudo命令、限制root遠程登錄