Paylaşılan Anahtarlar .ssh / authority_keys ve sudo birlikte nasıl çalışır?


15

Ben .ssh / yetkili_anahtarları ayarladım ve pub / private anahtarını kullanarak yeni "kullanıcı" ile giriş yapabilirim ... Ayrıca sudoers listesine "kullanıcı" ekledim ... şimdi sorun ne zaman Bir sudo komutu, aşağıdaki gibi basit bir şey yürütmeye çalışıyorum:

$ sudo cd /root

Girdiğim şifremi soracak, ancak çalışmıyor (ayarladığım özel anahtar şifresini kullanıyorum)

Ayrıca, kullanıcının şifresini kullanarak

$ passwd -l user

Neyi kaçırıyorum?

İlk sözlerim yanlış anlaşılıyor ...

Sistemimi sertleştirmeye çalışıyorum ... nihai amaç basit şifre kimlik doğrulamasına karşı giriş yapmak için pub / özel anahtarları kullanmaktır. Bunların tümünü yetkili_anahtarlar dosyası üzerinden nasıl ayarlayacağımı anladım.

Ayrıca sonuçta kök hesabı aracılığıyla sunucu oturum açmalarını önleyeceğim. Ama bunu yapmadan önce sudo ikinci bir kullanıcı (her zaman sisteme giriş kullanıcı olacak) için çalışmak gerekir.

Bu ikinci kullanıcı için düzenli şifre girişlerini önlemek ve yalnızca pub / özel anahtar girişlerini zorlamak istiyorum, kullanıcıyı "passwd -l user üzerinden kilitlemezsem ... o zaman bir anahtar kullanmazsam, yine de düzenli bir şifre ile sunucuya girmek.

Ama daha da önemlisi sudo şifresini devre dışı bırakmış bir kullanıcı ile bir pub / özel anahtar kurulum ile çalışmak gerekir.


Düzenleme: Tamam, sanırım ben (çözüm):

1) / etc / ssh / sshd_config dosyasını ayarladım ve ayarladım PasswordAuthentication no Bu, ssh şifre girişlerini engelleyecektir (bunu yapmadan önce çalışan bir genel / özel anahtar kurulumuna sahip olduğunuzdan emin olun.

2) Sudoers listesini ayarladım visudove ekledim

root      ALL=(ALL) ALL
dimas     ALL=(ALL) NOPASSWD: ALL

3) root şifre olacak tek kullanıcı hesabı, şifre ayarlanmamış iki kullanıcı hesabı "dimas" ve "şeri" ile test ediyorum (şifreler boş, passwd -d user)

Yukarıdakiler aslında herkesin şifrelerle sisteme giriş yapmasını engeller (bir genel / özel anahtar ayarlanmalıdır).

Ayrıca sudoers listesindeki kullanıcıların yönetici yetenekleri vardır. Ayrıca sufarklı hesaplara da yapabilirler . Temelde "dimas" olabilir sudo su sherry, ancak "dimas YAPAMAZ su sherry. Benzer şekilde sudoers listesinde DEĞİL herhangi bir kullanıcı YAPAMAZ su userveya sudo su user.

NOT Yukarıda belirtilenler işe yarar ancak güvenlik düzeyi düşük olarak kabul edilir. "Dimas" veya "şeri" kullanıcıları olarak koda erişebilen her komut dosyası, root erişimi elde etmek için sudo'yu çalıştırabilir. Uzak kullanıcılara ayarlara rağmen giriş yapma olanağı veren bir hata, Firefox gibi bir şeyde uzaktan kod yürütme veya artık kullanıcı olarak root olarak çalışabilecek istenmeyen kodların çalışmasına izin veren başka bir kusur. Sudo her zaman bir parola gerektirmelidir, aksi takdirde başka bir kullanıcı yerine root olarak giriş yapabilirsiniz.

Yanıtlar:


10

sshve sudobirbirleriyle hiçbir ilgisi yok. Bir sshkimlik doğrulama yöntemi ayarlamak hiçbir şey yapmaz sudo. sudobir sshşifre anlamayacak .

passwd -lkullanıcının şifresini artık doğrulayamaması için kullanıcının hesabını kilitlemeyi amaçlamaktadır. Bu, kullanıcının parola olmadan kimlik doğrulaması yapmasını sağlayan şeylerin tam tersidir.

Ben ne istediğini düşünüyorum NOPASSWDseçeneği sizin sudoersdosyası .

(PS, bir çalışan olmak için hiçbir neden yok cdolan komutu sudo. cdBöylece en kısa sürede, ebeveyn süreçlerine yaymak değil sudoçıkışlar, başladığınız sen geri nerede.)

Düzenleme: Hesap parolasını kilitlemek istediğinizi ve sudo'nun genel / özel anahtarları anlamasını istediğinizi söylüyorsunuz. Maalesef sudo ssh anahtarlarını kullanmayacak. Bu ssh değil. Kullanıcıların parolalarıyla oturum açmasını istemiyorsanız, yanıtın hesabı kilitlemek için değil ssh parola kimlik doğrulamasını devre dışı bırakmak olduğunu düşünüyorum . Daha sonra kullanıcılar için ssh yetkili_anahtarları ile giriş yaptıktan sonra sudo için kullanabilecekleri bir parola saklayabilirsiniz.


tamam, ancak kullanıcının şu şekilde bir parolasının olmaması: passwd -l user ... sudo komutunun çalışmamasına neden olur mu?
farinspace

