為什麼我需要一個服務的專用使用者(我的 git 服務:gogs / gitea)?
我使用“gogs”自託管 git 服務,但我想更改為更活躍的分支gitea。安裝說明說我應該創建一個
git
專用於 gitea 的使用者(例如):adduser \ --system \ --shell /bin/bash \ --gecos 'Git Version Control' \ --group \ --disabled-password \ --home /home/git \ git
我目前在 windows 中使用 gogs,沒有特殊使用者。現在我想在 linux 中使用 gitea,因此我感到困惑 - 我認為這是因為我可能不理解一般的守護程序。
在 Windows 中,當我想啟動服務時,我會執行它,它會在終端視窗中或作為後台服務保持打開狀態,直到我停止它。在 linux 中我也可以這樣做,那為什麼我需要一個專用使用者呢?
我假設其他服務也使用相同的做法,因此我需要了解使用/不使用專用使用者進行服務的含義。
(我想這與在沒有使用者登錄並啟動它的情況下執行服務有關。但是許多其他服務已經在執行並且它們不需要專門的使用者,是嗎?)
您的困惑源於您不了解自己在 Windows 上所做的事情。在 Windows 上,實際服務是從服務控制管理器執行的,並且它們一直能夠在專用使用者帳戶的支持下執行。Windows 上適當的非特權服務使用專用非特權使用者帳戶的使用者名,SCM 登錄該使用者帳戶以創建服務程序。
相比之下,您所做的根本不是執行服務。您正在後台的互動式登錄會話中執行一個程序。您使用的不是終端,而是控制台。
為服務使用專用帳戶的原因實際上對於 Windows 和 Linux 作業系統很常見。在專用帳戶的支持下將服務作為單獨的程序執行意味著保護使用者彼此之間的作業系統機制(Windows NT 和 Linux 都是從頭開始的多使用者,請記住)也保護服務程序不受您的影響,一種互動式使用者,以及來自其他服務。他們同樣保護您和其他服務免受服務。
多使用者機制允許對服務程序使用的文件和目錄進行粒度訪問控制,防止服務被惡意程序發送任意信號,防止使用調試API跟踪服務程序,防止執行緒注入,防止任意程序無法暫停和恢復執行緒。所有這些預防措施也以另一種方式起作用,這意味著服務如果受到損害,就不能對他人做這些事情。
您正在執行一個響應網路請求的服務。由於這些原因,它被設計為在專用使用者帳戶的支持下執行。它講的是一個複雜的人類可讀協議,對於程序正確解析來說是非常重要的,並且如果該解析器中的某個地方出現錯誤,則可能會受到損害。但是任何成功破壞它的攻擊者都只能以專用服務使用者的身份訪問您的系統,您應該確保沒有不必要的訪問或擁有不屬於其預期功能的文件和目錄。
我自己也將其擴展到日誌記錄。單個日誌服務僅以訪問和寫入其特定日誌目錄所需的權限執行,並且彼此隔離,與互動式使用者隔離,甚至與正在寫入日誌的(非特權)“主”服務隔離。
在一個架構良好的系統中,應該很少有服務程序以特權訪問權限執行。通常,它們將是提供某種多使用者登錄的東西,例如 SSH 或 FTP 服務,這些服務的主要部分實際上仍然在非特權帳戶的支持下執行;但它只是協商哪個帳戶是服務功能的固有部分的情況。
因此,您現在應該考慮 gitea 指令是否足夠。您正在創建的服務帳戶允許通過 SSH 進行互動式登錄,有一個互動式 shell 程序作為其登錄程序,並擁有一個主目錄,使受感染的服務能夠將內容放在那裡並授予對那里內容的訪問權限。
進一步閱讀
- 喬納森·德博因·波拉德 (2018)。“介紹”。 小吃指南。軟體。
- 喬納森·德博因·波拉德 (2018)。《日誌服務安全:專用日誌使用者帳號》。 小吃指南。軟體。
- 喬納森·德博因·波拉德 (2018)。“限制服務:在非特權使用者帳戶的支持下執行”。 小吃指南。軟體。
- “服務使用者帳戶”。 Windows 桌面:系統服務。MSDN。微軟。
- “設置服務的使用者帳戶”。 Windows 桌面:Active Directory 域服務。MSDN。微軟。
- 丹尼爾·伯恩斯坦。 qmail安全保證。cr.yp.to.
- 喬納森·德博因·波拉德 (2011)。TUI 的控制台和終端範例。經常給出答案。
- https://unix.stackexchange.com/a/198713/5132
- https://unix.stackexchange.com/a/447329/5132