Elisp: Hassas bilgileri bir init dosyasından nasıl dışlayabilirim? (ör. giriş bilgileri)


11

Başlangıç ​​komut dosyamda bir oturum açma işlevi tanımlamak istiyorum, ancak oturum açma kimlik bilgilerimi sabit olarak kodlamak istemiyorum. İyi bir geçici çözüm, init betiğimin giriş kimlik bilgilerimde yerel bir dosyadan okunmasını ve bu değerleri değişken olarak kaydetmesini sağlamaktır. Bu şekilde, giriş kimlik bilgilerimi güvende tutan dosyayı git dizinimden hariç tutabilirim.

Bu yaklaşımla ilgili herhangi bir öneri veya dosyada tanımlanan bir değere argüman ayarlamanın yolları var mı?

Örneğin, aşağıdakileri kullanmak istiyorum init.el:

;; Set up our login variables here:
(setq file-location "~/.emacs.d/.login")
(setq erc-username "default-name")
(setq erc-password "default-password")
(setq erc-url "default-url")
(setq erc-port "default-port")
(defun read-lines (filePath)
  "Return a list of lines of a file at filePath."
  (with-temp-buffer
    (insert-file-contents filePath)
    (split-string (buffer-string) "\n" t)))
(if (file-exists-p file-location)
    (progn (setq login-credentials (read-lines file-location))
           (setq erc-username (nth 0 login-credentials))
           (setq erc-password (nth 1 login-credentials))
           (setq erc-url (nth 2 login-credentials))
           (setq erc-port (nth 3 login-credentials)))
    (message "No ERC login credentials provided. Please add login credentials as '<username>\n<password>\n<url>\n<port>' in ~/.emacs.d/.login to activate ERC mode."))

;; These message the values from my file correctly.
;; Everything up to this point works as expected
(message erc-username) 
(message erc-password)
(message erc-url)
(message erc-port)

;; Use our login variables here 
;; This doesn't work because the 'quote' function prevents evaluation of my variables, and a 'backquote' did not resolve it either
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(markdown-command "/usr/bin/pandoc")
 '(tls-program (quote ("openssl s_client -connect %h:%p -no_ssl2 -ign_eof -CAfile ~/.ssl/spi_ca.pem -cert ~/.ssl/znc.pem")))
 '(znc-servers (quote ((,erc-url ,erc-port t ((irc\.freenode\.net ,erc-username ,erc-password)))))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

Örneğimin znc.elmodülü burada kullandığını unutmayın . Ben Emacs içinde yapılandırmasında kaynaklanan autogenerated kodunu değiştirme ediyorum M-x customize-group RET znc RETve M-x customize-variable RET tls-program RET.

Yukarıdaki kod ile benim sorun değişkenler custom-set-variablesyukarıdaki benim işlevi içinde yüklenmiyor olmasıdır . Bir dosyadan uygun değerleri yüklemek iyi çalışıyor gibi görünüyor, ancak bunları bir argüman olarak kullanamıyorum. Bunun quote, içeriğinin değerlendirilmesini engelleyen işlevle ilgili olduğuna inanıyorum . ,Değerlendirmeyi zorlamak için bir 'backquote' ( ) denedim , ama bu da çalışmıyor. Bu hatayı düzeltmek veya başka bir yaklaşım sunmak için herhangi bir öneri çok yararlı olacaktır.

Yanıtlar:


11

Emacs ile geliyor auth-source.el. Kendi versiyonumu yuvarlamaya çalışmam.

auth-sourceokumayı kolaylaştırır ~/.authinfo.gpg. İyi programlar zaten destekleyecektir authinfo. Hızlı bir arama ERC'nin kullanabileceğini gösterirauthinfo .

Kapalı rasgele için raf MELPA programlarından kolayca şifrenizi almak için authinfo kullanabilirsiniz ~/.authinfo.gpgböyle

(with-eval-after-load 'random-mode
  (require 'auth-source)
  (let ((auth (nth 0 (auth-source-search :host "secrets.com"
                                         :requires '(user secret)))))
    (setq random-psk (funcall (plist-get auth :secret))
          random-user (plist-get auth :user))))

burada ~/.authinfo.gpgaşağıdaki satır bulunur:

## Used by random-mode.el
machine secrets.com login rasmus password my-secret-password

Elbette güvenlik duygusu bir yalandır. Parolanız artık bir değişkende düz metin olarak saklanıyor:

random-psk => "my-secret-password"

Ama en azından bir yere git-repo veya dropbox'ta değil!

Bir çeşit anahtarlığınız varsa, Gizli Servis API'sını kullanarak oradan kimlik bilgileri alabilirsiniz (bkz. (info "(auth) Secret Service API")).


6

custom-set-variablesgarip - bunun gibi davaları ele alabileceğinden% 100 emin değilim. Deneyebilirsiniz (eval `(custom-set-variables … (erc-password … ,(special-value) …) …), ama bu bana kirli bir saldırı gibi çarpıyor.

Ek bilgileri gpguzantıya sahip bir dosyaya koyun , kaydedin, bir şifre verin ve ardından dosyayı yükleyin. Dosyayı yüklerken parolayı girmeniz gerekecek.

Örneğin sensitive.el.gpg, içeriğe sahip bir dosya oluşturun :

(message "Hello, there!")

Dosyayı kaydedin, tuşuna basın (veya üzerine sekme yaparak) [OK]ve şifrenizi girin. Endişelenmeyin - kaydetmeden önce onay isteyecektir. Ardından, init dosyanızda

(load "sensitive.el.gpg")

Bu işlem, başlangıçta dosyayı yükler ve Emacs'ın şifresini çözebilmesi için şifrenizi girmenizi gerektirir.

Başlangıçta şifrenizi girmek istemiyorsanız, işleve manuel olarak çalışması için bir ad verirdim:

(defun my:keys () (interactive) (load "sensitive.el.gpg"))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.