Sudo şifresini girişten farklı olarak ayarla


29

Ayrıcalıklı bir kullanıcı olarak, sudoşifreyi giriş yaparken kullanılan şifreden başka birine ayarlamaya çalışıyorum .

Bazı araştırmalar yaptım ancak bir cevap bulamadım. sudoBu tür bir yapılandırmayı destekliyor mu ?

Eğer şifrenizi kaybederseniz, her şeyinizi kaybedersiniz. Birisi rootaynı parola ile giriş yapabilir ve kendisini terfi ettirebilir .

sudorootçağrılan kullanıcı şifresi yerine şifre sorma seçeneği vardır , ( rootpw), ancak rootşifre paylaşımı kesinlikle bir seçenek değildir, bu yüzden ayarladık sudo.

config 2FAGeçmişte yaptım , harika çalıştı, ama aynı zamanda otomasyon amacını da yendi. Örneğin, bir expectkomut dosyasıyla bir düzine sunucu arasında ayrıcalıklı bir komut çalıştırmak istiyorsanız , ekleme 2FAişlemi bunu yapmanıza izin vermez.

Bulduğum en yakın çözüm, yalnızca SSH özel anahtarına izin vermek ve sudo(login) şifresinden farklı bir anahtarla şifre-şifre ayarlamak. Yine de rahat değil çünkü acil bir durumda o anahtara sahip olmadığı bir PC ile giriş yapamazsınız.


1
Buna tam olarak neden ihtiyacın var? Belki de sorun başka bir yerdedir. Ayrıcalıklı bir hesapla sisteme giriş yapmak için çift faktörlü kimlik doğrulaması yapmak ve ardından 'NOPASSWD' olması daha iyi olmaz mıydı, böylece sudo şifre istemez mi? O zaman elbette, ağ kapalıyken oturum açabilmek için güçlü bir parola içeren ayrı bir acil durum yerel hesabınız olmalıdır (ssh erişimi yok).
jirib

Yanıtlar:


30

Kök şifresini sormak isterseniz, kullanıcının şifresinin aksine, ekleyebileceğiniz seçenekler vardır /etc/sudoers. rootpwÖzellikle de root şifresini isteyecektir. Var runaspwve targetpwaynı zamanda; Ayrıntılar için sudoers (5) kılavuz sayfasına bakınız.

Bunun dışında sudo, kimlik doğrulama işlemini (diğer her şey gibi) PAM üzerinden yapar. PAM, uygulama başına yapılandırmayı destekler. Sudo'nun konfigürasyonu (en azından Debian sistemimde) /etc/pam.d/sudove şöyle görünüyor:

$ cat sudo 
#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive

Başka bir deyişle, varsayılan olarak, sistemdeki diğer her şey gibi kimliğini doğrular. Bu @include common-authsatırı değiştirebilir ve PAM'in (ve böylece sudo) alternatif bir şifre kaynağı kullanmasını sağlayabilirsiniz. Ortak kimlik doğrulamasında yorumlanmayan satırlar şuna benzer: (varsayılan olarak, örneğin LDAP kullanıyorsanız, bu farklı olacaktır):

auth    [success=1 default=ignore]      pam_unix.so nullok_secure
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so

Alternatif şifreler pam_userdb.soyerine örneğin kullanabilir pam_unix.sove bir Berkeley DB veritabanında saklayabilirsiniz.

örnek

