Izin menulis pengguna SFTP chroot

10

Saya memiliki pengaturan dengan pengguna sftp saja:

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Saya mendapatkan pesan berikut di secure.log saya:

fatal: bad ownership or modes for chroot directory

Dengan kata kunci yang cocok ada beberapa hal keamanan dengannya ... direktori harus dimiliki oleh root, dan direktori harus chmod 755 (drwxr-xr-x). Jadi tidak memungkinkan bagi pengguna untuk memiliki izin menulis ke folder, jika hanya dapat ditulis ke root pengguna dan diatur ke non-dapat ditulis untuk grup karena keamanan ssh.

Ada yang tahu tentang pekerjaan yang baik di sekitar?

Adionditsak
sumber
Apakah chrootpengguna ed memiliki ChrootDirectory? Bisakah mereka mengaksesnya?
John WH Smith

Jawaban:

2

Saya memiliki pengaturan yang sama di server kami. Kami menggunakan konfigurasi SSHD yang sama. Direktori rumah pengguna dimiliki oleh root dan di dalamnya ada folder documentsdan public_htmldimiliki oleh masing-masing pengguna. Pengguna kemudian login menggunakan SFTP dan menulis ke folder tersebut (tidak langsung ke rumah). Karena SSH tidak diizinkan untuk mereka, SSH berfungsi dengan baik. Anda dapat menyesuaikan direktori mana yang akan dibuat untuk pengguna baru di / etc / skel / (setidaknya di openSUSE, saya tidak begitu terbiasa dengan distro lain).

Kemungkinan lain adalah ACL ( dokumentasi openSUSE ) - ini dapat menambahkan izin menulis untuk masing-masing pengguna untuk direktori rumahnya.

Tilia
sumber
1
Bagi saya, di Debian Jessie (8.10), pengaturan ACL di rumah pengguna tidak berfungsi. Ketika pengguna mencoba masuk dengan SFTP, mereka mendapatkanpacket_write_wait: Connection to 10.0.0.42 port 22: Broken pipe
Drew Chapin
7

Kami telah menemukan solusi baru-baru ini yang seperti ini:

/ etc / ssh / sshd_config:

...

Subsystem sftp internal-sftp

Match Group sftponly
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

izin direktori:

root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*

Sekarang /homememenuhi persyaratan untuk ChrootDirectorydan tidak dapat didaftar oleh pengguna terbatas, tetapi sftponlypengguna tidak akan dapat login jika direktori home mereka diatur seperti biasa ( /home/$LOGNAME): di bawah lingkungan chroot direktori home mereka tidak di dalam /hometetapi langsung di bawah root ( /).

solusi 1

Tetapkan rumah pengguna yang dibatasi untuk tampilan di bawah chroot:

root@server:~ # usermod -d /username username

peringatan 1

Jika ada pengguna yang tidak dibatasi atau skrip administrasi menggunakan ekspansi tashe bash seperti ~usernameitu akan meluas hingga /usernamesekarang, yang bukan itu yang dimaksud.

Admin yang membuat sftponlypengguna harus ingat untuk menggunakan home non-default. Dipecahkan dengan skrip. Yang harus diingat oleh admin untuk digunakan.

solusi 2

Ini adalah alternatif dari yang sebelumnya yang akhirnya kami gunakan:

root@server:~ # ln -s . /home/home

Itu adalah membuat symlink di dalam /homeuntuk dirname sendiri. Sekarang di bawah chroot /home/usernamemenunjuk ke direktori yang sama dengan tanpa chroot. Untuk pengguna terbatas yang masuk dengan sftp akan muncul sebagai /username. Direktori ini dapat ditulisi oleh pemiliknya (pengguna terbatas). Pengguna yang dibatasi tidak dapat mencantumkan direktori induk atau direktori home dari salah satu dari saudara kandung tersebut berdasarkan nama.

Satu-satunya hal khusus tentang sftponlypengguna adalah keikutsertaannya dalam sftponlygrup. Kami merasa lebih mudah ditangani daripada solusi 1.

peringatan 2

  1. Anda tidak dapat memiliki pengguna bernama 'rumah' dengan direktori rumah /home/home
  2. Anda harus berhati-hati dengan skrip yang melintasi /homehierarki dan mengikuti symlink.
artm
sumber
Hai artm atau pembaca lain, saya tahu ini adalah posting lama tapi bisakah Anda membantu saya memahami solusi 2, tolong? Saya memiliki pengguna (ftpuser) yang perlu dipenjara ke direktori home mereka (/ home / ftpuser /), ini dapat saya capai tetapi / home / ftpuser harus memiliki 755 tentunya. Saya perlu ftpuser untuk dapat membuat file dan folder di direktori home mereka. symlink apa yang harus saya buat, dan nilai apa yang harus dimiliki oleh ChrootDirectory saya?
Blatant
4

Anda perlu membuat struktur di dalam direktori home pengguna, seperti direktori masuk dan keluar. Dir itu harus dimiliki oleh pengguna dan di sana ia akan dapat menempatkan dan mendapatkan file.

YoMismo
sumber
0

Anda harus membuat struktur direktori berikut:

/ home / pengguna

/ home / user / home / user <- dir nyata yang akan diakses oleh pengguna

Opsional:

/home/user/.ssh/authorized_keys <- jika Anda ingin mengautentikasi dengan kunci publik

Fernando Ulisses dos Santos
sumber
0

Mengacu pada bagian 'izin direktori' dalam jawaban dari @artm (yang baru saja saya uji) .. Saya menemukan:

root@server:~ # chmod 111 /home <- Does not work

Itu tidak memungkinkan koneksi sftp bekerja di ubuntu dengan hanya menjalankan izin pada segalanya yaitu 111.

Saya menemukan bahwa:

root@server:~ # chmod 555 /home

Bekerja dengan koneksi ke sftp dengan izin Read and Execute yaitu 555. Tidak yakin apakah debian vs rasa lain berbeda, tapi itulah yang berfungsi pada ubuntu saya menginstal.

kemauan
sumber
0

Saat Anda membuat pengguna, Anda harus mengatur kepemilikan menggunakan chownuntuk setiap dir untuk setiap pengguna.

Sebagai contoh:

sudo chown usertest:groupsftp /home/rootsftp/usertest
Miguel Dueñas
sumber