我使用“gogs”自托管 git 服务,但我想更改为更活跃的分支,称为吉泰亚。这安装说明git
假设我应该创建一个专门供 gitea 使用的用户(例如):
adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
我目前在windows中使用gogs,没有特殊用户。现在我想在 Linux 中使用 gitea,因此我感到困惑 - 我认为这是因为我可能不了解一般的守护进程。
在 Windows 中,当我想要启动该服务时,我会运行它,并且它会在终端窗口中或作为后台服务保持打开状态,直到我停止它。在linux中我也可以做同样的事情,那为什么我需要一个专门的用户呢?
我假设其他服务也使用相同的做法,因此我需要了解使用/不使用服务的专用用户的含义。
(我猜这与在没有用户登录并启动的情况下运行服务有关。但是许多其他服务已经在运行,并且它们不需要专用用户,不是吗?)
答案1
您的困惑源于您不了解自己在 Windows 上所做的事情。在 Windows 上,实际服务从服务控制管理器运行,并且它们始终能够在专用用户帐户的支持下运行。 Windows 上的正确非特权服务使用专用非特权用户帐户的用户名,SCM 以此身份登录以创建服务进程。
什么你相比之下,我们正在做的是不是根本运行服务。您正在后台交互式登录会话中运行一个程序。它不是您正在使用的终端,而是一个安慰。
事实上,使用专用帐户进行服务的原因对于 Windows 和 Linux 操作系统来说是相同的。在专用帐户的支持下将服务作为单独的进程运行意味着操作系统机制可以保护用户免受彼此的侵害(记住,Windows NT 和 Linux 从一开始就是多用户的)还保护服务流程免受你,一个交互式用户,并且来自其他服务。他们同样保护您和其他服务从服务。
多用户机制允许对服务程序使用的文件和目录进行细粒度访问控制,防止恶意进程向服务发送任意信号,防止使用调试 API 跟踪服务进程,防止线程注入,并防止任意进程无法暂停和恢复线程。所有这些预防措施也以相反的方式起作用,这意味着如果服务受到损害,则无法对其他人执行这些操作。
您正在运行一项响应网络请求的服务。出于这些原因,它被设计为在专用用户帐户的支持下运行。它采用复杂的人类可读协议,对于程序的正确解析来说并非易事,并且如果该解析器中的某个地方出现错误,则可能会受到损害。但是,任何成功破坏它的攻击者都只能以专用服务用户的身份访问您的系统,您可以使用该专用服务用户来访问您的系统。应该确保不会不必要地访问或拥有不属于其预期功能的文件和目录。
我自己也将其扩展到日志记录中。各个日志服务仅以访问和写入其特定日志目录所需的权限运行,并且彼此隔离,与交互式用户隔离,甚至与它们正在写入日志的(非特权)“主”服务隔离。
在一个架构良好的系统中,应该很少有以特权访问方式运行的服务进程。一般来说,它们会提供某种多用户登录,例如 SSH 或 FTP 服务,其中服务的主要部分实际上仍然在非特权帐户的支持下运行;但情况很简单,协商哪个帐户是服务功能的固有部分。
因此,您现在应该考虑 gitea 指令是否就足够了。您正在创建的服务帐户允许通过 SSH 进行交互式登录,有一个交互式 shell 程序作为其登录程序,并拥有一个主目录,从而使受感染的服务能够将内容放在那里并授予对那里内容的访问权限。
进一步阅读
- 乔纳森·德博因·波拉德 (2018)。 ”介绍”。 小吃指南。软件。
- 乔纳森·德博因·波拉德 (2018)。 ”日志服务安全:专用日志用户帐户”。 小吃指南。软件。
- 乔纳森·德博因·波拉德 (2018)。 ”限制服务:在非特权用户帐户的支持下运行”。 小吃指南。软件。
- ”服务用户帐户”。 Windows 桌面:系统服务。 MSDN。微软。
- ”设置服务的用户帐户”。 Windows 桌面:Active Directory 域服务。 MSDN。微软。
- 丹尼尔·J·伯恩斯坦。 qmail安全保障。 cr.yp.to。
- 乔纳森·德博因·波拉德 (2011)。TUI 的控制台和终端范例。经常给出的答案。
- https://unix.stackexchange.com/a/198713/5132
- https://unix.stackexchange.com/a/447329/5132