Bagaimana cara menambahkan pengguna ssh yang hanya memiliki izin untuk mengakses folder tertentu?

17

Bagaimana cara menambahkan pengguna ssh yang hanya memiliki izin untuk mengakses folder tertentu?

useradd -d /var/www/xyz.com.tr/musteri  -s /bin/bash -g sshd musteri

Saya membuat pengguna bernama musteri. Saya mengatur folder dan grup home-nya. Jadi, saya ingin mengintegrasikan musteripengguna ke "/var/www/xyz.com.tr/musteri". Saya tidak ingin mengakses folder lain.

Selo
sumber
Apakah Anda ingin pengguna memiliki akses shell penuh, atau hanya protokol penyalinan file seperti sftp dan rsync?
Gilles 'SO- stop being evil'
Jika yang terakhir, Anda mungkin ingin melihat ke scponlydalam shell, mungkin beroperasi dalam chrootmode untuk membatasi aksesnya ke direktori itu dan di tempat lain.
Shadur
1
@Gilles - Saya ingin mengakses melalui sftp. Tapi, saya tidak ingin mengakses folder lain.
Cell-o
1
@ Sel-o: Jika Anda hanya memerlukan beberapa protokol transfer file dan bukan shell, gunakan chroot plus scponly atau rssh (Google scponly chrootatau rssh chrootseharusnya mengarahkan Anda ke howtos).
Gilles 'SO- stop being evil'
Bagaimana dengan menggunakan ACL?
fpmurphy

Jawaban:

19

Sepertinya Anda ingin müşteriler Anda memiliki akses transfer file ke folder tanpa benar-benar memberi mereka shell. Ini adalah hal yang baik karena seperti yang ditunjukkan binfalse , memberi orang kerang dengan akses terbatas itu rumit karena kerang perlu mengakses segala macam hal yang tersebar di sistem hanya untuk dijalankan.

Untuk memberikan akses SFTP ke folder tertentu, Anda dapat melakukan sesuatu seperti ini.

  1. Tambahkan grup baru ke sistem, katakan 'sftponly'.
  2. Tambahkan semua pengguna di sistem Anda yang seharusnya memiliki hak terbatas untuk grup ini. Anda juga bisa memberi mereka shell terbatas seperti / bin / true, tetapi itu tidak diperlukan.
  3. Ubah file konfigurasi ssh Anda (Biasanya /etc/ssh/sshd_config) dengan baris-baris ini
    Subsistem sftp internal-sftp

    Kelompok Pertandingan dengan tenang
        ChrootDirectory% h
        AllowTCPmeneruskan no
        X11Mengajukan no
        ForceCommand internal-sftp

Ini akan mengaktifkan subsistem sftp di dalam SSH dan memaksa anggota grup sistem untuk menggunakan hanya sistem itu ketika masuk. Ini juga akan chroot mereka ke direktori home mereka. Anda bisa mengubahnya menjadi sub-folder home-director mereka juga dengan sesuatu seperti ChrootDirectory %h/musteri_sftpsehingga mereka tidak bisa melihat sisa file sistem mereka tetapi akan login langsung ke subfolder khusus folder home mereka.

Kolay gelsin.

Caleb
sumber
Öncelikle teşekkürler. ;) Seperti yang Anda sebutkan, saya mengatur SFTP.Tapi, saya punya masalah tentang iptables. Di sini adalah aturan saya. -> A RH-Firewall-1-INPUT -m state --state BARU -m tcp -p tcp --dport 21 -j MENERIMA
Sel-o
1
Birşey değil. Sementara FTP akan menggunakan port 21, SFTP adalah protokol seperti ftp yang berjalan di saluran SSH, sehingga akan menggunakan port SSH yang secara default adalah 22.
Caleb
Perhatikan bahwa Anda juga harus mencari dan mengomentari perintah Subsistem yang ada sebelumnya (mis. Subsystem sftp / usr / lib / openssh / sftp-server)
CnrL
Memecahkan masalah saya DAN mempelajari beberapa frasa bahasa Turki yang berguna! Bonus!
eimajenthat
2

Menurut saya ini sangat sulit, kalau bukan tidak mungkin. Ketika pengguna terhubung melalui SSH ia setidaknya membutuhkan shell, dalam kasus Anda bash. Untuk mengeksekusi /bin/bashia membutuhkan izin untuk mengakses /bin. bashitu sendiri perlu membaca beberapa hal dari /etc(misalnya /etc/bash.bashrc), sehingga pengguna juga perlu mengakses /etc. Dengan asumsi pengguna tidak hanya ingin berkeliaran di direktori ini, ia mungkin ingin membaca file, tetapi untuk mengeksekusi misalnya vimia juga perlu mengakses /usr/bin.
Ini hanya sedikit demonstrasi, ada beberapa dependensi lagi, misalnya saya tidak benar-benar tahu apa yang akan terjadi jika pengguna tidak memiliki akses ke /tmp..

Anda harus memikirkan niat Anda. Apakah Anda hanya ingin seseorang memiliki akses baca / tulis ke bagian dari layanan web Anda? Kemudian Anda dapat mengatur sesuatu seperti FTP untuk mengekspor direktori tertentu ke pengguna ini. Jadi dia bisa membaca / menulis file ini tanpa akses SSH.
Solusi bagus lainnya adalah repositori. Misalnya mengatur repo GIT dan membiarkan pengguna mengkloningnya. Dia dapat melakukan perubahannya secara lokal dan mengirimkan patch kepada Anda. Anda dapat memutuskan apakah akan menerapkan tambalan ini atau tidak, kemunduran untuk tambalan buggy juga sangat mudah.

binfalse
sumber
rbashdirancang untuk melakukan hal ini.
bahamat
Benda ini disebut shell terbatas . Tetapi karena Cell-o hanya ingin mengizinkan transfer file, itu bukan alat yang tepat.
Gilles 'SO- berhenti bersikap jahat'