@ farinspace Evet, soruyu daha iyi anlıyorum ve görüşlerimi önemli ölçüde genişlettim. passwd -lhesabın KİLİTLİ olduğu anlamıyla şifreyi kaldırır - yani hiçbir şifre çalışmaz. Sudo'da parola kimlik doğrulamasını kapatmak istiyorsunuz.
coneslayer

bu nasıl mantık: Sistem pub / özel anahtar girişlerinde yoluyla sertleştirilir ... ve yine sadece yönetici Sudoers liste kullanıcı eklemek mümkün olacaktır olarak Sudoers dosyasında şifre kapatarak hala güvenli olacağını
farinspace

özel bir anahtar kullanıldığında bunun için bir şifre belirlemek için normaldir, ya da sadece o set ve sunucu girişte herhangi şifre girişi baypas yok yeterince güvenlidir
farinspace

4
@coneslayer bu cevap% 100 doğru değil. Aşağıda görebileceğiniz gibi, sudo ssh kimlik doğrulamasına uyacak şekilde yapılandırılabilir.
Andre de Miranda

18

Yapmak istediğiniz şey mümkündür, ancak pam-ssh-agent-auth adlı bir PAM modülünü derlemeniz gerekeceğinden biraz deneyim gerektirecektir .

İşlem oldukça basittir:

$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3

$ ./configure --libexecdir=/lib/security --with-mantype=man

$ make
$ sudo checkinstall

Sudo yapılandırmasını düzenleme:

$ sudo visudo

Aşağıdakileri ekleyin:

Defaults env_keep += SSH_AUTH_SOCK

Sudo PAM ayarlarını değiştirerek devam edin:

$ sudo vi /etc/pam.d/sudo

Ekle (@include satırlarının hemen üstünde):

**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account


4
Bu kabul edilen cevap olmalı
Christopher Monsanto

1
Bu talimatlar (özellikle /etc/pam.d/sudotalimatlar) mevcut Ubuntu sürümleri için güncel değildir. Cevabımda güncel talimatlar verdim.
Chris Pick

4

Andre de Miranda'nın cevabı pam_ssh_agent_auth kullanarak güzel bir çözüm sunuyor , ancak parçalar güncel değil. Özellikle /etc/pam.d/sudomevcut birçok Linux sürümünü kullanırken talimatlar.

Ubuntu 12.04'ü tam olarak çalıştırıyorsanız, bir ppa: ppa: cpick / pam-ssh-agent- auth'dan bir pam_ssh_agent_auth derlemesi sağlayarak işlemi basitleştirdim .

Paketi çalıştırarak kurabilirsiniz:

sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth

Kurulumdan sonra, bu PAM modülünü sudo ile kullanmak istiyorsanız, sudo'nun ayarlarını ve PAM yapılandırmasını yapılandırmanız gerekir, Ubuntu 12.04'te aşağıdaki iki dosyayı oluşturarak bunu yapabilirsiniz:

/etc/sudoers.d/pam-ssh-agent-auth:

Defaults    env_keep+="SSH_AUTH_SOCK"

/etc/pam.d/sudo:

ent#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

Şef kullanıyorsanız, yukarıdaki işlem aşağıdaki iki konumdan birinde bulunan yemek kitabımla otomatikleştirilebilir :
https://github.com/cpick/pam-ssh-agent-auth
http: //community.opscode .com / yemek kitapları / pam-ssh-agent-auth .

Yemek kitabının filesdizini, yukarıda açıklanan ve Ubuntu 12.04 ile tam olarak çalışan dosyaları içerir /etc/pam.d/sudove /etc/sudoers.d/pam-ssh-agent-authdiğer sürümleri / dağıtımları kullanırken yararlı bir başlangıç ​​noktası olmalıdır.


-1

Bir parola girmeyi atlamayı bildiğim tek yol, sudoersdosyanızda devre dışı bırakmaktır .

Bunun gibi bir şey rootve tüm üyelere şifresiz wheel tam erişim verecektir :

root    ALL=(ALL)   NOPASSWD: ALL
%wheel  ALL=(ALL)   NOPASSWD: ALL

Ancak bu kesinlikle tavsiye edilmez . Bu sunucunun yürütmesi için belirli bir komutunuz varsa, yalnızca bu komuta erişmelerine izin verin. Ya da daha iyisi, yapmak istediğiniz şeyi başarmak için bir güvenlik deliği açmayı gerektirmeyen farklı bir yol bulun.


şifreyi kullanarak sakıncası yoksa, sorun kullanıcı parolasını devre dışı bıraktıktan sonra göründüğü gibi: passwd -l user ... Hala pub / özel anahtar ile sisteme giriş yapabilirsiniz (özel anahtar güvenli bir parolaya sahiptir) , bir sudo yaptığınızda bir şifre ister, ancak bu özel anahtardan şifre değil gibi görünüyor, eğer kullanıcı için devre dışı bıraktıysanız bu şifre ayarlanır (ssystem üzerinde bir şifre korumaktan kaçınmaya çalışacağım ve özel anahtarda)
farinspace

"kullanıcı için devre dışı bırakmışsam bu şifre nerede ayarlanır?" Hiçbir yerde. Hesabı kilitlediğiniz için işe yarayacağınız bir parola yoktur.
coneslayer

Uzaktaki sistemde hesabı yeniden etkinleştirmeniz ve ardından şifreyi ayarlamanız gerekir. Her iki durumda da, şifreyi mutlaka her iki makinede de saklamanız gerekir. Arıza durumunda yerel girişlerden başka bir sebep yoksa.
Jack M.15
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.