Bazı kullanıcılar için sftp nasıl devre dışı bırakılır, ancak ssh etkin kalır?


12

Projem bazı kullanıcılar için sftp'yi devre dışı bırakmamı istiyor, ancak bu kullanıcıların yine de ssh üzerinden bağlanmaları gerekiyor. Bunu nasıl uygulayacağını bilen var mı?

Dosyayı değiştirmek için öneriler gördüm /etc/ssh/sshd_config, ancak ne değiştireceğimi bilmiyorum.


Bunu yapmayı hayal edebilmemin tek yolu, SELinux'da bir MLS politikası kullanmak ve bir kişinin hangi dosyalara, dizinlere ve soketlere erişebileceğini, yürütebileceğini vb. ownergiden erişim modülü . Bu, kırmızı takım tarafından kalem testi yapılacağını varsayar. Sisteminize erişen herkes her zaman kurallara uyuyor ve asla kötü niyetli olmuyorsa, yaklaşımım ağır ve aşırı karmaşık olurdu.
Aaron

Yanıtlar:


7

Genel olarak bunu yapmak, başkalarının listelediği nedenlerden dolayı kötü güvenlik uygulamasıdır. Ancak, görevinizin amacı, çeşitli kriterlere göre koşullu yapılandırma bölümlerine sahip olabileceğinizi size öğretmektir.

Bunu yapmanın yolu bir Matchkoşullu blok kullanmaktır *.

Match User bob
Subsystem   sftp  /bin/false

Daha fazla bilgi ve eşleme sshd_config(5)için Matchbölümün altına bakın Group.

* Bunu yapmanın birden fazla yolu var.


7
Benim için çalışmıyor. Hata: Maç bloğunda 'Alt Sistem' yönergesine izin verilmiyor
chrw

Yanlış cevap, çünkü Maç bloğunda alt
sisteme

6

Bu bir anlam ifade etmiyor, yararsız bir anlaşmazlık yoluyla güvenlik. SSH yapabilen herhangi bir kullanıcı, SSH oturumu aracılığıyla okuyabilecekleri herhangi bir dosyayı aktarabilir. Ayrıca, izinleriniz varsa, yazabilirsiniz.

Örneğin, aşağıdaki yöntemi kullanarak / etc / passwd dosyasını ssh üzerinden indirebilirsiniz (scp / sftp oturumu gerekmez): ssh foo@bar.com "cat / etc / passwd"> passwdcopy

SSH aracılığıyla ekranınızda görebiliyorsanız, kolayca bir dosya olarak kopyalayabilirsiniz.

Bunun mantıklı olmasının tek yolu, bir güvenlik politikasını uygulayan özel bir kısıtlanmış kabuğunuz varsa.

