CH-J Server Manager通过 SSH 管理服务器
菜单
全部指南与文章 →

如何通过 SFTP 和 sudo 编辑 /etc 中的文件

了解 SFTP 为何在 /etc 中提示权限不足,以及如何在不开放 root 访问的情况下安全修改配置文件。

为什么 SFTP 提示权限不足

SFTP 以登录时使用的账户运行,没有与 sudo 对应的功能。/etc 中的大多数文件属于 root,因此普通账户可以读取其中一部分,但不能写入任何一个。这是正确的行为,不应通过放宽权限来解决。

不要这样做

不要对配置文件运行 chmod 777,不要将 /etc 中的文件所有者改成自己的账户,也不要仅为一次编辑就启用 root 密码登录。某些服务会拒绝使用权限过于宽松的文件,而且每一项这样的修改都会在编辑完成后长期降低服务器的安全性。

在终端中使用 sudoedit

sudoedit 会将文件复制到临时位置,以你自己的账户在编辑器中打开,并且只在保存后才写回原文件。编辑器本身不会以 root 身份运行。

sudoedit /etc/nginx/nginx.conf

先上传副本,再安装到目标位置

如果更习惯本地编辑器,可以将文件上传到自己的主目录,再用 sudo 安装到目标位置。先备份原文件,备份位置应避开所有配置包含指令的读取范围。install 命令会设置所有者和权限模式;在使用 SELinux 的系统上,restorecon 会设置正确的上下文。在采用这些值之前,先检查原文件的所有者和权限模式,因为并非所有文件都使用 root 和 644。

stat -c '%U %G %a' /etc/nginx/nginx.conf
sudo cp -a /etc/nginx/nginx.conf /root/nginx.conf.bak
sudo install -o root -g root -m 644 ~/nginx.conf.new /etc/nginx/nginx.conf
sudo restorecon -v /etc/nginx/nginx.conf

应用前先验证

存在语法错误的文件可能导致服务在下次重启时停止运行。在重新加载服务前,先运行该服务的检查命令。修改 SSH 设置时,保持当前会话打开,并从第二个窗口测试一次新登录。

sudo nginx -t
sudo sshd -t
sudo visudo -cf /etc/sudoers.d/example

在 CH-J Server Manager 中使用 sudo 编辑

当 SSH 账户无法读取文件时,File Manager 会提供使用 sudo 打开的选项,并警告保存时需要 sudo。保存时,数据先传入该账户的私有临时目录,验证后由 sudo 移到目标位置,同时保留所有者、权限、ACL 和 SELinux 上下文。可选的备份功能会在替换前保存原文件的副本。密码仅发送给服务器上的 sudo,不会保存在磁盘或日志中。如果 sudo 策略要求使用终端(requiretty),应用不会绕过该要求。应用不验证文件内容,因此请自行运行服务的检查命令。

详细文档

man: sudo / sudoedit →

man: install →

生物识别解锁与安全 →