Kabuk erişimi olmayan kullanıcılara sftp erişimi vermek mümkün mü? Eğer evet ise, nasıl uygulanır?


29

Sadece kendi set home'larına dosya yüklemesi gereken bir kullanıcı dizim var. Sftp'nin yeterli olacağını düşünüyorum, ancak kabuktan giriş yapmalarını istemiyorum. Bu mümkün mü? Platformum centos 7, kullanıcının homedir'leri depolanıyor / / / user kullanıcı diyelim

Bu ayarlarla kullanıcı oluşturdum

useradd -m -d /personal/user1 -s /sbin/nologin

Kullanıcıya bir passwd atandı, daha sonra makineye giriş yapmak için sftp kullandığımda bağlanamadığını söylüyor.


scponly github.com/scponly/scponly/wiki chroot isteğe bağlı
user2497

Yanıtlar:


11

İçermek için /etc/ssh/sshd_configdüzenleyin:

Match User [SFTP user]
ForceCommand internal-sftp

Yeniden başlatın sshd. Birden fazla kullanıcınız varsa, hepsini virgülle ayrılmış şekilde eşleştiren kullanıcı satırına yerleştirin:

Match User User1,User2,User3

sftpKabuk erişimine izin vermeyecek şekilde yapılandırmanın anahtarı, kullanıcıları ForceCommand seçenek aracılığıyla sınırlandırmaktır .


Tamam, tüm adımları izledim ama giriş yapmadım
Sollosa

2
@Sollosa Match User [SFTP user] ForceCommand internal-sftpSadece chrooting yapmadan deneyiniz .
Martin Prikryl

MartinPrikryl çalıştı Martin, teşekkürler, ben sadece chrootdirectory parametresini & viola kaldırdım
Sollosa

1
Bunun üzerine, şunları yapabilirsiniz chrootkullanıcılar bu tanımlanan "hapisten" dışarı yukarı gezinmek ve böylece
ivanivan

37

Küçük sunuculardan oluşan bir grup kullanıcıyı yönetmek için işte kullandığım SSH erişimini yönetmek için aşağıdaki kurulumu seviyorum. Güvenlik ve yönetim kolaylığı önceliklerim listesinde yüksek.

Temel özellikleri SSH haklarını Unix grup üyeliği ile kolayca yönetebilmekte, sıkı tanımlanmış izinlere sahip olmakta ve varsayılan olarak güvendedir.

Kurma

Yazılım yükleyin (isteğe bağlı ancak kullanışlı):

yum install members   # or apt install members

Grup ekle:

addgroup --system allowssh
addgroup --system sftponly

Olarak /etc/ssh/sshd_config, ayarlara şu olmasını sağlamak No:

PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no

Ve sonunda /etc/ssh/sshd_config, bu iki stanza ekleyin:

Match Group allowssh
    PubkeyAuthentication yes

Match Group sftponly
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

