Dimungkinkan untuk mengaktifkan SSH dan menonaktifkan SFTP baik secara global maupun per pengguna / grup.
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.
Secara global
Anda dapat menonaktifkan SFTP untuk semua pengguna dalam beberapa cara.
Subsistem yang hilang
Daemon SFTP yang digunakan oleh SSH dapat dikonfigurasi melalui Subsystem
kata kunci. Dari sshd_config(5)
manual:
Subsystem
Configures an external subsystem (e.g. file transfer daemon).
Arguments should be a subsystem name and a command (with optional
arguments) to execute upon subsystem request.
The command sftp-server(8) implements the “sftp” file transfer
subsystem.
Alternately the name “internal-sftp” implements an in-process
“sftp” server. This may simplify configurations using
ChrootDirectory to force a different filesystem root on clients.
By default no subsystems are defined.
Baris terakhir menyarankan bahwa itu harus cukup untuk tidak mendefinisikan subsistem untuk "sftp".
Kebohongan palsu
Anda juga dapat menonaktifkan SFTP dengan mengatur daemon SFTP yang digunakan oleh SSH ke sesuatu yang tidak dapat digunakan. Misalnya, konfigurasikan subsistem "sftp" ke /bin/false
:
Subsystem sftp /bin/false
Ketika sesuatu mencoba masuk melalui SFTP, daemon SSH akan mencoba menelurkan "sftp daemon" /bin/false
. The /bin/false
Program tidak hanya satu hal, dan itu adalah untuk mengembalikan kode kesalahan. Upaya koneksi SFTP ditolak secara efektif.
Per pengguna / grup
Dimungkinkan juga untuk menonaktifkan SFTP per pengguna, grup, atau beberapa kriteria lainnya.
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.
Sesuai
Untuk mencocokkan sekelompok pengguna, Anda dapat mengonfigurasi SSH dengan Match
kata 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 di 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 dipaksa untuk koneksi SSH, termasuk SFTP, dan dengan demikian Anda mungkin memiliki opsi untuk memaksa perintah yang Anda inginkan.
Perintah untuk memaksa dapat dikonfigurasi dengan ForceCommand
kata 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