Bagaimana cara menonaktifkan sftp untuk beberapa pengguna, tetapi tetap ssh diaktifkan?

12

Proyek saya membutuhkan saya untuk menonaktifkan sftp untuk beberapa pengguna, tetapi para pengguna itu masih perlu terhubung melalui ssh. Adakah yang tahu cara mengimplementasikan ini?

Saya telah melihat saran untuk mengubah file di /etc/ssh/sshd_config, tetapi saya tidak yakin apa yang harus diubah.

Shaobo Wang
sumber
Satu-satunya cara saya bisa membayangkan melakukan ini adalah dengan menggunakan kebijakan MLS di SELinux dan membatasi dengan tepat file, direktori, dan soket yang dapat diakses, dieksekusi, dll. Saya akan melakukan ini dalam kombinasi dengan kebijakan iptables yang sangat ketat yang menggunakan modul owneruntuk akses keluar. Ini mengasumsikan Anda akan diuji oleh tim merah. Jika semua orang yang mengakses sistem Anda selalu mematuhi aturan dan tidak pernah memiliki niat buruk, maka pendekatan saya akan sangat sulit dan rumit.
Aaron

Jawaban:

7

Secara umum melakukan ini adalah praktik keamanan yang buruk karena alasan yang orang lain telah terdaftar. Namun, poin dari tugas Anda, saya pikir, adalah untuk mengajarkan Anda bahwa Anda dapat memiliki bagian konfigurasi bersyarat berdasarkan berbagai kriteria.

Cara untuk melakukan ini adalah menggunakan Matchblok bersyarat *.

Match User bob
Subsystem   sftp  /bin/false

Lihat di sshd_config(5)bawah Matchbagian untuk informasi lebih lanjut, dan cocok di Group.

* Ada lebih dari satu cara untuk melakukannya.

bahamat
sumber
7
Itu tidak bekerja untuk saya. Kesalahan: Arahan 'Subsistem' tidak diperbolehkan dalam blok Match
chrw
Jawaban salah karena Subsistem tidak diperbolehkan di Blok pencocokan
mikep
6

Ini tidak masuk akal, ini adalah keamanan melalui ketidakjelasan yang tidak berguna. Setiap pengguna yang dapat SSH akan dapat mentransfer file apa pun yang dapat mereka baca melalui sesi SSH. Anda juga dapat menulis, jika Anda memiliki izin untuk melakukannya.

Sebagai contoh, Anda dapat mengunduh / etc / passwd via ssh menggunakan metode berikut (tidak diperlukan sesi scp / sftp): ssh [email protected] "cat / etc / passwd"> passwdcopy

Jika Anda dapat melihatnya di layar Anda melalui SSH, maka Anda dapat dengan mudah menyalinnya sebagai file.

Satu-satunya cara ini masuk akal adalah jika Anda memiliki shell terbatas khusus yang memberlakukan kebijakan keamanan.

Namun, kebalikan dari ini memang masuk akal (menonaktifkan ssh shell tetapi membiarkan leeaving scp / sftp diaktifkan) karena Anda tidak dapat menjalankan perintah sewenang-wenang melalui sftp / scp yang Anda dapat melalui ssh shell.

PS: Saya mengasumsikan shell SSH yang Anda berikan adalah shell standar yang memungkinkan eksekusi sewenang-wenang. Jika ini bukan masalahnya, lihat ini: Cara menonaktifkan subsistem sftp untuk pengguna atau grup tertentu? dan lihat opsi konfigurasi Subsystem dari sshd_config.

Nathan
sumber
4
Match Group nosft
Subsystem   sftp  /bin/false

Saya lebih suka menggunakan grup untuk ini.

Berguna dalam kombinasi dengan pengguna yang memiliki shell terbatas. Saya kadang-kadang memberikan akses ssh ke klien sehingga mereka dapat mengakses sql-dump database mereka dengan mengatur shell mereka ke skrip yang membuang data mereka. Memotong mereka dari scp juga tampaknya merupakan ide yang cerdas. Mereka tidak memiliki akses untuk menjalankan catuntuk mentransfer file melalui ssh.

singlow
sumber
3
Directive 'Subsystem' is not allowed within a Match block
Patryk
Jawaban salah karena Subsistem tidak diperbolehkan di Blok pencocokan
mikep
4

Dimungkinkan untuk mengaktifkan SFTP secara global, dan menonaktifkan SFTP hanya untuk beberapa pengguna.

