【问题标题】:Emacs SSH - Enforce read-onlyEmacs SSH - 强制只读
【发布时间】:2020-06-04 11:34:36
【问题描述】:

是否有可能使用具有只读访问权限的 /ssh:user@server 连接到 SSH 服务器,即使该帐户具有写访问权限?我需要这个来防止意外写入。

这是我用来连接的函数:

(defun connect-b2b ()
  (interactive)
  (find-file-other-window "/ssh:user@server:/")
  buffer-read-only)
 (global-set-key (kbd "C-c C-d") 'connect-b2b)

请注意,buffer-read-only 没有帮助,vc-toggle-read-only 也没有帮助。

更新:为了明确我想要实现的目标,我有一个具有读写访问权限的帐户,但是由于这是一个关键业务服务器,我想防止意外更改。不幸的是,我无法更改用户帐户本身的权限,因此我想在本地强制执行此操作。

【问题讨论】:

    标签: ssh emacs readonly tramp


    【解决方案1】:

    第三个建议:使用sshfs在本地提供远程文件系统,使用mount it read-only,然后将Emacs指向那个

    这样一来,您就不会遇到作为具有写入权限的用户直接在远程服务器上运行命令的所有缺陷。

    【讨论】:

      【解决方案2】:

      如果我正确地解释了这个问题,目录局部变量是一种潜在的解决方法。但是,如果有更接近相关路径的 dir-local 配置,这将被覆盖,所以 YMMV。

      (dir-locals-set-class-variables
       'read-only
       '((nil . ((buffer-read-only . t)))))
      
      (dir-locals-set-directory-class "/ssh:user@server:/" 'read-only)
      

      【讨论】:

      • 这不起作用,我仍然能够例如触摸指定目录中的文件。我也在本地尝试过,只有缓冲区是只读的,但是您仍然可以使用 dired 或其他包进行更改。我更新了我的问题只是为了更清楚。
      【解决方案3】:

      例如,我仍然可以触摸指定目录中的文件。

      这与 Emacs 无关。您要求 Emacs 采用操作系统级别的访问控制,但它不能这样做,因为它不是操作系统。在您的情况下,它甚至没有在同一台机器上运行。

      您需要创建一个具有更有限访问权限的新用户,并以 那个 用户身份连接。

      【讨论】:

      • 嗯,当然,它与 Emacs 有关系,因为操作系统命令将从 Emacs 执行。但我知道这很难实现,因为在我的情况下,Emacs 需要阻止所有包执行任何写入命令。
      • @A.C 即使通过 emacs 执行的 shell 命令也不会修改文件?
      • Rorschach,它会因为该帐户具有写入权限。当我说“触摸文件”时,也许我被误解了。我不是说直接在服务器上执行 shell 命令,或者使用 emacs shell 包。我的意思是,即使我使用 dir-locals-set-class-variables 设置只读,如果我尝试说使用 dired 或任何其他 emacs 包创建文件,这将不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 2011-02-25
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多