原始问题
我正在尝试创建一个 Lisp 库,除其他外,它可以编辑我的系统/etc/hosts
文件和 nginx 配置。我面临的问题是,因为我的 Lisp 图像作为非特权用户运行,所以我的库不能做这些事情。理想情况下,当需要 root 权限时,我能够为我的库提供密码,以便它可以暂时提高其访问权限以完成任务。唉,我还没有找到任何与sudo
. 有吗?我是以错误的方式接近这个吗?我该如何解决这个问题?
在代码中,我想要做的基本上是这样的:
(with-sudo (:username "root" :password (securely-read-line))
(with-open-file (f "/etc/hosts" :direction :output :if-exists :append)
(format f "127.0.0.1 mywebsite.local~%")))
澄清
我在 OS X 上使用 SBCL。我正在尝试创建一个库,它基本上是网站快速项目的专业化。目前,每次我在本地计算机上设置一个新的 Web 项目时,我都必须编辑分布在我系统中的配置文件。我希望尽可能多地自动化,并且我希望能够在我通常打开并连接到单个 SBCL 实例的 SLIME 会话中执行此操作。
以下是其他一些注意事项:
- 我不希望我的 SBCL 主要实例成为
setuid
root - 我不介意生成一个新进程,无论是小型 C 程序还是加载几行代码然后退出的 SBCL 裸实例。
- 我想使用保持 Lisp 与 C 的比率尽可能高。
- 某些文本编辑器(例如 TextMate)在访问需要更高权限才能查看的文件时会提示输入用户名和密码,从而提供相应的访问权限。我想知道如何让我的 Lisp 库做同样的事情?
起初我无法
sudo
(实际程序本身)在 SBCL 中工作:(inferior-shell:run/ss '("sudo" "ls" ".")) ;; how can I pass sudo a password?
现在看起来可以使用
sudo
's-S
选项(谢谢 JustAnotherCurious)。我想我可能会走这条路;这绝对是我现在所倾向的。
不管怎样,谢谢大家!我从你们所有人那里学到了很多东西。