Command-Line

如何阻止使用者查看命令行參數?

  • February 21, 2016

我們有一個以build使用者身份執行的 CI 伺服器應用程序。CI 伺服器執行的任何帶有參數的命令都可以通過ps. 儘管非管理員使用者無權在 CI 伺服器上傳入 shell,但他們可以通過任務訪問執行 unix 命令。

我擔心的是;使用者 A 可以通過簡單地執行ps.

請注意,CI 伺服器中的所有任務都以build使用者身份執行。使用者不能切換到不同的user.

我也許可以ps在使用者無法執行的任務中阻止命令ps,這應該可以解決我的問題,但是我很想知道:

  1. 是否有其他命令可以在沒有root權限的情況下執行以公開命令行參數?
  2. 鑑於此問題的背景,是否有更好/安全的方法來管理它?

恐怕所有命令都以建構使用者身份執行。

然後,任何送出建構的人都可以看到甚至乾擾其他使用者的工作。執行建構可以執行任意程式碼;這允許任何送出建構的人不僅可以執行ps,還可以讀取和寫入屬於其他作業的文件。如果您不能信任送出建構的使用者,那麼您必須以單獨的使用者身份執行建構。

如果您只關心在該 CI 伺服器上擁有帳戶但不允許送出建構的使用者,那麼hidepid選項可能會對您有所幫助。或者,教育建構送出者在文件或環境變數中傳遞機密資訊,而不是命令行參數。請注意,該ps命令不是您需要處理的,它只是一個漂亮的列印機,用於在proc filesystem中找到資訊。程序 1234 的命令行可以用cat /proc/1234/cmdline.

如果您對建構有保密問題,我建議您不要嘗試一次堵住一個潛在的資訊洩漏,而是在容器或虛擬機中執行所有建構。

查看hidepid安裝 /proc 的選項

On multi-user systems, it is often useful to secure the process directories stored in /proc/ so that they can be viewed only by the root user. You can restrict the access to these directories with the use of the hidepid option.
To change the file system parameters, you can use the mount command with the -o remount option. As root, type:

mount -o remount,hidepid=value /proc

Here, value passed to hidepid is one of:

   0 (default) — every user can read all world-readable files stored in a process directory.
   1 — users can access only their own process directories. This protects the sensitive files like cmdline, sched, or status from access by non-root users. This setting does not affect the actual file permissions.
   2 — process files are invisible to non-root users. The existence of a process can be learned by other means, but its effective UID and GID is hidden. Hiding these IDs complicates an intruder's task of gathering information about running processes. 

連結了解更多資訊——

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/ch-proc.html

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