Linux

SUID 權限 - 哪個是正確的?

  • September 14, 2017

試圖保護 Linux 伺服器並且對 SUID 幾乎沒有經驗。執行後

find / -perm +4000

發現了很多程序。我在這里這裡看到了關於應該啟用什麼和不應該啟用什麼的相互矛盾的建議。

啟用 SUID

`/bin/su

/usr/bin/passwd

/usr/bin/gpasswd

/sbin/unix_chkpwd`

SUID 已禁用 `/usr/bin/crontab

/usr/bin/newgrp

/bin/ping

/bin/ping6

/bin/umount

/bin/mount

/usr/bin/chsh

/usr/bin/chfn

/usr/libexec/pt_chown

/usr/bin/sudo

/usr/bin/sudoedit

/usr/bin/chage

/usr/sbin/userhelper

/usr/sbin/usernetctl

/usr/sbin/suexec`

不確定

`/usr/libexec/openssh/ssh-keysign

/sbin/pam_timestamp_check`

伺服器將託管多個具有少量 Linux / SFTP 使用者的站點。

應該改變什麼?另外,我應該如何測試?

我個人不會打擾,因為您列出的程序通常被認為是安全的。例如sudo,沒有設置 suid 位是沒有意義的。等等也是如此chsh chfn。如果你真的想保護你的伺服器,我只會給以下執行檔 suid 權限:

  • ping/ping6出於診斷原因。
  • suexec在不同使用者下執行 cgi 腳本
  • su或者sudo
  • pt_chown如果你沒有devpts

您可以根據http://lists.freebsd.org/pipermail/freebsd-stable/2006-October/029737.html刪除 suid 位,ssh-keysign因為它僅用於基於主機的身份驗證

您還應該確保您的使用者沒有獲得 shell 訪問權限並且他們的目錄被 chroot。

如果你真的想保護你的伺服器,你應該考慮研究SELinux

除非您確定自己知道自己在做什麼,否則讓您的發行版做它想做的事。你需要問這個問題,說明你知道的還不夠。所以別管了。

需要設置哪些程序取決於您的發行版上的設置方式。例如,Fedora已經用 setcap 取代了大多數 setuid 的使用。例如,ping 需要CAP_NET_RAWIO能夠打開原始套接字的能力;它可以通過作為setcap CAP_NET_RAWIO(更好的特權隔離)或作為 setuid root(傳統方法,不需要 setcap 執行檔)來獲得它。

您列出的程序旨在由普通使用者執行,但需要額外的權限才能執行。如果您刪除他們的 setuid 位,您將破壞您的系統。例如,ping將停止工作(除非您以 root 身份登錄)。您將能夠成為 root withsu但不是 with sudo,這完全違背了sudo. 使用者將無法設置 crontab。等等。

在專用伺服器上,您破壞的某些東西可能無關緊要。但是,如果您知道自己在做正確的事情,那麼您應該只更改發行版的預設值,而不是相反。請記住,可用性是安全性的一部分。如果您將自己鎖定在伺服器之外或使自己無法診斷和修復問題,那麼您已經破壞了自己的安全性。

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