GNU/Linux >> Belajar Linux >  >> Linux

Aktifkan akses shell SSH tetapi nonaktifkan akses SFTP

Solusi 1:

Seperti yang telah disebutkan orang lain, nonaktifkan sftp tidak mendekati cukup - pengguna dengan ssh yang tidak dibatasi akses dapat melihat file apa pun yang akunnya memiliki izin untuk melihatnya, dapat memodifikasi apa pun yang diizinkan untuk dimodifikasi, dan dapat dengan mudah mengunduh apa pun yang dapat mereka baca ke mesin mereka sendiri. Satu-satunya cara untuk menghentikan mereka melakukan ini adalah dengan benar-benar membatasi akses mereka. Juga tidak ideal untuk mengandalkan .profile untuk membatasi pengguna, karena bukan untuk itu (Edit:Seperti yang disebutkan Aleksi dalam jawabannya, sebenarnya sepele untuk mem-bypass .profile; hal tentang .profile adalah untuk kenyamanan, bukan keamanan, jadi tidak dimaksudkan untuk membatasi pengguna. Gunakan hal-hal yang dirancang untuk keamanan, seperti hal-hal di bawah, untuk memberikan keamanan).

Ada dua cara dasar untuk melakukannya:Anda dapat membatasinya melalui izin file, atau memaksanya untuk hanya menjalankan aplikasi konsol Anda. Cara kedua lebih baik:Tetapkan pengguna yang harus dibatasi ke aplikasi konsol ke grup (mis. customers ); lalu, di sshd_config , tambahkan baris berikut:

Match Group customers
ForceCommand /path/to/app

Apa yang dilakukan adalah membuat semua koneksi dari pengguna dalam grup itu membuka aplikasi konsol; mereka tidak dapat memulai yang lain, termasuk sftp alat pelayan. Hal ini juga menghentikan mereka melakukan hal selain itu dengan sistem, dan tidak seperti .profile , melakukannya menggunakan server SSH itu sendiri (.profile membatasi mereka di shell, ForceCommand juga mencegah melakukan hal-hal lain yang tidak melibatkan memulai sebuah shell). Juga tidak seperti .profile , ini dirancang sebagai hal keamanan; itu secara khusus dibuat untuk melawan pengguna jahat yang menghindarinya.

Alternatif (mungkin lebih rendah) akan melibatkan pembuatan pengguna baru untuk menjalankan aplikasi konsol. Anda kemudian akan membatasi direktori data untuk pengguna tersebut, menyetel aplikasi konsol yang dimiliki oleh pengguna tersebut, dan menyetel u+s pada program. Ini adalah setuid sedikit; itu berarti seseorang yang menjalankan program konsol melakukannya dengan izin dari pemilik program. Dengan begitu, pengguna sendiri tidak memiliki akses ke direktori, mereka hanya mendapatkannya melalui program. Namun, Anda sebaiknya menggunakan ForceCommand saja , karena itu membatasi semua akses ke "jalankan saja program ini".

Solusi 2:

Sunting:

Jika tidak jelas, jawaban berikut tidak dimaksudkan sebagai aman metode mencegah SFTP digunakan oleh siapa saja yang memiliki akses shell ke server. Itu hanya jawaban yang menjelaskan cara menonaktifkannya dari visibilitas eksternal. Untuk diskusi tentang keamanan tingkat pengguna, lihat jawaban dari @cpast dan @Aleksi Torhamo. Jika keamanan adalah fokus Anda, jawaban ini bukanlah jawaban yang tepat. Jika tampilan layanan sederhana adalah fokus Anda, maka inilah jawaban Anda.

Kami sekarang melanjutkan ke jawaban awal:

Komentari dukungan sftp di sshd_config (dan tentu saja restart sshd ):

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

Solusi 3:

Jangan mencoba melakukan ini dengan .profile karena tidak memberikan keamanan apa pun dan tidak membatasi apa pun!

Tidak masalah apa yang Anda masukkan ke dalam .profile , karena Anda dapat melewatinya hanya dengan memberikan perintah untuk dijalankan pada baris perintah ssh, seperti ini:ssh [email protected] command . Anda masih bisa mendapatkan akses shell normal dengan melakukan ssh -t [email protected] bash .

Menonaktifkan subsistem sftp, seperti yang disebutkan dalam jawaban lain, tidak membantu sama sekali. Subsistem pada dasarnya hanyalah alias dari perintah, dan Anda masih dapat menggunakan sftp secara normal dengan melakukan sftp -s /path/to/sftp-executable [email protected] .

Seperti yang dikatakan cpast dan beberapa komentator, Anda harus menggunakan mekanisme yang tepat untuk membatasi akses. Yaitu,

  • Gunakan ForceCommand di sshd_config
  • Gunakan login tanpa kata sandi dan command="..." di .ssh/authorized_keys
  • Ubah shell pengguna menjadi sesuatu yang membatasi apa yang dapat dilakukan pengguna

Catatan:

  • command="..." hanya berlaku untuk satu kunci, jadi tidak membatasi login ssh untuk pengguna menggunakan kata sandi atau kunci lain
  • Anda mungkin juga ingin membatasi penerusan port, dll. (penerusan port, penerusan x11, penerusan agen, dan alokasi pty adalah yang pernah saya dengar)
    • AllowTcpForwarding dll. di sshd_config
    • no-port-forwarding dll. di .ssh/authorized_keys
  • Jika Anda menjalankan daemon lain (seperti FTP), Anda harus memverifikasi bahwa mereka tidak membiarkan pengguna masuk (Beberapa daemon membuat keputusan ini berdasarkan shell pengguna, jadi jika Anda mengubahnya, Anda mungkin ingin mengembalikan periksa ini)
  • Anda dapat mengubah shell pengguna menjadi skrip yang melakukan apa yang Anda inginkan; itu dijalankan tanpa argumen atau seperti script -c 'command-the-user-wanted-to-run'
  • Keduanya ForceCommand dan command="..." jalankan perintah melalui shell pengguna, sehingga tidak berfungsi jika shell pengguna diatur ke misalnya. /bin/false atau /sbin/nologin

Penafian:Saya sama sekali bukan ahli dalam masalah ini, jadi sementara saya dapat mengatakan bahwa .profile semuanya tidak aman, saya tidak bisa menjanjikan tidak ada "gotcha" dengan metode lain yang tidak saya ketahui. Mereka aman sejauh yang saya tahu, tapi saya tidak akan menjadi orang pertama yang salah di internet.


Linux
  1. Ssh – Membatasi Pengguna Ssh/scp/sftp ke Direktori?

  2. Nonaktifkan Shell Pengguna Karena Alasan Keamanan?

  3. Bagaimana Cara Membuat Pengguna Baru Dengan Akses Ssh?

  1. Nonaktifkan atau Aktifkan Login Root SSH dan Amankan Akses SSH di CentOS 7

  2. Cara Membuat Pengguna SFTP tanpa Akses Shell di CentOS 8

  3. Batasi akses SSH berbasis kata sandi per pengguna tetapi izinkan otentikasi kunci

  1. Nonaktifkan Login Root Langsung dan Akses Pengguna melalui SSH ke Server

  2. CentOS / RHEL :Cara Menonaktifkan / Mengaktifkan login ssh pengguna root dan non-root langsung

  3. ssh tunneling hanya akses