(dosyayı düzenledikten sonra SSH'yi yeniden başlatmayı unutmayın)

açıklama

Peki, bunlar ne işe yarıyor?

  • Ek bir güvenlik önlemi olarak her zaman kök girişlerini devre dışı bırakır.
  • Parola tabanlı girişleri her zaman devre dışı bırakır (zayıf şifreler sshd çalıştıran sunucular için büyük bir risktir).
  • Yalnızca allowsshgruptaki kullanıcılar için (pubkey) giriş izni verir .
  • sftponlyGruptaki kullanıcılar SSH üzerinden kabuk alamazlar, sadece SFTP.

Kimlerin erişimi olduğunu yönetmek daha sonra grup üyeliğini yöneterek yapılır (bu değişiklikler hemen etkili olur, SSH yeniden başlatılması gerekmez):

# adduser marcelm allowssh
# members allowssh
marcelm
# deluser marcelm allowssh
# members allowssh
#

Sftp kullanıcılarınızın her ikisinin de üyesi olmaları gerektiğini sftponly(bir kabuk almadıklarından emin olmak için) ve allowssh(ilk etapta giriş yapmaya izin vermek için) olması gerektiğini unutmayın.

Daha fazla bilgi

  1. Lütfen bu konfigürasyonun şifre girişlerine izin vermediğini unutmayın ; tüm hesapların ortak anahtar kimlik doğrulaması kullanması gerekir . Bu muhtemelen SSH ile alabileceğiniz en büyük güvenlik kazancıdır, bu yüzden şimdi başlamak zorunda olsanız bile çabaya değer.

    Eğer gerçekten bu istemiyorsanız, o zaman da eklemek PasswordAuthentication yesiçin Match Group allowsshdörtlük. Bu, allowsshkullanıcılar için hem pubkey hem de parola kimlik doğrulaması yapmanıza olanak sağlar.

  2. Bu yapılandırma, herhangi bir sftponlykullanıcıyı giriş diziniyle sınırlar. Bunu istemiyorsanız ChrootDirectory %hyönergeyi kaldırın .

    Eğer varsa do işe chrooting'e istiyorum, kullanıcının ev dizini (ve üstüne konacak dizin) aittir önemlidir root:rootve diğer grup / gruplar tarafından değil yazılabilir. Giriş dizininin alt dizinlerinin kullanıcıya ait ve / veya yazılabilir olması sorun değil.

    Evet, kullanıcının giriş dizini kök kullanıcıya ait ve kullanıcıya ait olmamalıdır. Ne yazık ki, bu sınırlamanın iyi nedenleri var . Durumunuza bağlı olarak, ChrootDirectory /homeiyi bir alternatif olabilir.

  3. sftponlyKullanıcıların kabuğunu ayarlamak, /sbin/nologinbu çözüm için ne gerekli ne de zararlıdır, çünkü SSH ForceCommand internal-sftp, kullanıcının kabuğunu geçersiz kılar.

    /sbin/nologinBunları kullanmak , başka yollarla (fiziksel konsol, samba vb.) Giriş yapmalarını engellemekte yardımcı olabilir.

  4. Bu kurulum, rootSSH üzerinden doğrudan oturum açmaya izin vermiyor ; bu, ekstra bir güvenlik katmanı oluşturur. Eğer gerçekten varsa do direkt root bağlantılarını ihtiyaç değiştirmek PermitRootLoginyönergesi. Olarak ayarlayarak düşünün forced-commands-only, prohibit-passwordve (son çare olarak) yes.

  5. Bonus puanlar için kimlerin suroot olabileceğini kısıtlamaya bakın ; adlı bir sistem grubu eklemek wheelve etkinleştirmek / eklemek auth required pam_wheel.soiçinde /etc/pam.d/su.


2
Bu kabul edilen cevap olmalı. Her adımın arkasındaki mantığı ortadan kaldırmanın yanı sıra çözümü de sunar.
kemotep

1
Bu, büyük ek güvenlik tavsiyesiyle gerçekten çok iyi bir cevaptır, ancak sistemleri şifre girişlerine, kök girişlerine vb. Güvenen kullanıcılar için endişeleniyorum. Elbette bunu yapmak iyi değil, ancak genel güvenlik iyileştirmeleri ile ilgili değişiklikleri kendi bölümünde böylelikle asgari değişikliklerle soruya cevap verilebilir mi?
Josh Rumbut

1
@JoshRumbut (çok doğru) açıklamalarınızın cevabını tekrar yazmak istemedim, çünkü kısmen sadece My Way ™ 'i gösteriyor, kısmen de bir varsayılan standart SSH kurulumunun olabileceği umudunda. Örneğin, birçok insanın yararlı bulduğu bir örnek. Bir uzlaşma olarak, kök girişlerin ve parola kimlik doğrulamasının işe yaramayacağını çok daha net bir hale getirmeye çalıştım ve onları nasıl yeniden etkinleştirebileceğime dair talimatlar dahil ettim :)
marcelm

1
İyi cevap, imo diğer cevapların en büyük eksikliklerinin çoğunlukla chroot olmak üzere güvenlik hususlarını hesaba katmamasıydı. +1
Rui F Ribeiro

1
Chroot,% h genel değeri için çalışmaz. Şaşırtıcı bir şekilde, chown root:rootve gerekmektedirchmod og-w
kubanczyk

1

sadece varsayılan kabuklarını / sbin / nologin olarak değiştir. Çoğu Linux türünü varsayarsak:

# usermod -s /sbin/nologin username

Denedim, ancak kullanıcı sftp ile giriş yapamıyor, nedenini bilmiyorum. Ben centos btw kullanıyorum.
Sollosa

@Sollosa Muhtemelen sftp chroot'unuzdaki bir izin problemi ya da sshd_config problemi var. Sorunuzu chroot dizininizin ve sshd_config'inizin düzeltilen hassas bilgileri içeren izinlerini içerecek şekilde güncellemelisiniz.
Kefka

Sanırım (şimdi test edemem) bunun SFTP'ye yalnızca varsa da izin verdiğine inanıyorum Subsystem sftp internal-sftp) (ya da belki ForceCommand internal-sftp). Ortak varsa Subsystem sftp /path/to/sftp-server, nologinSFTP'yi bile engeller.
Martin Prikryl

@MartinPrikryl Başka bir işlevsel sftp sunucusundaki kullanıcılar için kabuk erişiminin nasıl devre dışı bırakılacağını sordukları orijinal düzenlenmemiş sorularını yanlış anladım. O zaman on dakika kadar uyanıktım, bu yüzden hissettiğim kadar açık kafalı değildim. Sftp sunucusunun bir kullanıcının çalışması için geçerli bir kabuğa sahip olmasını gerektirdiğini bilmeme rağmen - potansiyel olarak tehlikeli görünüyor. Ben sadece alış-alış-veriş dışı iç sftp kullanırım çünkü hep böyle yaptım.
Kefka

OpenSSH'ye cevabımı görün : internal-sftp ve sftp-server arasındaki fark (özellikle sondaki bölüm)
Martin Prikryl

0

TFTP kullanabilirsiniz. ssh üzerindeki herhangi bir şey bir kimlik doğrulaması gerektirecektir (key | pass).

TFTP güvence altına alınabilse de, kimlik doğrulama olmadan herhangi bir şeye erişim sağlama kararını tekrar gözden geçirmeye değer olabilir.

http://manpages.ubuntu.com/manpages/bionic/man1/tftp.1.html


2
OP, kullanıcıların (muhtemelen kullanıcı adlarına ve şifrelerine sahip) sunucuya bağlanmak ve rastgele komutlar yürütmek için normal bir SSH istemcisi kullanmamasını, ancak aynı kullanıcıların SFTP üzerinden dosya yükleyebilmelerini istediğini düşünüyorum.
John_ReinstateMonica
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.