Apakah mungkin untuk memberikan pengguna akses sftp tanpa akses shell? Jika ya, bagaimana penerapannya?

29

Saya memiliki sejumlah pengguna yang hanya perlu mengunggah file ke homedir mereka. Saya pikir sftp sudah cukup, tetapi saya tidak ingin mereka login melalui shell. Jadi mungkinkah? Platform saya adalah centos 7, homedir pengguna disimpan, katakanlah / personal / $ user

Saya membuat pengguna dengan pengaturan ini

useradd -m -d /personal/user1 -s /sbin/nologin

memberikan pengguna passwd, maka ketika saya menggunakan sftp untuk login ke mesin, katanya tidak bisa terhubung.

Sollosa
sumber

Jawaban:

11

Edit /etc/ssh/sshd_configuntuk mengandung:

Match User [SFTP user]
ForceCommand internal-sftp

Mulai ulang sshd. Jika Anda memiliki banyak pengguna, letakkan semuanya di baris yang sama dengan yang dipisahkan oleh koma seperti:

Match User User1,User2,User3

Kunci untuk mengonfigurasi sftpagar tidak mengizinkan akses shell adalah membatasi pengguna melalui ForceCommand opsi.

kemotep
sumber
Ok saya memang mengikuti semua langkah tetapi tidak masuk
Sollosa
2
@Sollosa Coba Match User [SFTP user] ForceCommand internal-sftpsaja, tanpa melakukan chroot.
Martin Prikryl
@ MartinPrikryl berhasil Martin, terima kasih, saya baru saja menghapus parameter chrootdirectory & viola
Sollosa
1
Selain itu, Anda dapat chrootpara pengguna sehingga mereka tidak dapat menavigasi keluar dan keluar dari "penjara" yang Anda
tentukan
37

Saya suka pengaturan berikut untuk mengelola akses SSH, yang saya gunakan di tempat kerja untuk mengelola sekelompok pengguna pada armada kecil server. Keamanan dan kemudahan manajemen adalah prioritas utama saya.

Fitur utamanya adalah mengelola hak SSH dengan mudah melalui keanggotaan grup Unix, memiliki izin yang ditentukan dengan ketat, dan aman secara default.

Pengaturan

Instal perangkat lunak (opsional tetapi bermanfaat):

yum install members   # or apt install members

Tambahkan grup:

addgroup --system allowssh
addgroup --system sftponly

Di /etc/ssh/sshd_config, pastikan bahwa yang berikut ke pengaturan adalah No:

PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no

Dan di akhir /etc/ssh/sshd_config, tambahkan dua bait ini:

Match Group allowssh
    PubkeyAuthentication yes

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

(jangan lupa me-restart SSH setelah mengedit file)

Penjelasan

Jadi, apa yang dilakukan semua ini?

  • Itu selalu menonaktifkan login root, sebagai langkah pengamanan tambahan.
  • Itu selalu menonaktifkan login berbasis kata sandi (kata sandi yang lemah adalah risiko besar bagi server yang menjalankan sshd).
  • Itu hanya memungkinkan (pubkey) login untuk pengguna dalam allowsshgrup.
  • Pengguna dalam sftponlygrup tidak bisa mendapatkan shell di atas SSH, hanya SFTP.

Mengelola yang memiliki akses kemudian dilakukan dengan mengelola keanggotaan grup (perubahan ini segera berlaku, tidak perlu memulai ulang SSH):

# adduser marcelm allowssh
# members allowssh
marcelm
# deluser marcelm allowssh
# members allowssh
#

Perhatikan bahwa pengguna sftp Anda harus menjadi anggota dari keduanya sftponly(untuk memastikan mereka tidak akan mendapatkan shell), dan dari allowssh(untuk mengizinkan login terlebih dahulu).

Informasi lebih lanjut

  1. Harap dicatat bahwa konfigurasi ini tidak mengizinkan login kata sandi ; semua akun harus menggunakan otentikasi kunci publik. Ini mungkin satu-satunya kemenangan keamanan terbesar yang dapat Anda peroleh dengan SSH, jadi saya berpendapat ini sepadan dengan usaha bahkan jika Anda harus mulai sekarang.

    Jika Anda benar-benar tidak ingin ini, kemudian juga menambahkan PasswordAuthentication yeske Match Group allowsshbait. Ini akan memungkinkan pubkey dan autentikasi kata sandi untuk allowsshpengguna.

  2. Konfigurasi ini membatasi setiap sftponlypengguna ke direktori home mereka. Jika Anda tidak menginginkannya, hapus ChrootDirectory %harahan.

    Jika Anda tidak ingin chrooting bekerja, penting bahwa direktori home user (dan direktori manapun di atasnya) dimiliki oleh root:rootdan tidak dapat ditulis oleh kelompok / lainnya. Tidak masalah jika subdirektori dari direktori home menjadi milik pengguna dan / atau dapat ditulis.

    Ya, direktori home pengguna harus dimiliki oleh root dan tidak dapat ditulis oleh pengguna. Sayangnya, ada alasan bagus untuk pembatasan ini. Tergantung pada situasi Anda, ChrootDirectory /homemungkin menjadi alternatif yang baik.

  3. Mengatur shell sftponlypengguna untuk /sbin/nologintidak perlu atau berbahaya untuk solusi ini, karena SSH ForceCommand internal-sftpmenimpa shell pengguna.

    Menggunakan /sbin/nologinmungkin berguna untuk menghentikan mereka masuk melalui cara lain (konsol fisik, samba, dll).

  4. Pengaturan ini tidak memungkinkan rootmasuk langsung melalui SSH; ini membentuk lapisan keamanan ekstra. Jika Anda benar - benar membutuhkan login root langsung, ubah PermitRootLogindirektifnya. Pertimbangkan untuk mengaturnya ke forced-commands-only,, prohibit-passworddan (sebagai pilihan terakhir) yes.

  5. Untuk poin bonus, lihat membatasi siapa yang bisa sumelakukan root; menambah grup sistem yang disebut wheel, dan menambahkan / mengaktifkan auth required pam_wheel.sodi /etc/pam.d/su.