Ini tidak berfungsi jika Anda ingin pengguna Anda mendapatkan prompt shell biasa. Juga tidak masuk akal, karena Anda bisa mengelak dari banyak hal jika Anda memiliki akses shell. Ini hanya akan berfungsi jika Anda hanya ingin memberikan akses ke program tertentu.

Saya pribadi memerlukan ini karena saya ingin memberikan akses ke beberapa repositori git melalui SSH, dan saya suka menonaktifkan sistem yang tidak diperlukan. Dalam hal ini SFTP tidak diperlukan.

Sesuai

Untuk mencocokkan sekelompok pengguna, Anda dapat mengonfigurasi SSH dengan Matchkata kunci. Dari sshd_config(5)manual:

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).

        ...

Beberapa contoh:

  • Match User eva cocok dengan pengguna "eva"
  • Match User stephen,maria cocok dengan pengguna "stephen" dan "maria"
  • Match Group wheel,adams,simpsons cocok dengan grup "roda", "adams", "simpsons"

Jika Anda ingin informasi lebih lanjut, ada banyak sshd_config(5)manual.

Perintah paksa

Biasanya Anda mendapatkan shell login pengguna ketika Anda terhubung melalui SSH, tetapi SSH dapat dikonfigurasi untuk memaksa perintah tertentu. Perintah ini dipaksakan untuk koneksi SSH, termasuk SFTP, dan dengan demikian Anda mungkin memiliki opsi untuk memaksa perintah yang Anda inginkan.

Perintah untuk memaksa dapat dikonfigurasi dengan ForceCommandkata kunci. Dari sshd_config(5)manual:

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”.

Jadi Anda bisa memaksa perintah terbatas yang ingin Anda gunakan ForceCommand <your command>. Sebagai contoh:

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

Contoh

Dalam kasus saya di mana saya ingin memberikan akses git, saya hanya perlu pengguna untuk memiliki akses git-shell. Ini adalah bagian yang menonaktifkan SFTP untuk pengguna git saya, bersama dengan beberapa opsi keamanan:

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
aude
sumber
1
Ini tidak menjawab pertanyaan OP, tapi itu sangat membantu bagi saya untuk mencapai apa yang saya ingin capai dalam penggunaan-kasus saya sendiri
Kidburla
Saya tidak setuju. Pertanyaan OP adalah "Bagaimana cara menonaktifkan sftp untuk beberapa pengguna, tetapi tetap mengaktifkan ssh?", Dan jawaban ini menjelaskan salah satu cara untuk melakukannya. Senang Anda menemukannya bermanfaat!
aude
Menurut pengakuan Anda sendiri, "tidak berfungsi jika Anda ingin pengguna Anda mendapatkan prompt shell biasa". jadi ini tidak memenuhi persyaratan OP tentang "tetap ssh diaktifkan"
Kidburla
Itu poin yang bagus. Saya kira saya setuju dengan solusi ini karena "Tidak juga masuk akal, karena Anda dapat menghindari sebagian besar barang jika Anda memiliki akses shell.". Tapi saya tidak menemukan cara untuk persis apa yang diminta OP, saya setuju sekarang.
Aude
Inilah versi yang lebih lengkap dari jawaban ini: serverfault.com/a/817482
aude
1
Match User bob
MaxSessions 0

Diuji dan bekerja pada CentOS 6.6. Perhatikan bahwa Subsistem tidak diperbolehkan dengan Cocokkan setidaknya pada versi CentOS yang lebih baru. Halaman manual untuk sshd_config mencantumkan kata kunci terbatas yang diizinkan dengan kondisi Match.

Jeff
sumber
0

Anda dapat melihat scponly untuk melakukan yang sebaliknya, izinkan hanya scp / sftp tetapi tidak ada akses shell.

Saya setuju dengan @Nathan di atas, ini tidak masuk akal. Jika Anda mati, coba edit file / etc / ssh / sshd_config Anda dan hapus / beri komentar pada baris berikut:

Subsistem sftp / usr / libexec / openssh / sftp-server

dmourati
sumber
0

tidak memberikan direktori home untuk pengguna

usermod username -d /bin/false

Ubah Subsystem sftp / usr / libexec / openssh / sftp-server dalam file / etc / ssh / sshd_config menjadi Subsystem sftp / dev / null / usr / libexec / openssh / sftp-server

Kemudian restart ssh

service ssh restart

ini bekerja untuk saya, debian.

Yusufmm
sumber
-2

Dalam ~/authorized_keymengkonfigurasi kunci pengguna sebagai berikut:

command="/bin/bash" ssh-rsa AAAAB3Nz.........
Kazek
sumber