Linux 系統中 root 使用者擁有 Linux 中全部控制權力。Linux 系統中 root 是擁有最高權力的使用者,可以在系統中實施任意的行為。
如果其他使用者想去實施一些行為,不能為所有人都提供 root 訪問許可權。因為如果他或她做了一些錯誤的操作,沒有辦法去糾正它。
為瞭解決這個問題,有什麼方案嗎?
我們可以把 sudo 許可權發放給相應的使用者來剋服這種情況。
sudo 命令提供了一種機制,它可以在不用分享 root 使用者的密碼的前提下,為信任的使用者提供系統的管理許可權。
他們可以執行大部分的管理操作,但又不像 root 一樣有全部的許可權。
什麼是 sudo?
sudo 是一個程式,普通使用者可以使用它以超級使用者或其他使用者的身份執行命令,是由安全策略指定的。
sudo 使用者的訪問許可權是由 /etc/sudoers
檔案控制的。
sudo 使用者有什麼優點?
在 Linux 系統中,如果你不熟悉一個命令,sudo 是執行它的一個安全方式。
/var/log/secure
和 /var/log/auth.log
檔案中保留日誌,並且你可以驗證 sudo 使用者實施了哪些行為操作。基於 RHEL 的系統(如 Redhat (RHEL)、 CentOS 和 Oracle Enterprise Linux (OEL))和基於 Debian 的系統(如 Debian、Ubuntu 和 LinuxMint)在這點是不一樣的。
我們將會教你如何在本文中提及的兩種發行版中執行該操作。
這裡有三種方法可以應用於兩個發行版本。
wheel
組。基於 Debain 的系統,我們新增使用者到 sudo 或 admin
組。/etc/group
檔案中。/etc/sudoers
檔案中。如何在 RHEL/CentOS/OEL 系統中配置 sudo 訪問許可權?
在基於 RHEL 的系統中(如 Redhat (RHEL)、 CentOS 和 Oracle Enterprise Linux (OEL)),使用下麵的三個方法就可以做到。
方法 1:在 Linux 中如何使用 wheel 組為普通使用者授予超級使用者訪問許可權?
wheel 是基於 RHEL 的系統中的一個特殊組,它提供額外的許可權,可以授權使用者像超級使用者一樣執行受到限制的命令。
註意,應該在 /etc/sudoers
檔案中啟用 wheel
組來獲得該訪問許可權。
-
# grep -i wheel /etc/sudoers
-
-
## Allows people in group wheel to run all commands
-
%wheel ALL=(ALL) ALL
-
# %wheel ALL=(ALL) NOPASSWD: ALL
假設我們已經建立了一個使用者賬號來執行這些操作。在此,我將會使用 daygeek
這個使用者賬號。
執行下麵的命令,新增使用者到 wheel
組。
-
# usermod -aG wheel daygeek
我們可以透過下麵的命令來確定這一點。
-
# getent group wheel
-
wheel:x:10:daygeek
我將要檢測使用者 daygeek
是否可以訪問屬於 root 使用者的檔案。
-
$ tail -5 /var/log/secure
-
tail: cannot open /var/log/secure for reading: Permission denied
當我試圖以普通使用者身份訪問 /var/log/secure
檔案時出現錯誤。我將使用 sudo 訪問同一個檔案,讓我們看看這個魔術。
-
$ sudo tail -5 /var/log/secure
-
[sudo] password for daygeek:
-
Mar 17 07:01:56 CentOS7 sudo: daygeek : TTY=pts/0 ; PWD=/home/daygeek ; USER=root ; COMMAND=/bin/tail -5 /var/log/secure
-
Mar 17 07:01:56 CentOS7 sudo: pam_unix(sudo:session): session opened for user root by daygeek(uid=0)
-
Mar 17 07:01:56 CentOS7 sudo: pam_unix(sudo:session): session closed for user root
-
Mar 17 07:05:10 CentOS7 sudo: daygeek : TTY=pts/0 ; PWD=/home/daygeek ; USER=root ; COMMAND=/bin/tail -5 /var/log/secure
-
Mar 17 07:05:10 CentOS7 sudo: pam_unix(sudo:session): session opened for user root by daygeek(uid=0)
方法 2:在 RHEL/CentOS/OEL 中如何使用 /etc/group 檔案為普通使用者授予超級使用者訪問許可權?
我們可以透過編輯 /etc/group
檔案來手動地新增使用者到 wheel
組。
只需開啟該檔案,併在恰當的組後追加相應的使用者就可完成這一點。
-
$ grep -i wheel /etc/group
-
wheel:x:10:daygeek,user1
在該例中,我將使用 user1
這個使用者賬號。
我將要透過在系統中重啟 Apache httpd 服務來檢查使用者 user1
是不是擁有 sudo 訪問許可權。讓我們看看這個魔術。
-
$ sudo systemctl restart httpd
-
[sudo] password for user1:
-
-
$ sudo grep -i user1 /var/log/secure
-
[sudo] password for user1:
-
Mar 17 07:09:47 CentOS7 sudo: user1 : TTY=pts/0 ; PWD=/home/user1 ; USER=root ; COMMAND=/bin/systemctl restart httpd
-
Mar 17 07:10:40 CentOS7 sudo: user1 : TTY=pts/0 ; PWD=/home/user1 ; USER=root ; COMMAND=/bin/systemctl restart httpd
-
Mar 17 07:12:35 CentOS7 sudo: user1 : TTY=pts/0 ; PWD=/home/user1 ; USER=root ; COMMAND=/bin/grep -i httpd /var/log/secure
方法 3:在 Linux 中如何使用 /etc/sudoers 檔案為普通使用者授予超級使用者訪問許可權?
sudo 使用者的訪問許可權是被 /etc/sudoers
檔案控制的。因此,只需將使用者新增到 sudoers
檔案中 的 wheel
組下即可。
只需透過 visudo 命令將期望的使用者追加到 /etc/sudoers
檔案中。
-
# grep -i user2 /etc/sudoers
-
user2 ALL=(ALL) ALL
在該例中,我將使用 user2
這個使用者賬號。
我將要透過在系統中重啟 MariaDB 服務來檢查使用者 user2
是不是擁有 sudo 訪問許可權。讓我們看看這個魔術。
-
$ sudo systemctl restart mariadb
-
[sudo] password for user2:
-
-
$ sudo grep -i mariadb /var/log/secure
-
[sudo] password for user2:
-
Mar 17 07:23:10 CentOS7 sudo: user2 : TTY=pts/0 ; PWD=/home/user2 ; USER=root ; COMMAND=/bin/systemctl restart mariadb
-
Mar 17 07:26:52 CentOS7 sudo: user2 : TTY=pts/0 ; PWD=/home/user2 ; USER=root ; COMMAND=/bin/grep -i mariadb /var/log/secure
在 Debian/Ubuntu 系統中如何配置 sudo 訪問許可權?
在基於 Debian 的系統中(如 Debian、Ubuntu 和 LinuxMint),使用下麵的三個方法就可以做到。
方法 1:在 Linux 中如何使用 sudo 或 admin 組為普通使用者授予超級使用者訪問許可權?
sudo 或 admin
是基於 Debian 的系統中的特殊組,它提供額外的許可權,可以授權使用者像超級使用者一樣執行受到限制的命令。
註意,應該在 /etc/sudoers
檔案中啟用 sudo 或 admin
組來獲得該訪問許可權。
-
# grep -i 'sudo\|admin' /etc/sudoers
-
-
# Members of the admin group may gain root privileges
-
%admin ALL=(ALL) ALL
-
-
# Allow members of group sudo to execute any command
-
%sudo ALL=(ALL:ALL) ALL
假設我們已經建立了一個使用者賬號來執行這些操作。在此,我將會使用 2gadmin
這個使用者賬號。
執行下麵的命令,新增使用者到 sudo 組。
-
# usermod -aG sudo 2gadmin
我們可以透過下麵的命令來確定這一點。
-
# getent group sudo
-
sudo:x:27:2gadmin
我將要檢測使用者 2gadmin
是否可以訪問屬於 root 使用者的檔案。
-
$ less /var/log/auth.log
-
/var/log/auth.log: Permission denied
當我試圖以普通使用者身份訪問 /var/log/auth.log
檔案時出現錯誤。我將要使用 sudo 訪問同一個檔案,讓我們看看這個魔術。
-
$ sudo tail -5 /var/log/auth.log
-
[sudo] password for 2gadmin:
-
Mar 17 20:39:47 Ubuntu18 sudo: 2gadmin : TTY=pts/0 ; PWD=/home/2gadmin ; USER=root ; COMMAND=/bin/bash
-
Mar 17 20:39:47 Ubuntu18 sudo: pam_unix(sudo:session): session opened for user root by 2gadmin(uid=0)
-
Mar 17 20:40:23 Ubuntu18 sudo: pam_unix(sudo:session): session closed for user root
-
Mar 17 20:40:48 Ubuntu18 sudo: 2gadmin : TTY=pts/0 ; PWD=/home/2gadmin ; USER=root ; COMMAND=/usr/bin/tail -5 /var/log/auth.log
-
Mar 17 20:40:48 Ubuntu18 sudo: pam_unix(sudo:session): session opened for user root by 2gadmin(uid=0)
或者,我們可以透過新增使用者到 admin
組來執行相同的操作。
執行下麵的命令,新增使用者到 admin
組。
-
# usermod -aG admin user1
我們可以透過下麵的命令來確定這一點。
-
# getent group admin
-
admin:x:1011:user1
讓我們看看輸出資訊。
-
$ sudo tail -2 /var/log/auth.log
-
[sudo] password for user1:
-
Mar 17 20:53:36 Ubuntu18 sudo: user1 : TTY=pts/0 ; PWD=/home/user1 ; USER=root ; COMMAND=/usr/bin/tail -2 /var/log/auth.log
-
Mar 17 20:53:36 Ubuntu18 sudo: pam_unix(sudo:session): session opened for user root by user1(uid=0)
方法 2:在 Debian/Ubuntu 中如何使用 /etc/group 檔案為普通使用者授予超級使用者訪問許可權?
我們可以透過編輯 /etc/group
檔案來手動地新增使用者到 sudo 組或 admin
組。
只需開啟該檔案,併在恰當的組後追加相應的使用者就可完成這一點。
-
$ grep -i sudo /etc/group
-
sudo:x:27:2gadmin,user2
在該例中,我將使用 user2
這個使用者賬號。
我將要透過在系統中重啟 Apache httpd 服務來檢查使用者 user2
是不是擁有 sudo 訪問許可權。讓我們看看這個魔術。
-
$ sudo systemctl restart apache2
-
[sudo] password for user2:
-
-
$ sudo tail -f /var/log/auth.log
-
[sudo] password for user2:
-
Mar 17 21:01:04 Ubuntu18 systemd-logind[559]: New session 22 of user user2.
-
Mar 17 21:01:04 Ubuntu18 systemd: pam_unix(systemd-user:session): session opened for user user2 by (uid=0)
-
Mar 17 21:01:33 Ubuntu18 sudo: user2 : TTY=pts/0 ; PWD=/home/user2 ; USER=root ; COMMAND=/bin/systemctl restart apache2
方法 3:在 Linux 中如何使用 /etc/sudoers 檔案為普通使用者授予超級使用者訪問許可權?
sudo 使用者的訪問許可權是被 /etc/sudoers
檔案控制的。因此,只需將使用者新增到 sudoers
檔案中的 sudo 或 admin
組下即可。
只需透過 visudo 命令將期望的使用者追加到 /etc/sudoers
檔案中。
-
# grep -i user3 /etc/sudoers
-
user3 ALL=(ALL:ALL) ALL
在該例中,我將使用 user3
這個使用者賬號。
我將要透過在系統中重啟 MariaDB 服務來檢查使用者 user3
是不是擁有 sudo 訪問許可權。讓我們看看這個魔術。
-
$ sudo systemctl restart mariadb
-
[sudo] password for user3:
-
-
$ sudo tail -f /var/log/auth.log
-
[sudo] password for user3:
-
Mar 17 21:12:32 Ubuntu18 systemd-logind[559]: New session 24 of user user3.
-
Mar 17 21:12:49 Ubuntu18 sudo: user3 : TTY=pts/0 ; PWD=/home/user3 ; USER=root ; COMMAND=/bin/systemctl restart mariadb
-
Mar 17 21:12:49 Ubuntu18 sudo: pam_unix(sudo:session): session opened for user root by user3(uid=0)
-
Mar 17 21:12:53 Ubuntu18 sudo: pam_unix(sudo:session): session closed for user root
-
Mar 17 21:13:08 Ubuntu18 sudo: user3 : TTY=pts/0 ; PWD=/home/user3 ; USER=root ; COMMAND=/usr/bin/tail -f /var/log/auth.log
-
Mar 17 21:13:08 Ubuntu18 sudo: pam_unix(sudo:session): session opened for user root by user3(uid=0)
朋友會在“發現-看一看”看到你“在看”的內容