SFTP'ye izin ver ancak SSH'ye izin verme mi?


94

Birkaç arkadaş ve küçük müşteriler için çok küçük bir hosting şirketi kuruyorum, büyük bir şey değil.

"Müşterilerime" sunucudaki dosyalarını yönetme hakkı vermek istiyorum. FTP'nin güvenli olmadığı ve bence eski olduğu için nefret ediyorum.

Bu nedenle, kullanıcılarımın SFTP üzerinden bağlanmasına izin vermek, ancak SSH üzerinden bağlantı kurmalarına izin vermek istemiyorum. (Biliyorum, biliyorum, SFTP SSH kullanıyor). Ama merak ettim, mümkün mü?

Bu yüzden sunucuya bir FTP servisi kurmak zorunda kalmazdım ve her şey mükemmel olurdu!

Yanıtlar:


121

4.9 sürümünden başlayarak OpenSSH (centos 5.x'de mevcut değildir, ancak ChrootDirectory özelliği desteklenir) bir internal-sftpalt sisteme sahiptir:

Subsystem sftp internal-sftp

Ve sonra diğer kullanımları engelle:

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

Kullanıcılarınızı sftponlygruba ekleyin . Kullanıcının ana dizinini /chroot nedeniyle olarak değiştirmelisiniz ve /home/usersahip olmalısınız root. Ben de /bin/falsekullanıcının kabuğu olarak koyardım.


Vaov! Süper harika! Bunu test edeceğim ve tekrar onaylamak için buraya geleceğim. Çok teşekkürler!
Tommy B.

ChrootDirectory olayı için +1!
Kyle Hodgson

1
Bunu yaptıktan sonra sftponly kullanıcım ssh ile erişemiyor ve sftp ile bağlanabiliyor. Ancak hiçbir dosyayı göremiyor! Buna rağmen, bu dosyalar bu kullanıcı için izne sahiptir. :-(
Emilio Nicolás

3
Bunu yapmak ve sshd_config'inizde "/ usr / lib / openssh / sftp-server" isimli bir giriş bulmak istiyorsanız, burayı kontrol edin: serverfault.com/questions/660160/… - internal-sftp "daha yeni , daha iyi ve daha kolay "
Xosofox

19

Bu ne yaptığını scponly bir kabuk var . O da chroot olabilir .


Hem SFTP kullanıcılarına hem de SSH kullanıcılarına ihtiyacınız varsa, bu çok iyi olurdu. Yalnızca / etc / passwd içindeki kabuğu yalnızca SFTP ile sınırlı olanlar için değiştirin.
Dragos

4

Sftp sağlayan ancak ssh'yi reddeden sahte bir kabuk olan rssh çıkışı

RSSH hakkında daha fazla

http://www.pizzashack.org/rssh/

RPM

http://pkgs.repoforge.org/rssh/

Rssh'yi sft, scp vb. Gibi farklı davranışlara izin vermek / reddetmek için yapılandırabilirsiniz.


Güzel. Bu, sshd_config komutuna dokunmadan yapılandırmanın en kolay yoludur. Sadece passwd dosyasındaki kabuğu değiştirin ve bitti.
Tomofumi,

2

/ Etc / passwd dosyasını değiştirebilir ve o kullanıcıya ssh kullanmaması için sahte bir kabuk verebilirsiniz.


11
Bunu test ettin mi?
splattne,

8
Ben kabuk ayarı yapmaya çalışırken /bin/falsene ssh veya sftp eserleri
Brad Mace

2
/ bin / false herhangi bir giriş türüne izin vermemektir, bu doğru yaklaşım değildir. Rob Wouters'ın kabul ettiği cevap, kabuğu değiştirerek kullanıcıları yalnızca SFTP ile sınırlandırmanız gerektiğidir. Eğer kabuğu değiştirmek istese @ Stone'un cevabı iyi bir fikir olurdu.
jwbensley

1
öyleyse / kabuk / bin / bash'ın kabul edilebilir olmadığı ve / bin / yanlış veya / sbin / nologin inkar edildiğini varsayarak NE kabuğu kullanılmalıdır?
Putnik

1

Kullanıcı kabuğunu / bin / false olarak belirtme yöntemini belirtildiği gibi kullanıyorum. Ancak, / bin / shell'in / etc / shells içinde olduğundan emin olmalısınız. Sonra ssh = no ftp = tamam çalışır.

Ayrıca, vsftpd kullanıyorum ve bu
chroot_local_user = YES'i /etc/vsftpd/vsftpd.conf dosyasına ekliyorum, böylece ftp ers kendi tarihlerini göremiyor.

Bu basit değişikliklerin avantajı, her kullanıcı için ssh config için can sıkıcı bir yapılandırma değildir.


1

Çizgiyi bulmayı UsePAM yesve yorum yapmayı unutmayın:

#UsePAM yes

Bunu devre dışı bırakmadan, SSH sunucunuz yeniden yüklerken / yeniden başlatırken çökebilir. PAM'ın fantezi işlevlerine ihtiyacınız olmadığından, bu iyi.


0

Seçili bazı kullanıcılar için sadece sftp'yi etkinleştirmek için ssh'yi yapılandırmak iyi bir fikirdir ya scponlyda kurmanız şartıyla düzgün çalışır rssh.

rsshHapishaneyi yapılandırmanız gerekmediği sürece, iyi çalışıyorsa, bu durumda CHROOT kılavuzları tarafından verilen talimatlara uymaya çalışın, rsshkabuğun kendisi de dahil olmak üzere "her kullanıcı hapishanesinin" hemen altındaki sistem çalıştırılabilir parçalarının ve kütüphanesinin "kopyalanmasına" yol açar . Yer israfı yöntemidir.

scponly Yapılandırmada, hapishane kurulumunda sürekli olarak oturum açmayı reddetme sorununa yol açan derin bir anlayışa ihtiyaç duyar.

Hapishanenin düzgün çalışması için "ftp" işlevselliklerine izin vermenin kolay yolu, SSL / TLS, güvenli işlemler ve oturum açma desteği sağlar; hızlı ve temiz bir şekilde kurulum yapan ve ihtiyaca göre en son yapılandırılabilirliği sunan "eski ama çalışmayan" bir VSFTPD kullanmaktır. ama en az değil: işe yarıyor!

Maurizio.


0

Tüm cevaplar maalesef son derece yanıltıcı: Lütfen aşağıdakileri yapın:

  1. Önce sftp kullanıcısı ve grup sftp oluştur

  2. SFTP dosyaları için ayrı bir dizin oluşturun: sudo mkdir -p /home/sftpdir

  3. Güvenlik nedeniyle, 22 numaralı bağlantı noktasından SSH'ye ve aynı zamanda rastgele bağlantı noktasında SFTP'ye izin veren test edilmiş bir sshd_config dosyasına sahip olun.
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. Yeniden başlatın ve sshd servisinin durumunu kontrol edin

    sudo hizmet sshd yeniden başlat

    hizmet sshd durumu

  2. Bir Shell dosyası oluşturun. Bir bildirim iletisini yankılamak için yürütme ekleyin

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "Bu hesap yalnızca SFTP erişimi ile sınırlıdır."' | sudo tee -a / bin / sftponly

  3. Uygulama izinleri verin ve mermi dosyasına ekleyin

    sudo chmod a + x / bin / sftponly eko "/ bin / sftponly" | sudo tee -a / etc / kabukları

  4. Sonunda Test ve bağlanamamanız gerekir.

  5. SFTP istemcisini SSH anahtarıyla ve temel ayrıntılarla kullanmak için kullanılan bir şablon:

    sftp -v - oPort = $ RANDOM_PORT -i ~ / .ssh / $ SSH_KEY.pem sftpuser @ $ HOST

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.