元の質問
とりわけ、システムの/etc/hosts
ファイルとnginx構成を編集できるLispライブラリを作成しようとしています。私が直面している問題は、私の Lisp イメージが非特権ユーザーとして動作するため、私のライブラリがこれらのことを実行できないことです。理想的には、root 権限が必要になったときに、ライブラリにパスワードを提供して、物事を成し遂げるためにアクセス権を一時的に引き上げることができるようにします。残念ながら、Common Lisp で に相当するものを見つけることができませんでした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 サイト用の QuickProject の特殊化であるライブラリを作成しようとしています。現在、ローカル コンピューターで新しい Web プロジェクトをセットアップするたびに、システム全体に散らばっている構成ファイルを編集する必要があります。私はそれを可能な限り自動化したいと考えており、通常開いて SBCL の単一のインスタンスに接続している SLIME セッション内からこれを実行できるようにしたいと考えています。
その他の考慮事項を次に示します。
setuid
SBCL のメイン インスタンスをrootにしたくない- それが小さな C プログラムであろうと、数行のコードをロードして終了する SBCL の裸のインスタンスであろうと、新しいプロセスを生成することは気にしません。
- Lisp と C の比率をできるだけ高く保ちたいと思います。
- 一部のテキスト エディター (TextMate など) は、閲覧に高い権限が必要なファイルにアクセスすると、ユーザー名とパスワードを求めるプロンプトを表示し、それに応じてアクセスを許可します。Lisp ライブラリに同じことをさせるにはどうすればよいのだろうか?
sudo
最初は、 (実際のプログラム自体) を SBCL 内から動作させることができませんでした:(inferior-shell:run/ss '("sudo" "ls" ".")) ;; how can I pass sudo a password?
sudo
のオプションを使用すると、それが可能になるよう-S
です (JustAnotherCurious に感謝します)。私はこの道を行くかもしれないと思います。それは間違いなく私が今傾いているものです。
とにかく、みんなありがとう!私は皆さんから多くのことを学んでいます。