作为一名 Linux 管理员,我的工作之一是执行某种任务来删除系统上运行的应用程序的 root 权限吗?
或者我只是依赖应用程序开发人员来确保他们已经编写了代码来执行此操作?
答案1
作为一名 Linux 管理员,我的工作之一是执行某种任务来删除系统上运行的应用程序的 root 权限吗?
是的。确保完成是你的工作。如果应用程序没有执行此操作,您必须注意到应用程序没有执行此操作并自行执行。
或者我只是依赖应用程序开发人员来确保他们已经编写了代码来执行此操作?
不依靠应用程序开发人员必须做任何事情。 Linux 系统管理员可以使用很多工具来获取事实应用程序在运行时正在做什么。
答案2
应用程序程序员有责任确保应用程序放弃 root 权限并以非特权权限运行。如果应用程序不这样做,您就无能为力——除了避免使用该应用程序、向开发人员提交错误报告或自己在代码中实施必要的更改之外。
另一方面,它是你,作为管理员,选择应用程序启动的用户;黄金法则是永远不要授予进程超过其运行所需的权限。因此,您可以创建一个非特权用户 - 查看/etc/passwd
以了解系统帐户 - 并以此用户身份运行应用程序。 (您很少需要手动执行此操作;通常,当您通过包管理器安装软件时,这一切都会得到解决。)但是,如果应用程序需要根权限才能启动,然后无法在中间删除此类权限逃跑,那么事情就脱离了你的控制。
例如,旧版本sendmail
需要运行 SUID root,如果远程攻击者设法成功利用该程序的漏洞,这将是一个安全漏洞。如果您sendmail
仅作为邮件中继运行,则可以作为非特权用户运行它。
答案3
我想说,作为系统管理员,我们的工作是为应用程序和用户提供尽可能少的权限(允许他们完成工作)。
部署 Tomcat/Java 应用程序或网页,或部署具有数据库访问权限的应用程序的用户很少或几乎没有对 root 访问权限的合法需求。
现在大多数框架也默认放弃root。
例如,对于使用 Java 框架的开发人员,我们只是向开发人员授予能够部署的非特权用户的访问权限,并且一些 sudo 命令仅限于(重新)启动和停止一些关键服务。
我想进一步指出,处理生产服务器不是开发团队的职责。
根据我的生活经验,开发团队通常只是担心完成工作,如果没有系统管理团队的规划、指导和主动干预,他们就无法正确进行安全和容量管理。