Bagaimana cara mengatur server SFTP terbatas di Ubuntu?

81

Saya ingin tahu cara mengatur akun pengguna root, sudo, sftp-only yang tidak akan diperlukan otentikasi kunci publik saat login. Saya juga ingin tahu cara mengatur direktori home pengguna sftp-only di mana mereka tidak dapat mengakses direktori lain tingkat atas.

Yuya Kobayashi
sumber

Jawaban:

91

Sumber daya terbaik untuk membantu Anda mulai mengatur layanan ssh pada mesin Host menggunakan Ubuntu adalah OpenSSH Server . Ini akan memungkinkan Anda untuk menggunakan Protokol Transfer File SSH (juga Protokol Transfer File Aman, atau SFTP) untuk mengakses, mentransfer, dan mengelola file melalui SSH dari mesin Klien.

Ikhtisar Solusi

  • Di Ubuntu Anda dapat mengatur sebuah OpenSSH serverpada mesin Host dan kemudian pengguna dapat menggunakan sshuntuk terhubung dari server Client ke Host hanya menggunakan nama pengguna dan kata sandi. Perhatikan, bagaimanapun, bahwa otentikasi kunci publik direkomendasikan,

"Pastikan Anda memiliki kata sandi yang kuat sebelum menginstal server SSH (Anda mungkin ingin menonaktifkan kata sandi sama sekali )"

  • Akun Pengguna Administratif yang dibuat di Host akan memiliki hak sudo, Akun Pengguna Standar yang dibuat di Host tidak akan.

Instal dan konfigurasikan Server OpenSSH Anda pada Host

Untuk menginstal server OpenSSH di Host:

sudo apt-get install openssh-server

Berikan Host Anda alamat IP Statis sehingga Anda dapat terhubung dengan andal ke sana:

nm-connection-editor

Untuk mengkonfigurasi server OpenSSH Anda , "pertama, buat cadangan file sshd_config Anda dengan menyalinnya ke direktori home Anda, atau dengan membuat salinan read-only di / etc / ssh dengan melakukan:"

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

"Setelah Anda membuat cadangan sshd_configfile Anda, Anda dapat membuat perubahan dengan editor teks apa pun, misalnya:"

sudo -H gedit /etc/ssh/sshd_config

Anda harus memulai kembali layanan ssh di Host agar perubahan ini diterapkan

sudo service ssh restart

Pertimbangkan Tindakan Keamanan Berikut

  • Jangan aktifkan penerusan port pada router Anda: Ketika orang luar meminta router Anda untuk menghubungkan orang luar ke Port 22, dll., Router Anda gagal untuk memenuhi kecuali Anda telah mengaktifkan port-forwarding
  • Nonaktifkan login root: Komentar keluar PermitRootLogin without-password; tambahkan PermitRootLogin noke Host/etc/ssh/sshd_config
  • Pilih port SSH non-standar: Komentar keluar Port 22; tambahkan Port <new-port-number>ke Host/etc/ssh/sshd_config
  • Hanya izinkan koneksi lokal: Tambahkan ListenAddress 192.168.0.10
  • Izinkan pengguna tertentu pada port tertentu: Tambahkan AllowUsers <username>@<IP_address_1> <username>@<IP_address_2>atau AllowUsers <username>@111.222.333.*ke Host/etc/ssh/sshd_config
  • Hanya memperbolehkan koneksi kunci RSA (tanpa kata sandi): Menambahkan konten ~/.ssh/id_rsa.pubdari setiap Klien sebagai baris baru Host ~/.ssh/authorized_keys. Kemudian tambahkan PasswordAuthentication noke Host/etc/ssh/sshd_config
  • Upaya cracking penyerang lambat: Gunakan ufw (firewall tidak rumit) pada Host untuk menilai batas koneksi masuk ke 10 / menit: sudo apt-get install ufw && sudo ufw limit OpenSSH
  • Untuk ide lainnya, lihat Menjaga Keamanan SSH Aman

Jika Anda merasa harus, Aktifkan PasswordAuthenticationdalam sshd_configfile Anda

Temukan baris dengan frasa PasswordAuthenticationdan buat itu dibaca:

PasswordAuthentication yes

Simpan sshd_configfile baru Anda dan mulai kembali layanan Host ssh:

sudo service ssh restart

Jika Anda memerlukan akses dari mana saja melalui internet, Setup Port Forwarding pada router lokal Anda untuk mengarahkan lalu lintas ke server OpenSSH Anda

Perhatikan bahwa sshlayanan Host port mendengarkan dalam sshd_configfile dan mengatur router Anda untuk meneruskan trafik TCP / UDP yang ditujukan pada port ini ke alamat IP server OpenSSH Anda.

Terhubung ke Host dan masuk melalui baris perintah atau terminal

  • Untuk membuka terminal shell SFTP seperti <username>pada Host, buka Terminal pada Klien dan masukkan perintah berikut, ganti 123.123.1.23dengan alamat IP Host:

    sftp <username>@123.123.1.23
    
    • Jika Anda mengubah nomor port yang didukung server OpenSSH Host, lakukan:

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • Untuk membuka terminal shell SSH seperti <username>pada Host, buka Terminal pada Klien dan masukkan perintah berikut, ganti 123.123.1.23dengan alamat IP Host:

    ssh <username>@123.123.1.23
    
    • Jika Anda mengubah nomor port yang didukung server OpenSSH Host, lakukan:

      ssh -p <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      

