如何在 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 ""
Deny Command Arguments With Sudo
要注意這里 ??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
Prevent Command Arguments With Sudo
防止所有用戶使用命令參數
上述例子像你展示了如何阻止用戶以管理員身份運行帶有參數的命令。你是否想要對所有用戶應用該規則呢?很簡單!只需要在 ??/etc/sudoers?
? 文件中添加一行:
ALL ALL=(root) /usr/bin/ls ""
現在,系統中的所有用戶都可以運行不帶參數的 ??ls?
? 命令。
想要恢復默認設置,只需要刪除最后的雙引號,或者刪除整行。
查看幫助手冊,了解更多。
$ man sudoers
結論
在這份指南中,我們學習了如何允許用戶以管理員身份運行命令,但是不能添加任何命令參數。這樣可以限制用戶誤用一些命令行參數。