Belirli bir alt dizine erişimi olan sanal kullanıcıları vsftpd için nasıl ayarlayabilirim?


24

Sadece bir alt klasöre erişimi olan vsftpd'ye sanal kullanıcılar ekleyebilmem gerekiyor. Sanal kullanıcıları kullanmak istememin nedeni sadece sunucuda 1 gerçek kullanıcı olmasını istiyorum.

FTP yapısı şöyledir:

  • www
    • website_name1
      • sub_folder1
    • website_name2
      • sub_folder2
      • sub_folder3
    • website_name3
    • website_name4

Ana hesap, www klasörüne ve tüm alt dizinlere erişebilir ve sub_folder1 ve yalnızca sub_folder1’e erişebilecek sanal bir kullanıcı eklemek istiyorum

Ayrıca bazı karışıklıkları önlemek için, başka bir kullanıcının sub_folder3 ve yalnızca sub_folder3'e erişmesini isterim . Demek istediğim, bir kullanıcıya hangi klasör ve alt klasörleri kullanıcı bazında seçmem gerekiyor.

Her ikisi de bana faydası olmayan bütün yapıyı görecek ya da kurulum kullanıcısı olan kullanıcıları görecek kullanıcıları eklemenin yollarını buldum.

Burada yayınlanan benzer bir soru buldum:

Belirli dizinlerin eklenmesi dahil birden fazla kullanıcı için VSFTPD nasıl kurulur

ama proftpdhangisinin genel olarak daha az güvenli olduğunu önerir .
Yoksa buradaki noktayı kaçırdım mı?


Bu serverfault.com/questions/450214/… 'i bulana kadar kimlik doğrulama ile ilgili bir sorunla karşılaştım. Görünüşe göre PAM’in MD5 ile ilgili sorunları var. Bu rehber bu sorunu çözmektedir.

Yanıtlar:


31

Etrafta biraz oynama ile yarı bir çözüm bulmayı başardım (mükemmel değil ama yeterince iyi)

2707974 cevap ve bilgiyi kullanarak, ihtiyacım olanı elde edebileceğim başka bir yerde kazandım.

İlk önce vsftp ve PAM yüklü olması gerekir

apt-get install vsftpd libpam-pwdfile

/Etc/vsftpd.conf dosyasını düzenleyin

nano /etc/vsftpd.conf

sonra aşağıya yapıştırın

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

Gereksinimlerinize göre düzeltin, sanal kullanıcılar için en önemli bit, sanal kullanıcı ayarları yorumundan sonraki her şeydir.

Kullanıcı Yaratmak

Bir veritabanını kullanabilirsiniz veya daha hızlı ve kullanımı daha kolay htpasswdbuldum htpasswd.

kullanıcılarınızı depolamak için bir dizin oluşturun

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

ek kullanıcılar eklemek sadece -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

Sadece CRYPT kullanarak çalışmayı başardım, 8'den fazla karakter kullanmak için 8 karakterle sınırlandırılıyor. Uyumlu bir karma ve doğrudan htpasswd içine boru oluşturmak için openssl kullanıyor

htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)

Kullanıcılarınız oluşturulduktan sonra PAM config dosyanızı şimdi değiştirebilirsiniz

nano /etc/pam.d/vsftpd

ve bu dosyanın içindeki her şeyi kaldırın ve aşağıdakilerle değiştirin

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

Bu, /etc/vsftpd/ftpd.passwdyerel kullanıcılar tarafından tanımlanan sanal kullanıcılarınız için giriş yapmanıza olanak sağlar ve yerel kullanıcıları devre dışı bırakır

Daha sonra, bu sanal kullanıcıların kullanması için bir kullanıcı eklememiz gerekir. Bu kullanıcılar kabuğa erişemeyecek ve çağrılacakvsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

kullanıcı guest_username=vsftpdvsftpd conf dosyasında eşleşmelidir

Dizin Erişimini Tanımlama

Buradaki önemli çizgi şudur:

user_config_dir=/etc/vsftpd_user_conf

Bu, giriş yaptığında user1aşağıdaki dosyayı arayacağı anlamına gelir.

/etc/vsftpd_user_conf/user1

bu dosya ile aynıdır, vsftpd.confböylece yeni bir tanımlayabilirsiniz.local_root