Bununla birlikte, bunun tersi anlamlıdır (ssh kabuğunu devre dışı bırakmak, ancak scp / sftp'yi etkin kılmak), sshp / scp aracılığıyla rasgele komutları çalıştıramazsınız.

Not: Verdiğiniz SSH kabuğunun rastgele çalıştırmaya izin veren standart bir kabuk olduğunu varsayıyorum. Durum böyle değilse, bkz: Belirli bir kullanıcı veya grup için sftp alt sistemi nasıl devre dışı bırakılır? ve sshd_config'in Subsystem yapılandırma seçeneğine bakın.


4
Match Group nosft
Subsystem   sftp  /bin/false

Bunun için bir grup kullanmayı tercih ederim.

Kısıtlı kabukları olan kullanıcılarla birlikte kullanışlıdır. Bazen bir istemci ssh erişim vermek, böylece kendi veritabanı dökümlerini bir komut dosyasına kabuklarını ayarlayarak kendi veritabanı sql-dökümü erişebilirsiniz. Bunları scp'den kesmek de akıllı bir fikir gibi görünüyor. catBir dosyayı ssh üzerinden aktarmak için çalışan erişimleri yoktur .


3
Directive 'Subsystem' is not allowed within a Match block
Patryk

Yanlış cevap, çünkü maç bloğunda alt
sisteme

4

SFTP'yi global olarak etkinleştirmek ve SFTP'yi yalnızca bazı kullanıcılar için devre dışı bırakmak mümkündür.

Kullanıcınızın düzenli bir kabuk istemi almasını istiyorsanız bu çalışmaz. Kabuk erişiminiz varsa çoğu şeyi atlatabileceğiniz için de mantıklı değil. Yalnızca belirli bir programa erişim vermek istiyorsanız çalışır.

Şahsen buna ihtiyacım var çünkü SSH üzerinden bazı git depolarına erişim vermek istiyorum ve gerekli olmayan sistemleri devre dışı bırakmak istiyorum. Bu durumda SFTP'ye gerek yoktur.

Eşleştirme

Bir grup kullanıcıyı eşleştirmek için SSH'yi Matchanahtar kelimeyle yapılandırabilirsiniz . Gönderen sshd_config(5)manuel:

Match
        ...

        The arguments to Match are one or more criteria-pattern pairs or the
        single token All which matches all criteria.  The available criteria
        are User, Group, Host, LocalAddress, LocalPort, and Address.  The
        match patterns may consist of single entries or comma-separated
        lists and may use the wildcard and negation operators described in
        the PATTERNS section of ssh_config(5).

        ...

Birkaç örnek:

  • Match User eva "eva" kullanıcısıyla eşleşir
  • Match User stephen,maria "stephen" ve "maria" kullanıcılarıyla eşleşir
  • Match Group wheel,adams,simpsons "wheel", "adams", "simpsons" gruplarıyla eşleşir

Daha fazla bilgi istiyorsanız, sshd_config(5)kılavuzda yükler vardır .

Zorla komut

Normalde, SSH aracılığıyla bağlandığınızda kullanıcının oturum açma kabuğunu alırsınız, ancak SSH belirli bir komutu zorlayacak şekilde yapılandırılabilir. Komut, SFTP dahil olmak üzere herhangi bir SSH bağlantısı için zorlanır ve bu nedenle istediğiniz komutu zorlama seçeneğiniz olabilir.

Zorlama komutu ForceCommandanahtar sözcükle yapılandırılabilir . Gönderen sshd_config(5)manuel:

ForceCommand
        Forces the execution of the command specified by ForceCommand,
        ignoring any command supplied by the client and ~/.ssh/rc if
        present.  The command is invoked by using the user's login shell
        with the -c option.  This applies to shell, command, or subsystem
        execution.  It is most useful inside a Match block.  The command
        originally supplied by the client is available in the
        SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of
        “internal-sftp” will force the use of an in-process sftp server that
        requires no support files when used with ChrootDirectory.  The
        default is “none”.

Böylece kullanmak istediğiniz kısıtlanmış komutu zorlayabilirsiniz ForceCommand <your command>. Örneğin:

Match User kim
        ForceCommand echo 'successful login man, congrats'

Misal

Git erişim izni vermek istediğim durumda, sadece kullanıcının erişimine ihtiyacım var git-shell. Bu, git kullanıcılarım için SFTP'yi ve bazı güvenlik seçeneklerini devre dışı bırakan bölümdür:

Match Group git

        # have to do this instead of setting the login shell to `git-shell`,
        # to disable SFTP
        ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"

        # disable stuff we don't need
        AllowAgentForwarding no
        AllowTcpForwarding no
        AllowStreamLocalForwarding no
        PermitOpen none
        PermitTunnel no
        PermitTTY no
        X11Forwarding no

1
Bu OP'ın soruya cevap vermez, ama o oldu bana ben kendi kullanım-durumunda elde etmek istediğinizi elde etmek için çok yararlı
Kidburla

Kabul etmiyorum. OP'nin sorusu "Bazı kullanıcılar için sftp nasıl devre dışı bırakılır, ancak ssh'ı etkin halde tutmak nasıl olur?" Sorusudur ve bu cevap bunu yapmanın bir yolunu açıklar. Yine de yararlı buldum sevindim!
aude

Kendi girişinizle "kullanıcınızın düzenli bir kabuk istemi almasını istiyorsanız çalışmaz". bu OP'nin "
ssh'yi

İyi bir noktaya değindin. Sanırım bu çözümle "Kabuk erişiminiz varsa çoğu şeyi atlayabileceğiniz için de mantıklı değil" nedeniyle anlaştım. Ama OP'nin tam olarak sorduğu bir yol bulamadım, şimdi katılıyorum.
aude

İşte bu cevabın daha kapsamlı bir versiyonu: serverfault.com/a/817482
aude

1
Match User bob
MaxSessions 0

CentOS 6.6 üzerinde test edilmiş ve çalışılmıştır. En azından daha yeni CentOS sürümlerinde Eşleme ile Alt Sisteme izin verilmediğini unutmayın. Sshd_config için manpage, Eşleme koşuluyla izin verilen sınırlı anahtar kelimeleri listeler.


0

Tersini yapmak için scponly'ye bakabilir, sadece scp / sftp'ye izin verebilir, ancak kabuk erişimine izin veremezsiniz.

Yukarıdaki @Nathan ile aynı fikirdeyim, bu pek mantıklı değil. Ölü kümeniz varsa, / etc / ssh / sshd_config dosyanızı düzenlemeyi ve aşağıdaki satırı kaldırmayı / yorumlamayı deneyin:

Alt sistem sftp / usr / libexec / openssh / sftp-server


0

kullanıcı için giriş dizini vermeyin

usermod username -d /bin/false

/ Etc / ssh / sshd_config dosyasında Subsystem sftp / usr / libexec / openssh / sftp-server'ı Subsystem sftp / dev / null / usr / libexec / openssh / sftp-server olarak değiştirin

Sonra ssh'yi yeniden başlatın

service ssh restart

benim için çalışıyor, debian.


-2

Gelen ~/authorized_keyyapılandırmak aşağıdaki gibi kullanıcı anahtarı:

command="/bin/bash" ssh-rsa AAAAB3Nz.........
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.