Membatasi pengguna SSH / SCP / SFTP ke direktori

36

Apakah ada cara sederhana untuk membatasi pengguna SCP / SFTP ke direktori? Semua metode yang saya temui mengharuskan saya untuk mengatur chroot jail dengan menyalin binari, tetapi saya pikir itu tidak perlu.

phhehehe
sumber

Jawaban:

29

SSH Mendukung chroot pengguna SFTP secara asli. Anda hanya perlu memasok

Direktori Chroot

Di file konfigurasi sshd Anda, dan restart sshd.

Jika Anda hanya melakukan sftp, maka Anda tidak perlu melakukan apa-apa lagi. Sayangnya, ini tidak berfungsi untuk scp. Untuk shell interaktif, Anda perlu menyalin binari, dan / dev node ke chroot.

Contoh konfigurasi, hanya untuk satu pengguna, testuser:

Match User testuser
    ChrootDirectory /home/testuser
    ForceCommand internal-sftp

Beberapa hal yang perlu diperhatikan, dari halaman manual sshd_config:

    Semua komponen pathname harus direktori milik root yang tidak
    dapat ditulis oleh pengguna atau grup lain. Setelah chroot, sshd (8) mengubah
    direktori kerja ke direktori home pengguna.

Cari ChrootDirectory di man sshd_config untuk informasi lebih lanjut.

gabe
sumber
2
Perhatikan bahwa bagian yang dimulai dengan "Cocokkan Pengguna testuser" harus berada di AKHIR file, karena akan menyertakan baris konfigurasi hanya jika pengguna "testuser" sejak saat itu.
Magnus
1
Apakah mungkin Chroot hanya untuk Protokol SFTP, tetapi masih memungkinkan koneksi SCP normal?
lanoxx
1
Di mesin Ubuntu 14.04 saya, saya juga perlu mengubah Subsystem sftp /usr/lib/openssh/sftp-serverjalur keSubsystem sftp internal-sftp -f AUTH -l VERBOSE
partofthething
@ Magnus atau sampai Matchbagian lain .
roaima
12

Chroot adalah metode yang cukup sederhana. Karena sistem operasi sudah memiliki fitur keamanan ini, penulis daemon cenderung tidak berusaha untuk mengimplementasikannya kembali.

Rssh dilengkapi dengan panduan tentang cara mengatur chroot jail. Ada dalam CHROOTfile di distribusi sumber. Singkatnya, Anda harus memiliki:

  • Beberapa binari, disalin dari akar: /usr/bin/scp, /usr/libexec/openssh/sftp-server,/usr/bin/rssh_chroot_helper
  • Perpustakaan ( {/usr,}/lib/lib*.so.[0-9]) yang mereka gunakan, juga disalin
  • A /etc/passwd(sangat mungkin bukan salinan tetapi berasal dari master)
  • Beberapa perangkat: /dev/null,, /dev/ttydan juga /dev/logsoket untuk logging (dan Anda perlu memberi tahu daemon syslog Anda untuk mendengarkannya)

Kiat tambahan yang tidak ada dalam dokumentasi rssh: Jika Anda memerlukan beberapa file agar dapat diakses di chroot jail, Anda dapat menggunakan bindf atau Linux mount --binduntuk membuat hierarki direktori tambahan dari luar jail. bindfsmemungkinkan direktori remounted memiliki izin yang lebih ketat, misalnya hanya baca. ( mount --bindtidak kecuali Anda menerapkan patch kernel; Debian telah menyertakan patch ini sejak di east lenny tetapi sebagian besar distribusi lainnya belum pada 2011.)

Gilles 'SANGAT berhenti menjadi jahat'
sumber
7

Anda mungkin ingin melihat scponly (atau lebih baru-baru ini, rssh ); pada dasarnya shell login yang hanya dapat digunakan untuk meluncurkan subsistem scp atau sftpd. Dalam scponlycvarian itu melakukan chroot sebelum mengaktifkan subsistem yang dimaksud.

Shadur
sumber
sepertinya sudah usang, setidaknya di Ubuntu
tobixen