Bir SSH bağlantısı kullanılırken sistem hangi adımlardan geçer?


9

Bir SSH bağlantısı kullanılırken sistem hangi adımlardan geçer?

  1. Ssh ile giriş yapmaya çalışıyoruz
  2. sshd kimlik doğrulaması için pam ve pam modülünü başlatır
  3. Pam yapılandırmasına bağlı olarak, kullanıcı adı ve şifre sağlamamız gerekir (pam kontrolleri passwdve shadowdosyaları)
  4. Pam denetler hosts.allow/deny, /etc/shellsve diğer şeyler
  5. Her şey yolunda giderse giriş yaparız
  6. ???
  7. Kabuk başlatıldı

Öyleyse sorum, kullanıcıya hangi kabuğun passwddosyasında atandığını kontrol etmekten hangi mekanizmanın sorumlu olduğu (6. adımda)? Kendisi, belirli bir pam modülü sshdveya başka bir şey mi? Ben passwdbir pam modülü yazarak (kullanıcı adı ve şifre kontrol için) dosyayı değiştirebilirsiniz biliyorum , ama nasıl passwdkabuk girişi için dosyayı değiştirebilirsiniz ?

Yanıtlar:


8

Bildiğim kadarıyla, PAM kullanıcının kabuğunu belirlemez, bu uygulamaya bırakılır. PAM'ın oturum modülleri, söz konusu hizmeti kullanan her girişte yapılması gereken genel eylemler ve kontroller gerçekleştirir. Uygulama daha sonra bir kabuk başlatmak isterse, bunu yapmak ücretsizdir ve genellikle kullanıcı veritabanındaki kabuğu arar.

Sorunuzun OpenSSH ile ilgili olduğunu varsayarsak, tam olarak yaptığı şey: kullanıcının kimliği doğrulandıktan ve PAM oturumları yapıldıktan sonra (PAM¹ kullanacak şekilde yapılandırılmışsa), ssh sunucusu kullanıcı veritabanındaki kabuğu arar (doğrudan değil, PAM kitaplığı aracılığıyla).

Kullanıcı veritabanı yalnızca /usr/passwdarkadaşlarla sınırlı değildir . Linux'ta (bahsettiğinizden beri kullandığınızı varsayıyorum shadow), kullanıcı veritabanını oluşturan passwdayardaki ayar tarafından belirlenir /etc/nsswitch.conf. Çok bilgisayarlı kurulumlarda, yerel veritabanına yapılan genel eklemeler NIS ve LDAP'dir . /etc/passwdİçinde olmayan bir kabuk kullanmak istiyorsanız , bu ne yapılandırabilir (biraz garip olsa da ve belki de neyi başarmaya çalıştığınızı söylerseniz insanlar daha iyi öneriler sunabilir).

Tam kabuk erişimi olmayan kullanıcılara sahip olmak istiyorsanız, doğal çözüm /etc/passwdsınırlı bir kabuk koymak için değiştirmektir - belki de scp, rsync ve cvs gibi birkaç dosya kopyalama türü uygulamaya izin vermek için rssh . Kullanıcının ~/.ssh/authorized_keysdosyasında zorunlu komutları da kullanabilirsiniz .

Ssh sunucusunun ne yaptığının bir izini görmek istiyorsanız, arka plan programını şu şekilde başlatın ssh -ddd. Ayrıca müşterinin görüşünü de alabilirsiniz ssh -vvv, ancak burada sunucunun görünümü sizi en çok ilgilendiren şeydir.

¹ o PAM desteği ile yapılandırılmıştır ve eğer OpenSSH sadece PAM kullanan UsePAMdirektif olarak ayarlanır yesiçinde sshd_config. PAM kullansa bile, PAM'a ek olarak başka kimlik doğrulama yöntemleri de sunar; özellikle ortak anahtar kimlik doğrulaması PAM'den geçmez.


Uygulamamdaki kullanıcıların sistemde hesap oluşturmadan normal kullanıcı olarak kabukta oturum açmasına izin vermek istiyorum. Kullanıcı verileri (kullanıcı adı, şifre ve kabuk) sqlite db içinde saklanacaktır. İlk adım, kullanıcıların db agains kimliğini doğrulayan sqlite pam modülüdür. İkinci adım veritabanından okunan kabuk sağlamaktır. Bu yüzden uygun nis modülü yazarak gerçekleştirilebileceğini düşünüyorum. Cevap için
Thans

@pbm: İstediğin sanmıyorum nis, daha doğrusu db(ya da belki özel bir modül).
Gilles 'SO- kötü olmayı kes'

bu yazım .. "düzgün (özel) nss modülü yazarak" ...
pbm
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.