是否可以使用 sudo 將可執行檔的擁有權變更為 root?

是否可以使用 sudo 將可執行檔的擁有權變更為 root?

我有一個由我的用戶 ID 創建的可執行文件,我需要以 root 身份運行它。因此,我需要將可執行檔的所有權更改為 root:root 並使用 setuid。當我嘗試時

sudo chown root:root [EXE_NAME]

我收到錯誤:

chown: changing ownership of `[EXE_NAME]`: Operation not permitted

我的限制是:

  • 我的 sudoers 檔案中的使用者 ID 有 sudo ALL ALL,但無法以 root 身分登入
  • 需要以 root 身分執行的可執行檔正在嘗試使用 pcap_open_live 函數以混雜模式綁定到網路介面(因此需要以 root 身分執行)。

有沒有更好的方法來解決我的最終問題,即需要運行綁定到安全且不需要 sudo 的網路介面的可執行檔或創建 root 擁有的 shell ( sudo tcsh)

答案1

如果sudo實際上給你 UID 0(用 進行檢查sudo id),我懷疑該檔案駐留在不支援權限的檔案系統上(例如 FAT32)。在這樣的檔案系統上,您無法變更檔案的所有權(或權限)。

答案2

如果您的檔案系統支援所有權,我還可以想到三個原因:

  1. 該分割區以唯讀方式安裝。

    嘗試重新命名該檔案或在同一目錄中建立另一個檔案。如果可以的話,那就不是問題。

  2. 文件被鎖定。

    檢查程式是否正在執行。嘗試重新命名該檔案。

  3. 該文件設定為僅附加或者不可變的

    若要變更此設置,請執行以下命令:

    sudo chattr -ai filename
    

答案3

如果你只是需要改變所有權(而不是所有權和群組)那麼您可以使用chown root filename.如果您不是 root,則以 sudo 為前綴。

如果您還想更改群組,總是可以的chgrp

(當然,不如單一命令中的所有內容那麼好)。

答案4

普通用戶也可以綁定到網路接口,只是不能綁定到 1024 以下的端口ssh -fN -L 0.0.0.0:<PRIV_PORT>:localhost:<UNPRIV_PORT>

話雖這麼說,您的問題也可能與 SElinux 有關,SElinux 在 RHEL 中預設為啟用。若要停用它,請SELINUX=disabled在 中設定/etc/selinux/config

相關內容