哪些用户应该有权访问 sudo?(node、php、ftp......)

哪些用户应该有权访问 sudo?(node、php、ftp......)

在我开始之前,请随意为这个问题建议一个更好的标题。

我已经在 Digitalocean 上注册并安装了 LEMP 堆栈。这是我第一次从头开始配置服务器。尽管我选择了 LEMP 选项,但我也想托管节点应用程序。

我主要担心的是,我不确定应该创建哪些用户,以及哪些用户应该拥有管理员权限。此外,我希望尽可能依赖 SSH 密钥。

  • 对于文件上传/下载,我使用 Filezilla。当我安装 LEMP 堆栈时,系统询问我是否要为 生成密码root,或使用 SSH 密钥。我选择了后者。现在,我可以使用我的 SSH 密码。安装了 ProFTPd 和ssh [email protected]已启用 SFTP./etc/proftpd/authorized_keys/root包含我用来通过ssh或 Filezilla 连接到服务器的 SSH 密钥。ssh和 Filezilla 均不要求root输入 的密码。

    由于我是唯一一个通过 SFTP 访问的人,我认为我可以使用这种方法。如果我需要其他人,我会为他创建一个用户,关联他的 SSH 密钥并授予他访问某些文件夹的权限。

    这并没有给我带来麻烦,但我想我应该提一下,看看是否有人认为这是一种不好的做法。

  • 我希望能够执行 Node 应用。作为root,我安装了 node、npm 和 pm2,以便随时保持我的应用处于活动状态。所有这些都位于/usr/local/bin所有者 中root:root。我创建了一个名为 的用户www,因为我将应用存储在 中/var/www,所以chown -R www:www /var/www我是否真的需要创建www或者我可以使用(www-dataNginx 使用的那个)?

    到目前为止,我实际上不需要添加wwwsudoers,直到我想使用pm2 startupand npm install

    • PM2需要(生成脚本以在每次系统启动后运行 PM2)供要执行(启动节点应用程序并监视它)pm2 startup的用户使用。这只需执行一次。它会为您提供需要使用 执行的命令。因此并执行所述命令。一切顺利。pm2 startsudousermod -aG www sudo
    • npm install也需要sudo。不过,这个的问题是,我不想被要求输入密码。我正在尝试使用 Git 后接收钩子,因此每当我推送到服务器时,我都希望执行此操作(/var/repo/nodeapp.git/hooks/post-receive):

      #!/bin/sh
      git --work-tree=/var/www/nodeapp --git-dir=/var/repo/nodeapp.git checkout -f && cd /var/www/nodeapp && sudo npm install
      

      如果我git push从终端执行此操作,则在尝试时不会出现被要求输入密码的问题sudo npm install,但有时我使用适用于 Windows/Mac 的 Github,我无法提供该密码。请注意,我将设置 SSH 密钥以www通过终端或 Github 应用程序进行连接。

    首先,我想将www用户设置为npm和 的所有者pm2,因为我认为这样我就不会被要求使用 执行命令sudo。我错了(希望你没有笑)。接下来我想,既然www是 sudoer,我可以让某些命令可供它与 sudo 一起使用。所以我visudo'd 并且在文件中间有这个:

    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    www     ALL=(ALL:ALL) NOPASSWD:/usr/local/bin/npm
    

    我想要实现的是“让用户无需输入密码www即可使用”。sudo npm install这样做对吗?有没有办法说“不要让此用户将 sudo 与任何其他命令一起使用,即使他提供了正确的密码”。假设我sudo rm file.txt按 as执行www,并且 file.txt 归另一个用户所有:我可以禁用它吗?我只希望www(或我创建的任何其他用户)能够将 sudo 与 一起使用npm

    到目前为止,对我来说不起作用。另外,有没有办法无需添加wwwsudoers 就能实现所有这些?

  • 据我所知,我不应该让用户root通过 进行连接ssh。这很重要吗?Digitalocean 没有提供任何 GUI 来配置服务器,因此sshing asroot是我配置 Nginx 设置等内容的唯一方法。

  • Nginx 被执行,root因此它可以监听端口 80,但随后它会以另一个用户的身份为网站提供服务(www-data我相信)。我应该在这里配置一些东西吗?我对这个用户一无所知:权限、密码、授权密钥……我应该设置user www;/etc/nginx/nginx.conf

    当我使用 PHP 建立网站并且访问者访问该网站时会发生什么?www-data默认情况下,哪个用户实际上在执行操作?

  • 我是否应该为我的 PHP 网站安排一个用户,并为另一个用户负责执行类似的操作node index.js

  • 如果我设置AllowUsers someusername anotherusername/etc/ssh/sshd_config这是否仅适用于尝试通过命令访问时ssh,还是也适用于我尝试使用 Windows/Mac 版 Github 推送更改时?

  • 如果我PasswordAuthentication no设置/etc/ssh/sshd_config,当带有 sudo 的命令询问时我应该输入什么密码?

答案1

只有您打算登录的交互式帐户才应具有 sudo 或 root 权限。服务可以合理地拥有 sudo 或 root 权限的场景数量极其有限:备份、防病毒、主机入侵防御。

我不建议使用 sudoers 授予服务帐户受限的管理员权限。限制允许的操作集非常困难。Sudoers 与相当明智的同事一起工作,他们不想故意损害您的系统。受感染的 Web 服务器不是此类权限的合格持有者,您希望限制可能造成的损害。

允许 root npm install 的安全风险相当大。npm install 不需要 root 权限。也就是说,除非非常小心谨慎,否则允许您的 Web 应用程序根据用户请求进行自我修改是非常危险的。

如果您希望能够更新 Web 应用程序,请使用单独的 cron 作业或服务来执行此操作,然后重新配置并重新启动 Apache。此服务可能有权运行gitnpm 安装这应该仅限于用户级别npm 安装而不是系统级。很可能足够的权限仅限于文件系统,并且可能仅限于您的应用程序文件夹,以便更新程序用户可以更改内容,同时www-数据不能。

强化 nginx 时最重要的事情是禁用不使用的模块,并使 server_tokens 显示较少详细的版本信息。 进一步强化 Nginx 是可能的取决于系统或服务的敏感度。

不允许通过 SSH 以 root 用户身份登录。以非 root 用户身份登录您的实例并使用须藤运行命令或sudo su-l成为 root 并执行此操作。

您是否应该为不同的事物设置不同的用户和权限?理想情况下是的。实际上,通过这种方式划分的组件越多,系统就越安全。它还使添加或删除权限变得更容易,因为每个用户在系统中的角色定义非常严格,访问权限最小。

相关内容