根据安全最佳实践,不应允许使用密码或密钥通过 SSH 以 root 身份登录。相反,应使用 sudo。
但是,如果想要使用 SSH(SFTP)远程编辑服务器配置文件(例如 /etc 中的文件(Apache、Cron,随便什么都可以),该怎么做呢?
通过 SFTP 进行 root 可访问文件远程编辑是否符合安全最佳实践
如何设置文件权限、用户组等以遵循安全最佳实践
目前我使用受密码保护的公钥身份验证以 root 身份登录,但我不确定是否可以采取更安全的做法,以便可以完全禁用面向 root 的 SSH 登录。
服务器是Ubuntu 12.04。
答案1
如果确实需要远程编辑,一个简单的解决方案就是在另一个本地用户上保留 /etc(或其中的一部分)的副本,并设置系统以将更改从那里复制到实际的 /etc。更好的方法是使用 git —— 或 svn,或您选择的任何其他版本控制系统 —— 这样您还会有额外的更改日志。
还可以在 SFTP 上设置 chroot 并禁用特定帐户的正常登录 - 或者限制该用户仅从指定的 IP 地址登录 - 使用与 OpenSSH 相同的功能(匹配组等)。关于这一点,请查看http://www.thegeekstuff.com/2012/03/chroot-sftp-setup/
但是请记住,/etc 上的大多数配置文件都可以通过编辑获得 root 访问权限。我见过使用 svn/git 配置的系统在接受文件更改之前检查配置文件的有效性——这可用于仅接受安全的配置格式。
无论如何,这个问题有很多不同的解决方案。这只是其中一种方法。
答案2
我不明白为什么不能通过 SSH 使用 sudo 编辑这些文件。我经常这样做,例如
sudo nano /etc/apache2/sites-available/default
如果您想使用 GUI 编辑器,您可以使用 X 隧道。您必须在 ssh conf 文件中允许它,然后-X
在 ssh 命令行上使用该选项。
ssh -X server.example.com
然后您可以使用 GUI 编辑器编辑该文件:
sudo gedit /etc/apache2/sites-available/default
答案3
看这个答案有关如何通过 Sublime Text 中的 SSH 隧道执行此操作的示例。