我花了一段时间才明白这里发生了什么(我想),但是有人可以向我解释一下,当我作为一名具有一些 Linux 知识的开发人员试图建立家庭网络服务器时,我这里发生的逻辑是否存在安全风险?
Ubuntu 与其他系统不同,它限制了 root 用户帐户。您无法以 root 身份登录或su
以 root 身份登录。这对我来说是个问题,因为我必须/opt
按照用户文档安装大量应用程序和服务(XAMPPfor Linux 就是一个很好的例子)。这里的问题是这个目录归 拥有。我通过以下命令root:root
注意到我的管理员用户帐户不属于组:root
groups username
所以我的理解是,即使我放置的文件和服务/opt
属于 root,通过sudo
(按要求)执行它们并不意味着它们以 root 身份运行?我猜想该sudo
命令隐藏在属于root
用户的某个地方并具有775
权限?所以我的问题是,运行 Tomcat、Apcahe 等服务是否会像在其他系统上一样暴露我的系统?显然我需要在配置中保护这些,但黄金法则不是永远不要以 root 身份运行吗?如果我在同一个用户/组下运行多个服务,而服务器受到感染,会发生什么?
答案1
好的,以下是一些安全基础知识:
关于 root 帐户,Ubuntu 与其他基于 Debian 的系统非常相似,因为它
root
没有设置密码,因此您无法root
直接以 身份登录,而必须使用sudo
。如果您需要使用su
,您可以使用 来启动它sudo su
。有关 sudo 的更多详细信息可执行文件归 拥有
root
并不意味着它必须由 运行sudo
,任何具有读取和执行权限的用户都可以运行此类程序。事实上,Ubuntu 中的大多数程序都归 拥有root
,但您可以运行gedit
等等。正在运行的进程的“有效用户”将与启动程序的用户匹配,而不是拥有可执行文件的用户。因此,从技术上讲,您可以以非管理员用户身份运行 Apache 和所有内容,但有一个“如果”……作为一项安全措施,在 Linux 系统中,除非进程的有效用户是 ,否则进程不能绑定到 1024 以下的端口
root
。因此,如果您希望 Apache 监听端口 80,则必须将其作为 启动root
。这显然是一个安全问题。但您可以在端口 8080 上运行它。为了避免以 root 权限运行的安全问题,Apache 和一些其他网络服务放弃他们的特权绑定到网络端口后,它会执行最少的工作,
root
然后将其切换effective user id
到具有最小权限(无密码、无登录 shell 等)的某些预配置用户。有效用户和组在应用程序的配置文件中设置(对于 Apache,httpd.conf 中的用户和组指令)一些其他服务不能放弃其权限,因此必须以非特权用户身份从启动脚本启动它们。
当您从 Ubuntu 存储库安装软件包时,它们通常会为每个服务( 等)创建受限用户帐户,
mysql
并将postgres
服务配置为使用各自的有效用户运行。这比以您登录的用户身份运行服务要安全得多。