Cara membuat pengguna FTP dengan akses khusus / dir / hanya pada instalasi Centos / linux

44

Jadi saya menggunakan instalasi VPS - CentOS Linux. Saya memiliki vsFTPd di server. Saat ini saya memiliki akses SFTP ke server melalui pengguna root saya, tetapi sekarang saya mencoba untuk membuat pengguna baru dengan akses FTP ke direktori tertentu hanya di server, saya telah melakukan hal berikut:

1. mkdir /var/www/mydomain.com
2. mkdir /var/www/mydomain.com/html
3. useradd <-username>
4. passwd <-username>
5. chown –R <-username> /var/www/mydomain.com
5. groupadd <-groupname>
6. gpasswd -a <-username> <-groupname>
7. chgrp -R <-groupname> /var/www/mydomain.com
8. chmod -R g+rw /var/www/mydomain.com

Apa yang saya coba lakukan adalah membuat pengguna HANYA memiliki akses ke /var/www/mydomain.com - Saya mengamati bahwa pengguna dengan benar masuk ke folder yang benar, namun pengguna kemudian dapat menelusuri "kembali" ke direktori lain. Saya ingin pengguna menempel di folder tertentu dan tidak dapat "menelusuri" kembali .

Ada ide?

Saya telah menemukan berbagai artikel tentang chroot, tetapi tidak menemukan cara untuk menggunakannya dalam langkah-langkah yang termasuk di atas.

pengguna1231561
sumber
digitalocean.com/community/tutorials/… Anda dapat mengikuti ini untuk menyelesaikan masalah Anda
Jack
bagi mereka yang berada di Ubuntu 18 di sini adalah versi digitalocean.com/community/tutorials/…
Dung

Jawaban:

39

Sederhana saja.

Anda harus menambahkan opsi berikut pada file vsftpd.conf

chroot_local_user=YES

Dokumentasi di dalam file konfigurasi cukup jelas:

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().

Ini berarti, bahwa pengguna hanya akan memiliki akses pada folder yang Anda konfigurasi sebagai HOME dari pengguna. Di bawah ini, saya punya contoh entri passwd pengguna:

upload_ftp:x:1001:1001::/var/www/sites/:/bin/bash

Atur direktori home pengguna dengan perintah berikut

usermod -d /var/www/my.domain.example/ exampleuser

Catatan: Dalam contoh saya, pengguna ini juga merupakan pengguna yang valid untuk beberapa tugas terjadwal di Linux. Jika Anda tidak memiliki kebutuhan ini, silakan ganti shell pengguna /sbin/nologinsebagai ganti bash.

Jeff Schaller
sumber
Hai nwildner! Terima kasih banyak telah meluangkan waktu untuk menjawab saya tentang ini. Jadi dalam file vsftpd.conf saya ive menambahkan baris berikut "chroot_local_user = YES" - lalu seperti yang saya mengerti saya perlu menambahkan baris yang mirip dengan yang Anda tampilkan untuk pengguna saya? Harus mengakui saya tidak sepenuhnya yakin apa yang harus ditulis di sana dengan contoh yang Anda berikan. "1001" dll apa itu? Mari kita asumsikan pengguna saya dipanggil: "im_a_linux_noob" dan direktori untuk pengguna itu adalah: "/var/www/mydomain.com" - bagaimana tampilannya?
user1231561
Dan apakah saya dapat melakukan ini tanpa langkah tambahan apa yang telah saya lakukan di pos saya? Jadi melakukan 1-8 dan kemudian menambahkan apa yang Anda gambarkan harus melakukan trik?
user1231561
Hai. Contoh di atas hanyalah sebuah baris (dimodifikasi, tentu saja) dari /etc/passwdfile, yang mewakili pengguna yang bernama upload_ftp, 1001: 1001 adalah ID Pengguna dan ID Grupnya, / var / www / sites adalah direktori home dari pengguna (dan parameter yang dibaca vsftpd) dan / bin / bash, shell. Mungkin apa yang hilang pada kasus Anda adalah direktori home untuk pengguna, dan itu bisa diselesaikan dengan perintah berikut: usermod -d /var/www/mydomain.com <username>. Cheers :)
3
Yup terima kasih banyak. Namun satu masalah. Ini berfungsi dengan baik masuk melalui FTP normal, namun ketika saya login sebagai SFTP - maka saya dapat menelusuri kembali - ada ide?
user1231561
1
Tentu saja karena sftp sedang ditangani oleh server ssh Anda, bukan oleh server ftp Anda. Dengan cara "kasar": SFTP = SSH + FTP; FTPS = FTP + SSL. Ada utas tentang sftp di sini, dan saya akan mengutipnya untuk duplikasi subjek aviod ok? ;) unix.stackexchange.com/a/64541/34720
6

Setelah Anda mengubah konfigurasi Anda untuk disertakan chroot_local_user=YES

Anda dapat mengubah shell pengguna /usr/sbin/nologinsehingga jika kata sandi bocor Anda akan mengurangi risiko (atur direktori home juga). Shell perlu didaftar /etc/shellsjuga atau otentikasi akan gagal.

usermod -d /var/www/my.domain.example -s / usr / sbin / nologin exampleuser

-d, --home HOME_DIR Direktori login baru pengguna. Jika opsi -m diberikan isi direktori home saat ini akan dipindahkan ke direktori home baru, yang dibuat jika belum ada.

-s, --shell SHELL Nama shell login baru pengguna. Pengaturan bidang ini menjadi kosong menyebabkan sistem memilih shell login default.

https://security.appspot.com/vsftpd/FAQ.txt

Shapeshifter
sumber
4

Berikut adalah langkah-langkah untuk mengatur pengguna dan memungkinkan akses pengguna hanya melalui FTP (yaitu tidak ada SSH) dan juga membatasi akses ke direktori (rumah pengguna) tertentu di proftpd :

  1. Tambahkan pengguna baru: adduser newusername

  2. Setel Kata Sandi: passwd newusername

  3. Ubah direktori home pengguna dari default ke folder baru:

    usermod -d /target/directory username

  4. Edit shellsfile: vi /etc/shellsdan tambahkan /dev/nulldi akhir

  5. Ubah newusernameentri dalam passwdfile: vi /etc/passwduntuk menambahkan /./sebelum newusernameentri sehingga terlihat seperti ini:

    newusername:x:502:502::/home/ftp/./newusernamehomedirectory/:/dev/null

    Detail untuk langkah 4 & 5 di sini:

  6. Edit /etc/proftpd/proftpd.conffile dan batalkan komentar pada barisDefaultRoot ~

pTeJa
sumber
-4

Atur izin folder root ke 711 dengan akun root Anda.

Leping Zou
sumber
-4

Jalankan perintah ini:

useradd -d ftp_user:chown 711 /etc/init.d/
Lunix Pro
sumber
2
Anda harus mempertimbangkan untuk memperluas posting Anda untuk memiliki, setidaknya, beberapa penjelasan atau dokumentasi yang bermanfaat.
HalosGhost
Ini jawaban yang mengerikan. Anda pada dasarnya memberi pengguna ftp akses penuh ke direktori /etc/init.d/ - kegilaan total. 711 menjelaskan - permissions-calculator.org/decode/0711
Tisch