Sambungkan ke Host dan masuk melalui pengelola file GUI (misalnya, Nautilus) untuk akses SFTP yang lebih visual untuk memungkinkan transfer file

  1. Buka Nautilus di Klien
  2. Pilih File> Sambungkan ke Server
  3. Tipe: SSH
  4. Server: Masukkan alamat IP Host
  5. Port: nomor port yang ditentukan dalam sshd_configfile Host
  6. Nama pengguna: nama pengguna
  7. Kata sandi: kata sandi

masukkan deskripsi gambar di sini

Dalam 14,04:

  1. Buka Nautilus di Klien
  2. Sambungkan ke server
  3. Ketik: `ssh @ 123.123.1.23:

Buat Akun Pengguna Standar di Host dengan izin file terbatas di luar folder rumah mereka

Izin file yang tepat pada Host menjamin bahwa setiap pengguna standar (tanpa hak sudo) yang Anda buat di Host akan memiliki /home/new_userdirektori mereka tetapi memiliki izin terbatas dengan sisa struktur direktori.

  • Izin terbatas tidak selalu berarti mereka tidak dapat melihat nama file dan struktur direktori.

Semoga bermanfaat!

jtd
sumber
9
Tampaknya bagi saya jawaban itu, walaupun tampak sangat komprehensif sebenarnya gagal menjawab bagian tersulit dari pertanyaan OP: "di mana mereka tidak dapat mengakses direktori tingkat atas lainnya." Jika diimplementasikan seperti di atas, pengguna akan dapat membaca sebagian besar struktur direktori.
ostergaard
2
Untuk memperluas komentar @ ajostergaard, ini menciptakan pengguna unix biasa dan memungkinkan mereka mengakses SSH dan SFTP. Pengguna unix biasa (bukan root) masih dapat mengakses dan melihat sejumlah besar file sensitif seperti konfigurasi server web dan banyak lagi. Ini jelas tidak aman dan pasti tidak memenuhi batasan yang diminta oleh OP.
Simon Woodside
50

Langkah 1: Instal paket OpenSSH jika tidak diinstal

sudo apt-get install openssh-server

Langkah 2: Buat grup terpisah untuk pengguna SFTP.

sudo addgroup ftpaccess

Langkah 3: Edit /etc/ssh/sshd_configfile dan buat perubahan seperti di bawah ini. Temukan dan beri komentar di bawah ini.

#Subsystem sftp /usr/lib/openssh/sftp-server

dan tambahkan baris ini ke akhir file.

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Langkah 4: Mulai ulang layanan sshd.

sudo service ssh restart

Langkah 5: Tambahkan pengguna dengan grup ftpaccess dan buat kata sandi.

sudo adduser paul --ingroup ftpaccess --shell /usr/sbin/nologin

Langkah 6: Ubah izin direktori rumah.

sudo chown root:root /home/paul

Langkah 7: Buat direktori di dalam rumah untuk diunggah dan modifikasi izin dengan grup.

sudo mkdir /home/paul/www
sudo chown paul:ftpaccess /home/paul/www

Itu dia .

Lihat: Pengaturan SFTP di ubuntu

ytgmuabm
sumber
Ini sepertinya jawaban yang benar. Saya tidak mengujinya, tetapi setidaknya itu menyebutkan kesulitan utama, membatasi jalur penelusuran.
Mohammed Noureldin
Saya mengujinya dan itu terlalu permisif, karena izin default pada folder rumah menjadi 755. Saya lakukan sudo chmod 711pada folder rumah dan itu memungkinkan saya untuk ftp ke folder www, hanya. Kelihatannya bagus sejauh ini tapi mungkin orang lain bisa
berbaikan
0

Denyhosts adalah alat lain selain yang disebutkan oleh "jtd" yang mungkin ingin Anda lihat. Secara otomatis dapat memblokir upaya koneksi berulang ke server SSH Anda. Ini tersedia untuk menginstal di repositori Ubuntu.

firefly2442
sumber
Paket denyhosts hanya tersedia untuk lucid (10.04LTS) dan tepat (12.04LTS). Packages.ubuntu.com/search?suite=all&keywords=denyhosts
AB
Denyhosts tidak lagi tersedia di repositori Ubuntu, meskipun masih dapat diinstal dengan metode yang berbeda tetapi belum diperbarui sejak lama. Jadi, tidak bijaksana menggunakan Denyhosts.
Faizan Akram Dar
0

Batasi Akses ke Pengguna

Di sini, kami hanya akan mengizinkan pengguna untuk melakukan transfer file dan kami akan menonaktifkan akses terminal.

Untuk itu tambahkan kode berikut di bagian bawah file konfigurasi.

$ sudo nano /etc/ssh/sshd_config

Sekarang file akan terbuka dan tempel kode.

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

Ganti filemgdengan nama pengguna Anda. Kemudian simpan dan tutup file tersebut.

Itu dia.

Referensi: Cara menggunakan SFTP di Ubuntu 16.04

Aimal
sumber