user1Sadece erişebilmek istediğimiz soruya geri dönelim var/www/website_name1/sub_folder1, bu nedenle şu vsftpd_user_confklasörü oluşturmamız gerekiyor :

mkdir /etc/vsftpd_user_conf

Şimdi kullanıcı dosyasını yaratın:

nano /etc/vsftpd_user_conf/user1

ve aşağıdaki satırı girin

local_root=/var/www/website_name1/sub_folder1

Şimdi vsftp'yi yeniden başlat

service vsftpd restart

Şimdi sadece görebilecek var/www/website_name1/sub_folder1ve içinde herhangi bir klasör ve dosyayı görebilecek kullanıcı1 olarak giriş yapmalısınız .

İstediğiniz kadar kullanıcı ekleyebilir ve dilediğiniz klasöre erişimlerini sınırlandırabilirsiniz.

Eğer bir kullanıcı conf dosyası oluşturmazsanız, root / var klasörünü varsayılan olarak (yukarıdaki örnekte) göreceksiniz.

Alt klasörün kullanıcı tarafından değiştirilebilir olması isteniyorsa, paylaşılan alt klasörün sahibini değiştirmek gerekli olabilir:

chown vsftpd:nogroup /var/www/website_name1/sub_folder1

Bu, bazı değişikliklerle çalışır: 1) Mutlak yollar kullanın ("var /" ile başlayan "/ var" ile başlayan yolları değiştirin. 2) Ubuntu 12.04'te bulunan vsftpd 2.3.5 allow_writeable_chroot seçeneğini desteklemiyor, yamalı vsftpd .
gadelat

Merhaba, ssl şifresiyle tekrar -d ile -c atlıyor muyuz, yoksa sadece -c ile atlıyoruz? Ayrıca ikinci bir notta, sadece şifreyi değiştirmek için sorguyu tekrar mı çalıştırıyoruz? ya da başka bir yöntem var. Thanks
mdixon18 17

Neden useradd --home ile bir ev dizini oluşturmanız gerekiyor? bu gerekli?
e-info128 19.07.2017

1
Ek olarak: güvenli TLS bağlantılarını etkinleştirin. digitalocean.com/community/tutorials/…
e-info128 19.03.2017

1
apache2-utils, yanıtları ben dahil etmediğim bazı kurulumlar için gerekli olabilir, çünkü herkes için uygun değildir.
Avenyet

12

Bu el kitabını deneyin. Belki senin için çalışacaktır.

Nasıl yapılır

Vsftpd ve bir PAM kütüphanesini kurun

Düzenle /etc/vsftpd.confve/etc/pam.d/vsftpd

Özel dizinlerle kullanıcı hesapları oluşturun (örneğin / var / www / içinde)

Dizinleri doğru olarak ayarlayın chmodvechown

Sunucuya tam erişime sahip bir yönetici kullanıcı oluşturun

  1. Kur vsftpd(Çok Güvenli FTP Deamon) ve libpam-pwdfilesanal kullanıcılar yaratmak

FTP kullanıcıları oluşturmak istedim ama yerel unix kullanıcıları eklemek istemedim (kabuk erişimi yok, ev dizini yok vb.). Bir PAM (Takılabilir Kimlik Doğrulama Modülleri) sanal kullanıcılar oluşturmanıza yardımcı olur.

sudo apt-get install vsftpd libpam-pwdfile

  1. Düzenle vsftpd.conf

İlk önce orijinal dosyayı yedeklemeniz gerekir

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

O zaman yeni bir tane oluşturun

sudo vim /etc/vsftpd.conf

Aşağıdaki satırları kopyalayıp yapıştırın. Dosya SADECE bu satırları içermelidir:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
  1. Sanal kullanıcıları kaydet

Kullanmakta olduğunuz bir kullanıcıyı kaydetmek için sunucunuz üzerinde çalıştığınızı htpasswdvarsayalım apache2. Bir vsftpdklasör oluşturun ve ardından konfigürasyon dosyalarını içine yerleştirin.

sudo mkdir /etc/vsftpd

sonra

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

-c henüz mevcut değilse dosyayı oluşturacağımız anlamına gelir -d MD5'e zorlarsa, ubuntu 12.04'te ihtiyacınız olur, her zaman kullanın

