iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
IT管理

Rocky Linux 8:系統管理與維運實戰系列 第 9

第8章:管理本地端主機之使用者與群組(二)

前言

在上一章節中,筆者講解了一般使用者的資訊、儲存密碼還有群組等基本概念,本章節繼續延伸上一章節的概念,繼續講解作業系統上的使用者概念與管理。

得到超級使用者權限

什麼是超級使用者?所謂的超級使用者指的是,整個Linux作業系統中,最高權限的使用者,而這個最高權限使用者只有一個,就叫做root,這個使用者可以存取所有作業系統上的任何動作與事情,像是存取所有的檔案系統,機器的操作等。

切換使用者

我們可以使用su指令來切換使用者,相關的指令執行方式如下:

[rockylinux@workstation ~]$ su - rockylinux
Password:
[rockylinux@workstation ~]$ exit
logout

從上面的指令執行的訊息可以知道,首先先用su - rockylinux切換到名為rockylinux的使用者,接著輸入密碼,當輸入密碼成功且正確無誤之後,則可以進入到rockylinux的這個使用者並進入指定的Shell中,以及進入到一開始的指定家目錄為開始的工作目錄,上述這些都是定義在/etc/passwd之檔案裏面,接著就可以輸入與執行各式各樣的指令,當執行完指令之後,輸入exit則就離開這個shell了,就會回到本來的使用者的shell了,如果使用下列的方式切換使用者,則會進入到root使用者,即超級使用者,相關指令執行的方式與結果如下:

[rockylinux@workstation ~]$ su -
Password:
[root@workstation ~]#

上述的操作是在workstation虛擬機器上面完成的,而這台虛擬機器的root使用者密碼為:rocky,而利用上述這樣的方式,便可以進入到root這個使用者了,同時上述的指令也等價於su - root,那要注意一點就是,su rootsu - root這兩個指令都是切換使用者,但是切換後的使用者模式與行為會不太相同,前者指的是切換使用者過去,但是使用者相關的環境變數仍是之前切換前的使用者的,後者指的是完全的切換使用者,包含使用者的環境變數等都一併切換過去,相關的指令執行後的行為比較如下面的輸出文字訊息:

[rockylinux@workstation ~]$ su root
Password:
[root@workstation rockylinux]# pwd
/home/rockylinux
[root@workstation rockylinux]# echo $USER
rockylinux
[root@workstation rockylinux]# exit
exit
[rockylinux@workstation ~]$ su - root
Password:
[root@workstation ~]# pwd
/root
[root@workstation ~]# echo $USER
root
[root@workstation ~]#

從上面的指令輸出,筆者相信差別不難看出,就不言而喻了。

使用sudo來執行指令

前面的小節介紹了有關於切換使用者並切換到超級使用者root,那一般來說,這樣對於使用者很不方便,因為有可能一般的使用者在存取主機的時候,執行指令的需要,有時候需要有root使用者權限才得以執行,基本上系統管理者可以協助一般使用者做到,那有沒有其他的方式也可以讓一般使用者自己做到呢?答案是有的,那就是sudo這個指令,那這個意思是,讓一般使用者暫時取得root使用者權限並使用root使用者的權限執行sudo後面的指令,在使用者建立的時候,預設都不會有sudo指令可以使用,需要做一些設定才可以做到,在Rocky Linux、CentOS與RedHat等Linux發行版本作業系統中,主要有兩種方式可以將一般使用者設定成可以使用sudo指令,相關的方法如下列表:

  • 將使用者加入到wheel群組中:這個群組是一個特殊的使用者群組,當作業系統安裝好之後便會存在,當一般的使用者加入到這個群組之後,便可以有執行sudo的指令權限了。
  • 設定sudo之設定檔案:可以建立一個設定檔案並存放到/etc/sudoers.d/之目錄底下。
  • 使用visudo指令編輯sudo相關的設定檔,這個方式筆者不建議,原因是這是屬於底層的sudo設定檔,若不熟悉語法的話,很容易將整個sudo設定檔案改到有問題進而影響整個作業系統的運作與功能,因此筆者在這邊建議:凡事要設定sudo相關的指令,可以使用上述的兩個指令即可。

設定sudo設定檔案

假設要將rockylinux加入到可以使用sudo命令的話,第一種方式就是將此使用者加入到wheel群組,相關的執行指令輸出訊息如下:

[root@workstation ~]# gpasswd -a rockylinux wheel
Adding user rockylinux to group wheel
[root@workstation ~]# cat /etc/group | grep wheel
wheel:x:10:rockylinux

從上述的指令可以知道,這裡使用了gpasswd指令並搭配-a參數使用者以附加的方式加到wheel之群組中,接著用cat指令將/etc/group檔案印出並搭配pipeline與grep指令找到目前wheel群組相關的資訊,就可以發現rockylinux使用者已經順利加入進去,並可以使用sudo命令了,而更多的gpasswd指令用法會在後面的章節提到,另外一個方法則是編寫一個檔案叫做rockylinux並存放到/etc/sudoers.d/之目錄底下,相關的用法如下:

[root@workstation ~]# echo "rockylinux ALL=(ALL) ALL" > /etc/sudoers.d/rockylinux
[root@workstation ~]# gpasswd -d rockylinux wheel
Removing user rockylinux from group wheel
[root@workstation ~]# logout
[rockylinux@workstation ~]$ sudo -i
[sudo] password for rockylinux:
[root@workstation ~]# cat /etc/sudoers | grep wheel
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
# %wheel        ALL=(ALL)       NOPASSWD: ALL
[root@workstation ~]#

從上面的執行指令結果輸出來看,首先先使用echo這個指令將rockylinux ALL=(ALL) ALL這個指令印出,並重新導向輸出並用覆蓋的方式到/etc/sudoers.d/rockylinux檔案中,這個設定指的是,rockylinux這個使用者可以利用sudo執行任何的指令,若是要指定成群組的話則可以改成:%group ALL=(ALL) ALL,而意思就會變成只要是這個群組的使用者,便可以使用sudo指令執行任何命令,在這個設定下,一開始使用sudo指令都需要輸入當前使用者的密碼進行驗證,之後執行sudo有5分鐘的時間都不用再輸入使用者,當時間到期之後,便要再次輸入使用者密碼。接著為了要測試sudo功能是否已經設定給rockylinux,所以先用gpasswd指令並搭配-d之參數將rockylinux使用者從wheel群組移出,接著離開root使用者之shell,回到rockylinux使用者,接著使用sudo -i,暫時取得root使用者權限並進入到互動式模式,即shell模式,就可以看到已經成功進入到root使用的shell了,同時使用cat /etc/sudoers | grep wheel指令來解釋為什麼wheel這個群組能夠讓加入到裡面的使用者使用sudo的原因了。
若一般使用者無法使用sudo指令的話,則會看到下列的訊息:

[rockylinux@workstation ~]$ sudo -i
[sudo] password for rockylinux:
rockylinux is not in the sudoers file.  This incident will be reported.
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$

若是將rockylinux ALL=(ALL) ALL設定改成rockylinux ALL=(ALL) NOPASSWD: ALL,則是在使用sudo指令的時候,都不需要輸入當前使用者的密碼做驗證了,相關的執行指令輸出訊息如下:

[rockylinux@workstation ~]$ su - root
Password:
[root@workstation ~]#
[root@workstation ~]# echo "rockylinux ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/rockylinux
[root@workstation ~]# logout
[rockylinux@workstation ~]$ sudo -i
[root@workstation ~]#

筆者在這邊不建議使用rockylinux ALL=(ALL) ALL這類指令設定使用者使用sudo,原因是因為這樣就會變成創立一個另一個root使用者出來,造成管理上的問題也容易有資安上的問題,為了要解決這個問題,可以限縮使用者使用sudo的範圍,比如說指定rockylinux可以用sudo來執行cat這個指令,相關的指令與設定方式如下:

[rockylinux@workstation ~]$ su - root
Password:
[root@workstation ~]# echo "rockylinux ALL=(ALL) /bin/cat" > /etc/sudoers.d/rockylinux
[root@workstation ~]# logout
[rockylinux@workstation ~]$ sudo -i
[sudo] password for rockylinux:
Sorry, user rockylinux is not allowed to execute '/bin/bash' as root on workstation.
[rockylinux@workstation ~]$ sudo cat /etc/sudoers.d/rockylinux
[sudo] password for rockylinux:
rockylinux ALL=(ALL) /bin/cat
[rockylinux@workstation ~]$

設定成rockylinux ALL=(ALL) /bin/cat便可以只允許rockylinux使用者只能夠使用sudo指令執行cat指令,而接下來的執行指令也應證了這個設定,若有更多的指令則可以使用逗號隔開並加入到/bin/cat之後面。若要允許只能執行指定的一行指令也是可以的,相關的設定與執行的訊息如下:

[rockylinux@workstation ~]$ su -
Password:
[root@workstation ~]# echo "rockylinux ALL=(ALL) /bin/cat /etc/sudoers.d/rockylinux" > /etc/sudoers.d/rockylinux
[root@workstation ~]# logout
[rockylinux@workstation ~]$ sudo cat /etc/passwd
Sorry, user rockylinux is not allowed to execute '/bin/cat /etc/passwd' as root on workstation.
[rockylinux@workstation ~]$ sudo cat /etc/sudoers.d/rockylinux
rockylinux ALL=(ALL) /bin/cat /etc/sudoers.d/rockylinux

課後練習

  • 請使用su指令切換使用者並變成root使用者,接著再回到rockylinux使用者,root使用者密碼為:rocky
  • rockylinux可以完整的使用sudo指令,請使用至少一種方法達成這樣的設定。
  • 為了安全性與管理,假設你是系統管理者,請將rockylinux使用者只能夠使用sudo指令來執行/usr/bin/cat/usr/bin/grep指令。
  • 觀念題:使用sudo方式暫時取得root權限後,建立的目錄與檔案或是複製檔案,其擁有者是root還是執行sudo之使用者?

上一篇
第7章:管理本地端主機之使用者與群組(一)
下一篇
第8-1章:管理本地端主機之使用者與群組(三)
系列文
Rocky Linux 8:系統管理與維運實戰23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言