marcelm
sumber
2
Ini harus menjadi jawaban yang diterima. Ini memberikan solusi serta memecah alasan di balik setiap langkah.
kemotep
1
Ini adalah jawaban yang sangat bagus dengan saran keamanan tambahan yang bagus tapi saya khawatir bagi para pengguna yang sistemnya mengandalkan login kata sandi, login root, dll. Tentu saja itu tidak baik tetapi mungkin memindahkan perubahan terkait dengan peningkatan keamanan umum ke mereka bagian sendiri sehingga jawaban untuk pertanyaan dengan perubahan minimal tersedia?
Josh Rumbut
1
@JoshRumbut Saya tidak ingin menulis ulang jawaban untuk ucapan Anda (sangat benar), sebagian karena itu benar-benar hanya menunjukkan My Way ™, dan sebagian dengan harapan bahwa itu bisa menjadi semacam pengaturan SSH secure-by-default kanonik yang aman contoh bahwa lebih banyak orang merasa berguna. Sebagai kompromi, saya mencoba membuatnya jauh lebih jelas bahwa login root dan auth password tidak akan berfungsi, dan saya memasukkan instruksi bagaimana mengaktifkannya kembali :)
marcelm
1
Jawaban yang bagus, karena kekurangan terbesar dari jawaban lainnya adalah tidak mempertimbangkan aspek keamanan, terutama chroot. +1
Rui F Ribeiro
1
Chroot tidak akan berfungsi untuk% h generik. Anehnya, Anda diharuskan untuk chown root:rootdanchmod og-w
kubanczyk
1

ubah saja shell default mereka ke / sbin / nologin. Dengan asumsi sebagian besar varietas Linux:

# usermod -s /sbin/nologin username
Kefka
sumber
Saya sudah mencobanya, tetapi pengguna tidak dapat masuk melalui sftp, saya tidak tahu mengapa. Saya menggunakan centos btw.
Sollosa
@Sollosa Mungkin masalah izin di chroot sftp Anda, atau sshd_config memiliki masalah. Anda harus memperbarui pertanyaan Anda untuk memasukkan izin direktori chroot Anda, dan sshd_config Anda dengan informasi sensitif apa pun yang dihapus.
Kefka
Saya percaya (meskipun saya tidak bisa mengujinya sekarang) bahwa ini memungkinkan SFTP hanya jika ada juga Subsystem sftp internal-sftp) (atau mungkin ForceCommand internal-sftp). Jika ada yang umum Subsystem sftp /path/to/sftp-server, nologinbahkan akan mencegah SFTP.
Martin Prikryl
@ MartinPrikryl Saya salah mengerti pertanyaan asli yang belum diedit untuk menanyakan cara menonaktifkan akses shell untuk pengguna di server sftp yang berfungsi. Aku sudah bangun sekitar sepuluh menit pada saat itu, jadi aku tidak sejernih pikiranku. Meskipun saya tidak tahu bahwa sftp-server membutuhkan pengguna untuk memiliki shell yang valid untuk bekerja - yang tampaknya berpotensi berbahaya. Saya hanya pernah menggunakan internal-sftp hanya karena kebiasaan karena itulah saya selalu melakukannya.
Kefka
Lihat jawaban saya untuk OpenSSH: Perbedaan antara internal-sftp dan sftp-server (khususnya bagian di bagian akhir)
Martin Prikryl
0

Anda bisa menggunakan tftp. apapun yang melebihi ssh akan memerlukan beberapa auth (key | pass).

sementara tftp dapat diamankan, mungkin ada baiknya meninjau kembali keputusan untuk menyediakan akses ke apa pun tanpa otentikasi.

http://manpages.ubuntu.com/manpages/bionic/man1/tftp.1.html

Justin
sumber
2
Saya pikir OP ingin pengguna (yang mungkin memiliki nama pengguna dan kata sandi) tidak dapat menggunakan klien SSH biasa untuk terhubung ke server dan menjalankan perintah sewenang-wenang, tetapi para pengguna yang sama dapat mengunggah file melalui SFTP.
John_ReinstateMonica