Komut bir şifre ister.

Daha sonra yeni kullanıcılar eklemek istiyorsanız:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. PAM'yi yapılandır /etc/pam.d/vsftpd

Yine, orijinal dosyayı yedeklemeniz gerekir.

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

ve yeni bir tane oluşturun

sudo vim /etc/pam.d/vsftpd

Bu 2 satırı kopyalayıp yapıştırın (bu tek içerik olmalıdır). Sadece bu 2 çizgide ısrar ediyorum, orijinalleri saklamak için çok zaman harcadım ve sadece bunları ekledim.

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. Kabuk erişimi olmayan yerel bir kullanıcı oluşturun

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

İd komutuyla oluşturulduğunu kontrol edebilirsiniz: id vsftpd. Check_shell parametresi nedeniyle kullanıcıyı / bin / false kabuğu ile tanımlıyoruz (kullanmasanız bile). Son kullanıcı FTP sunucusuna bağlandığında, haklar ve mülkiyet için kullanılırlar:

chmodve chown.

  1. Tekrar başlat vsftpd

Ortak yol tüm deamon gibi init.d kullanmak

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. Dizinler oluştur

Yapılandırmaya göre, tüm kullanıcılar bu klasöre yerleştirilecektir: / var / www / user1.

Bunları belirli haklara sahip olarak oluşturmanız gerekir: kök klasörü yazılabilir olamaz!

 / [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755

Not: kullanıcı, kök dizinde dosya veya klasör oluşturamaz.

Sahip vsftpd.confolduğumuzda chroot_local_user=YESkullanıcı klasörünün dışında hiçbir şey göremez. Ona göre, sunucu şöyle görünüyor:

Yani sadece bu komutları çalıştırın:

mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1

/var/www/user1Klasör mevcut ZORUNDA veya bağlantı başarısız olur.

Şu anda FTP ile bağlanmayı deneyebilirsiniz

  1. Tüm sunucuya erişmek için bir Yönetici kullanıcısı oluşturun

Bir yönetici kullanıcı oluşturmak için yeni bir kullanıcıyı kaydetmemiz gerekir htpasswd.

Bunu yapmadan önce /etc/ftpusers, ftp ile bağlanmasına izin verilmeyen belirli kullanıcıları tanımlayan dosyayı kontrol etmenizi öneririm . Sanırım sadece yerel kullanıcılar için değil, sanal kullanıcılar için değil, sadece bu dosyada yer alan bir ismi seçmemeniz durumunda.

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

Şimdi yeni bir satır eklememiz gerekiyor /etc/vsftpd.conf

chroot_list_enable=YES

Bu, kullanıcılarınızın klasörlerine (bir hapishane olarak) yerleştirileceği anlamına gelir / etc / içindeki EXCEPT kullanıcıları

vsftpd.chroot_list

Hadi bu dosyayı oluşturalım ve kullanıcılarımızı ekleyelim, dosya “theadmin” içeren basit bir satır. Her satıra bir kullanıcı ekleyin. Bu, bir /var/www/theadminklasör oluşturmanıza gerek yok , kullanıcı giriş yapıp başlayacaktır /home/vsftpd.

Sunucuyu yeniden başlatın ve bitirdiniz!


Bunu local_root = / var / www / $ USER zorla uyguladığından zaten esnek değil. Bir kullanıcı veya kullanıcılar için tek bir dizin belirlememe izin vermiyor. Bu dizin normalde müşteriye bağlı olarak farklı amaç ve konumlara sahiptir. Yine de cevabınız için teşekkürler.
Avenyet

0

evet yapabilirsiniz ve esneklik için bir userconfig dir ve dosyası mkdir /var/www/userconfsya da userconfs ismini değiştirmek istediğiniz bir şey yarattıktan sonra belirli bir dosya oluşturun.

vi /var/www/userconfigs/ftpuseraccount

içinde type, local_root=/var/www(veya dir ile erişmek istediğiniz herhangi bir şeyi) guest_username=www-data(en üst düzenlemenin ubuntu sahibi

Güncellemeden sonra vsftpd.conf ekleyerek user_config_dir=/var/www/userconfigs(ya da onu ne şekilde değiştirdiyseniz, bu hesap belirttiğiniz ne şekilde olursa olsun erişir)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.