Ben dizin oluşturulan /var/local/sudopass, sahibi / grup root:shadow, mod 2750. İçinde devam ettim ve db5.1_load(Debian Wheezy'de kullanılan Berkeley DB sürümü olan) kullanarak bir şifre veritabanı dosyası oluşturdum :

# umask 0027
# db5.1_load -h / var / yerel / sudopass -t karma -T passwd.db
anthony
WMaEFvCFEFplI
^D

Bu karma mkpasswd -m des"şifre" şifresi kullanılarak oluşturuldu . Çok güvenli! (Ne yazık ki, pam_userdb, eski crypt(3)karma işlemden daha iyi bir şeyi desteklemiyor gibi görünüyor ).

Şimdi, satırı düzenleyip /etc/pam.d/sudokaldırın @include common-authve bunun yerine şunu yerleştirin:

auth    [success=1 default=ignore]      pam_userdb.so crypt=crypt db=/var/local/sudopass/passwd
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so

Pam_userdb'nin .dbgeçirilen veritabanına bir uzantı eklediğini unutmayın , bu yüzden .dbkapalı bırakmalısınız .

Göre dannysauer içinde bir yorumun , sen aynı düzenleme yapmak gerekebilir /etc/pam.d/sudo-ide.

Şimdi, sudo için passwordgerçek giriş şifremi yerine kullanmalıyım :

@ sudotest @ anthony: ~ $ sudo -K
@ sudotest @ anthony: ~ $ sudo echo -e '\ nit çalışmış'
[sudo] anthony için şifre: passwordRETURN

işe yaradı

Ayrıca, sudo'nun daha yeni sürümlerinin sıklıkla "sudo -i" için kullandığı "sudo-i" yi de yapılandırdığınızdan emin olun (satıcı bir şeyleri değiştirmediyse).
dannysauer

PAM config pls hakkında ayrıntılı bilgi verebilir misiniz?
Shâu Shắc

@ ShâuShắc PAM config değişiklikleri dahil bir örnek ekledim.
derobert

Teşekkürler. Ancak db51-utils'i Redhat / centos veya kaynaklarında hiçbir yerde bulamıyorum, yalnızca Debian türevlerinde mi mevcut?
Shâu Shắc

3
crypt(3)Glibc'in modern versiyonlarındaki " eski karma", sha-512'yi destekliyor. mkpasswd -m sha-512. pam_userdb.so bunları iyi idare edebilir.
Andrew Domaszek

6

Redhat / Centos için, aşağıdaki adımlarla gereksinim elde edilebilir:

Özel kullanıcı oluştur ve ilet:

# db_load -t hash -T /usr/local/etc/passwd.db
user
pass
^d

Sudo pam.d dosyasını şu şekilde görünecek şekilde düzenleyin:

$ cat /etc/pam.d/sudo

auth            required        pam_userdb.so db=/usr/local/etc/passwd
account         required        pam_userdb.so db=/usr/local/etc/passwd
password        include         system-auth

session         optional        pam_keyinit.so revoke
session         required        pam_limits.so

Hala yapılandırma yolunu arıyorum, bu yüzden sadece belirli bir kullanıcı / grubun bu özel yöntemle yetkin olması gerekirken, diğerleri hala normal sistem-auth yöntemiyle yetkisiz olabilir. Biri bana biraz tavsiyede bulunabilir mi?


Bunu PAM'daki tam eylem sözdizimi ile yapabiliyor olmalısınız. örneğin, [user_unknown=ignore,success=ok,default=bad]... ama bunu doğru yapmak için bununla oynamak zorunda kalacaksın (ve PAM belgelerini okuyacaksın)
derobert

Bu pam_succeed_if, kullanıcı bir grup listesinden biriyse bir modülü atlamak veya değilse iki modülü atlamak kullanılarak da yapılabilir.
dannysauer

Yani, genellikle böyle bir şey: /// auth [success = default = yoksay = 1] pam_succeed_if.so danny kullanıcısı: frank /// auth yeterli danny_frank_module.so /// Yeterli not_danny_frank.so
dannysauer

3

Sudo böyle bir kurulumu desteklediğini sanmıyorum. Sudo parola isteminin amacı, sudo komutunu veren kişinin oturum açanla aynı kişi olmasını sağlamaktır ve bunu yapmanın en kolay yolu, oturum açmış olan kullanıcının kendilerini yeniden doğrulamasını istemektir.

Başka bir deyişle, sudo şifre istemi amacı değil kurmak yetkisini , bu kurmaktır kimliğini . Belirlenen kimliğe ve sudo konfigürasyonuna dayanarak, söz konusu kullanıcının gerekli yetkiye veya erişim haklarına sahip olup olmadığına karar verilebilir.


3
Sudo, (root şifresini veya belirli bir kullanıcıyı veya hedef kullanıcının şifresini sormak istemeniz haricinde), fakat PAM bunu yapmaz. Ve sudo PAM kullanıyor.
derobert,

1

Endişeniz, hesap şifrenizin açıklanabilmesidir. Çözüm, giriş şifresini açıklayabileceği şekilde kullanmamaktır. Ssh ile parola kablo ile şifrelenmiştir, bu yüzden sorun olmaz. Kullanıcılar, şifre gizliliğini korumak değil, şifre tahmin saldırılarını önlemek için ssh ile şifre yetkilerini kapatırlar. Aynı hesap şifresini başka bir şey için kullanıyorsanız, şifreyi sağlamak için güvenli ve şifreli bir kanal kullandığınızdan emin olun. Bir keylogger veya her neyse endişeleniyorsanız, giriş yapmak için güvenilmeyen makineleri kullanmayı bırakın.

Birisi ssh şifrenizi alabilirse, muhtemelen alternatif sudo şifresini de alabilir, bu yüzden bağlantılarınızı harcamaktan daha güvenli hale getirmek için zaman harcamaktan daha iyi, daha fazla güvenlik yanılsaması için işleri daha karmaşık hale getirebilirsiniz.


0

Bunu test edebileceğim ve detayları çözebileceğim bir sisteme hemen erişemiyorum, ancak bir fikrim var:

  • (Normal giriş hesabınızın olduğunu varsayalım shau.)
  • İkinci bir hesap oluşturun: shau2. (Aynı UID'ye sahip olmasını isteyip istemediğinizden emin değilim shau.)
  • shau2NOPASSWD ile sudo ayrıcalıklarına sahip olacak şekilde yapılandırın .
  • Bir takma ad veya bir kabuk betiği ayarlayın su shau2 -c sudo "$@". Bu shau2şifre sormalı . Doğru girilirse, (bir şifre sormamalı) sudoolarak çalışacaktır shau2.
  • shauSudo ayrıcalıklarını kaldırın .

Ne yazık ki, sudo ayrıcalıklarına sahip her kullanıcı için bunu tekrarlamanız gerekir.


0

Teşekkür ederim Shau SHAC @ için cevap ! Bu çözüm aynı zamanda LinuxMint 17.1 Cinnamon 32bit için de çalışıyor ( Çalıştırmak için sadece db-utilpaketi kurdum db_load).

Ama sonuçta ortaya çıkan passwd.dbdosyayla kafam karıştı . Cevabınızdakilerle aynı şeyi yaptım (ama David ve Jones kullandı , daha dikkat çekici görünüyorlardı):

# db_load -t hash -T /usr/local/etc/passwd.db
david
jones
^d

Ancak, girilen kimlik bilgileri karma dosyasında düz metin olarak saklanır:

# grep 'jones.*david'  /usr/local/etc/passwd.db
Binary file /usr/local/etc/passwd.db matches

Ayrıca görebilirsiniz David ve jones aracılığıyla mcedit :

görüntü tanımını buraya girin

Evet, izinlerini sınırlamak mümkündür /usr/local/etc/passwd.db. Ancak yine de, düz metin olarak depolanan kullanıcı adı ve şifre hatalı.


Ayrı sudo şifresi ile bile , bazı potansiyel güvenlik açıkları bulunmaktadır (varsayılan olarak dağıtım ayarları). Bu nedenle, ayrı bir şifre su için geçerli değildir (bu nedenle kök oturumunu suve oturum açma şifresini kullanarak başlatmak mümkündür ). Ayrıca, Politika Kiti tarafından ayrı bir şifreye uyulmaz ( Synaptic'i kullanarak synaptic-pkexecgiriş ve şifreyi başlatmak mümkündür . Paketleri sil ...). Bu sorunlar, yapılandırma dosyalarının eklenmesiyle ortadan kaldırılabilir.

Genel olarak, güvenli ayrı sudo şifresinin yalnızca özel PAM modülünün (belki de bu modül şifre ve SHA-512 dosyadan okunan dosyadan okunmasıyla karşılaştırılır) veya SELinux işlevselliği ile elde edilebildiği görülmektedir.

Not: üzgünüm, bir yorum olmalı. Ancak, metin biçimi nedeniyle cevap olarak gider. Anlayışın için teşekkürler.

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.