Bir SSH / SCP / SFTP kullanıcısını bir dizine sınırlama


36

Bir SCP / SFTP kullanıcısını bir dizine sınırlamanın basit bir yolu var mı? Karşılaştığım tüm yöntemler, ikili dosyaları kopyalayarak chroot hapishanesi kurmamı gerektiriyor, ancak bunun gerekli olması gerektiğini sanmıyorum.

Yanıtlar:


29

SSH Yerel olarak bir SFTP kullanıcısını chrootlamayı destekler. Sadece tedarik etmeniz gerekiyor

ChrootDirectory

Sshd config dosyanızda sshd'yi yeniden başlatın.

Eğer sadece sftp yapıyorsanız, o zaman daha fazla bir şey yapmak zorunda değilsiniz. Ne yazık ki, bu scp için çalışmıyor. Etkileşimli kabuk için, ikili dosyaları ve / dev düğümlerini chroot'a kopyalamanız gerekir.

Örnek bir yapılandırma, sadece bir kullanıcı için test kullanıcısı:

Match User testuser
    ChrootDirectory /home/testuser
    ForceCommand internal-sftp

Farketmesi gereken birkaç şey, sshd_config man sayfasından:

    Yol adının tüm bileşenleri, sahip olmayan kök dizinlere sahip olmalıdır.
    başka bir kullanıcı veya grup tarafından yazılabilir. Chroot'tan sonra, sshd (8),
    çalışma dizini, kullanıcının ana dizinine

Daha fazla bilgi için sshd_config dosyasındaki ChrootDirectory öğesini arayın.


2
"Kullanıcı test kullanıcısı ile eşleştir" ile başlayan kısmın dosyanın END'sinde olması gerektiğine dikkat edin, çünkü yalnızca kullanıcı bu noktadan itibaren "test kullanıcısı" ise yapılandırma satırlarını içerecektir.
Magnus

1
Yalnızca SFTP Protokolü için Chroot yapmak, ancak normal SCP bağlantılarına izin vermek de mümkün mü?
lanoxx

1
Benim Ubuntu 14.04 makinede, değiştirmek de gerekliydi Subsystem sftp /usr/lib/openssh/sftp-serverhattıSubsystem sftp internal-sftp -f AUTH -l VERBOSE
partofthething

@Magnus veya başka bir Matchbölüme kadar .
roaima

12

Bir chroot oldukça basit bir yöntemdir. İşletim sistemi zaten bu güvenlik özelliğine sahip olduğundan, daemon yazarları onu yeniden denemeye kalkışmazlar.

Rssh , chroot hapishanesi kurma konusunda bir rehberle geliyor. Bu öyle CHROOTkaynak dağılımında dosyada. Özetle, olması gereken:

  • Kökünden kopyalanmış Birkaç ikili,: /usr/bin/scp, /usr/libexec/openssh/sftp-server,/usr/bin/rssh_chroot_helper
  • Kullandıkları kütüphaneler ( {/usr,}/lib/lib*.so.[0-9]) aynı şekilde kopyalandı
  • A /etc/passwd(oldukça büyük olasılıkla bir kopya değil, ana kopyadan türetilmiş)
  • Birkaç cihazlar: /dev/null, /dev/ttyve ayrıca bir /dev/loggünlük kaydı için soket (ve bu soket üzerinde dinlemek için Syslog'un söylemek gerekir)

Rssh belgelerinde bulunmayan ekstra ipucu: Eğer bir chroot hapishanesinde erişilebilir olması gereken bazı dosyalara ihtiyacınız varsa , hapishanenin dışından ek dizin hiyerarşileri oluşturmak için bindfs veya Linux kullanabilirsiniz mount --bind. bindfsYeniden birleştirilen dizinin, örneğin salt okunur olması için daha kısıtlayıcı izinlere sahip olmasını sağlar. ( mount --bindçekirdek düzeltme ekini uygulamadığınız sürece değil; Debian bu eki doğu lenny'den beri eklemiştir, ancak diğer dağıtımların çoğu 2011'den beri değildir.)


7

Sessizce bakmak isteyebilirsiniz (veya daha yeni, rssh ); aslında sadece scp veya sftpd alt sistemini başlatmak için kullanılabilecek bir giriş kabuğudır. Gelen scponlycvaryant söz konusu alt sistemi aktive önce chroot gerçekleştirir.


scponly en azından Ubuntu’da
tobixen
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.