Linux

設置沒有 root 和沒有 CAP_SYS_ADMIN 的主機名

  • March 3, 2015

我有一個應用程序,我希望能夠在 Linux 中更改主機名。目前通過執行 hostname 命令來執行此操作。我也不想設置 CAP_SYS_ADMIN 。我也不想編輯 /etc/hostname 並重新啟動。

是否有僅允許更改主機名的功能?如果不是,我有什麼選擇?

在 linux 中設置主機名是通過 sethostname(2) 系統呼叫完成的。/bin/hostname 是這個系統呼叫(以及一些相關的系統呼叫)的一個簡單包裝器。/etc/hostname 應該在引導過程中由某個腳本讀取,隨後執行 /bin/hostname 以完成其工作。

CAP_SYS_ADMIN 是 linux 功能之一 (7),允許執行緒執行各種系統管理操作,包括sethostname。我不知道功能框架中有更小的 ganularity。

但是,還有其他選擇。我們可以通過 sudo(8) 以可定制的方式授予某些使用者以其他使用者身份執行某些命令的能力*。*此範例 sudoers(5) 配置將允許使用者 alice 以 root 身份執行 /bin/hostname。

alice ALL=(root:ALL) /bin/hostname

這個超級使用者問題中所述,第一個“ALL”可以替換為執行命令的主機,除非在合作環境中,否則無法使用。“root” 可以替換為 “ALL” 以允許 alice 以任何使用者身份執行。第二個“ALL”可以被組替換。

最後一個欄位是允許 alice 執行的命令。由於 /bin/hostname 的使用有限,我想這很好。否則我們可能會在它後面加上一個參數,因此 alice 不能在沒有這個參數的情況下執行命令,以限制權力。

引用自:https://unix.stackexchange.com/questions/186902