如何在 sudo 運行的命令中防止使用參數
允許用戶使用
sudo
運行命令,但不帶命令行參數。
在之前的文章,我們學習了如何 通過 sudo 以 root 身份運行目錄中的命令。在這篇指南中,我們將學習如何在 Linux 中 防止 sudo 運行的命令使用參數。即我們允許一個用戶使用 sudo
運行特權級命令,但是 不帶命令行參數。
背景介紹
你已經知道了,每個命令執行一個特定操作有不同的選項。讓我們以 ls
命令為例。
ls
命令會羅列文件夾中的內容,對嗎?沒錯。ls
命令附帶了一些命令行選項和標誌。例如,你可以用 ls
命令的 -a
標誌羅列文件夾中的所有內容(包括隱藏文件)。
在這份簡要指南中,我們將明白如何允許用戶通過 sudo
運行 ls
命令,但是不能使用命令行選項或者標誌。我講清楚了嗎?接下來讓我來展示一下如何做到這點。
防止使用 sudo 參數
以 root
用戶身份編輯 /etc/sudoers
文件:
[root@Almalinux8CT ~]# visudo
添加下面一行:
user1 ALL=(root) /usr/bin/ls ""
要注意這裡 ls
之後的 雙引號。雙引號會屏蔽用戶在給定命令之後輸入的參數(比如 ls
命令)。在上面的命令中,user1
能夠以 root
身份運行 ls
命令,但是不能使用 ls
命令的選項以及標誌。你可以選擇其他的指令進行嘗試。保存該文件並關閉。
現在,以 user1
的身份登錄系統,並嘗試以管理員身份運行 ls
命令,不要添加任何選項:
[user1@Almalinux8CT ~]$ sudo -u root ls -a
或許你會遇到下面的報錯:
Sorry, user user1 is not allowed to execute '/bin/ls -a' as root on Almalinux8CT.
不過你可以不添加參數來運行 ls
命令:
[user1@Almalinux8CT ~]$ sudo -u root ls
防止所有用戶使用命令參數
上述例子像你展示了如何阻止用戶以管理員身份運行帶有參數的命令。你是否想要對所有用戶應用該規則呢?很簡單!只需要在 /etc/sudoers
文件中添加一行:
ALL ALL=(root) /usr/bin/ls ""
現在,系統中的所有用戶都可以運行不帶參數的 ls
命令。
想要恢復默認設置,只需要刪除最後的雙引號,或者刪除整行。
查看幫助手冊,了解更多。
$ man sudoers
結論
在這份指南中,我們學習了如何允許用戶以管理員身份運行命令,但是不能添加任何命令參數。這樣可以限制用戶誤用一些命令行參數。
via: https://ostechnix.com/prevent-command-arguments-with-sudo/
作者:sk 選題:lkxed 譯者:Donkey-Hao 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive