विशिष्ट उप निर्देशिका तक पहुँच के साथ vsftpd के लिए आभासी उपयोगकर्ताओं को कैसे सेटअप करें?


24

मुझे vsftpd में एक आभासी उपयोगकर्ताओं को जोड़ने में सक्षम होने की आवश्यकता है जो केवल एक उप फ़ोल्डर तक पहुंच सकते हैं। वर्चुअल उपयोगकर्ताओं का उपयोग करने का कारण यह है कि मैं केवल सर्वर पर 1 वास्तविक उपयोगकर्ता रखना चाहता हूं।

एफ़टीपी संरचना है:

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

मुख्य खाते में www फ़ोल्डर और सभी उप निर्देशिकाओं तक पहुंच है और मैं एक वर्चुअल उपयोगकर्ता जोड़ना चाहता हूं जिसमें सब_फ़ोल्डर 1 और केवल सब_फ़ोल्डर 1 तक पहुंच हो सकती है

इसके अलावा कुछ भ्रम से बचने के लिए मुझे उप - फ़ोल्डर 3 और केवल उप_फ़ोल्डर 3 का उपयोग करने के लिए दूसरे उपयोगकर्ता की भी आवश्यकता होगी । मेरी बात यह है कि मुझे उपयोगकर्ता के आधार पर किसी फ़ोल्डर और उप फ़ोल्डर को चुनने में सक्षम होना चाहिए।

मैंने उपयोगकर्ताओं को उन संपूर्ण स्ट्रकुट्रे या सेटअप उपयोगकर्ता नाम के फ़ोल्डर देखने के लिए जोड़ने के तरीके ढूंढे हैं, जिनका मेरे लिए कोई उपयोग नहीं है।

मुझे एक ऐसा ही सवाल यहाँ पोस्ट किया गया है:

विशिष्ट निर्देशिकाओं को जोड़ने सहित कई उपयोगकर्ताओं के लिए VSFTPD सेटअप करने के लिए कैसे

लेकिन यह अनुशंसा करता है proftpdकि मैं हालांकि सामान्य रूप से कम सुरक्षित था।
या मैं यहाँ बिंदु याद किया है?


जब तक मुझे यह सर्वरफ़ॉल्ट.com / questions / 450214 /… मिला, तब तक मुझे सबसे लंबे समय तक प्रमाणीकरण की समस्या थी। जाहिर तौर पर PAM में MD5 हैश के साथ समस्याएँ हैं। यह मार्गदर्शिका उस समस्या को हल करती है।

जवाबों:


31

चारों ओर खेलने के एक बिट के साथ मैं एक अर्ध समाधान के साथ आने में कामयाब रहा (बिल्कुल सही नहीं, लेकिन काफी अच्छा)

2707974 उत्तर और जानकारी का उपयोग करने के बाद, मुझे वह जगह मिल गई है जहाँ मुझे वह प्राप्त करने की आवश्यकता है जो मुझे चाहिए।

सबसे पहले आपको vsftp और PAM को इनस्टॉल करना होगा

apt-get install vsftpd libpam-pwdfile

/Etc/vsftpd.conf संपादित करें

nano /etc/vsftpd.conf

फिर निम्नलिखित में पेस्ट करें

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

आभासी उपयोगकर्ताओं के लिए सबसे महत्वपूर्ण बात यह है कि आभासी उपयोगकर्ता सेटिंग्स टिप्पणी के बाद सब कुछ के लिए सबसे महत्वपूर्ण बिट्स की जरूरत है

उपयोगकर्ता बनाना

आप या तो एक डेटाबेस का उपयोग कर सकते हैं या htpasswdमैं htpasswdतेजी से और आसानी से उपयोग कर पाया ।

अपने उपयोगकर्ताओं को संग्रहीत करने के लिए एक निर्देशिका बनाएं

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

अतिरिक्त उपयोगकर्ताओं को जोड़ने से बस छोड़ना है -c

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

मैं केवल CRYPT का उपयोग करके काम करने में कामयाब रहा हूं, जो 8 से अधिक वर्णों का उपयोग करने के लिए 8 चार्ट्स की सीमा का उपयोग करता है। एक संगत हैश और पाइप सीधे htpasswd में उत्पन्न करने के लिए।

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

आपके उपयोगकर्ता बन जाने के बाद अब आप अपनी PAM कॉन्फ़िग फ़ाइल को बदल सकते हैं

nano /etc/pam.d/vsftpd

और इस फ़ाइल के अंदर सब कुछ हटा दें और निम्नलिखित के साथ बदलें

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

यह आपके वर्चुअल उपयोगकर्ताओं के लिए लॉगिन को सक्षम करेगा /etc/vsftpd/ftpd.passwdऔर स्थानीय उपयोगकर्ताओं को अक्षम करेगा

आगे हमें इन आभासी उपयोगकर्ताओं को उपयोग करने के लिए एक उपयोगकर्ता जोड़ना होगा। इन उपयोगकर्ताओं के पास शेल तक पहुंच नहीं होगी और उन्हें कॉल किया जाएगाvsftpd

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

उपयोगकर्ता को guest_username=vsftpdvsftpd conf फाइल में मेल खाना चाहिए

डिफाइनिंग डायरेक्टरी एक्सेस

यहाँ महत्वपूर्ण पंक्ति निम्नलिखित है

user_config_dir=/etc/vsftpd_user_conf

इसका मतलब यह है कि जब इसमें user1लॉग निम्न फ़ाइल के लिए दिखेगा

/etc/vsftpd_user_conf/user1

यह फ़ाइल वही है vsftpd.confजिससे आप एक नया परिभाषित कर सकते हैंlocal_root

उस प्रश्न पर वापस जाना जिसे हम user1केवल एक्सेस करना चाहते हैं var/www/website_name1/sub_folder1, इसलिए हमें vsftpd_user_confफ़ोल्डर बनाने की आवश्यकता है :

mkdir /etc/vsftpd_user_conf

अब उपयोगकर्ता फ़ाइल बनाएँ:

nano /etc/vsftpd_user_conf/user1

और निम्न पंक्ति दर्ज करें

local_root=/var/www/website_name1/sub_folder1

अब vsftp को पुनरारंभ करें

service vsftpd restart

अब आपको उपयोगकर्ता 1 के रूप में लॉगिन करने में सक्षम होना चाहिए जो केवल देखने var/www/website_name1/sub_folder1और उसके अंदर कोई भी फ़ोल्डर और फ़ाइल करने में सक्षम होगा।

यही है कि अब आप जितने चाहें उतने उपयोगकर्ता जोड़ सकते हैं और अपनी इच्छानुसार किसी भी फ़ोल्डर में उनकी पहुंच सीमित कर सकते हैं।

यह याद रखना महत्वपूर्ण है कि यदि आप एक उपयोगकर्ता conf फाइल नहीं बनाते हैं, तो यह var / www फ़ोल्डर को रूट के रूप में डिफ़ॉल्ट करेगा (ऊपर दिए गए उदाहरण में)

यदि सबफ़ोल्डर को उपयोगकर्ता द्वारा संशोधित करने का इरादा है, तो यह साझा किए गए फ़ीचर के स्वामी को बदलने के लिए संभव नहीं है:

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

यह कुछ संशोधनों के साथ काम करता है: 1) निरपेक्ष पथों का उपयोग करें ("/ /" के साथ "var /" पर शुरू होने वाले रास्तों को बदलें) vsftpd 2.3.5 जो कि Ubuntu 12.04 में है, allow_writeable_chroot विकल्प का समर्थन नहीं करता है, आप पैच स्थापित करके इसे हल कर सकते हैं। vsftpd
गदेलट

नमस्ते, ssl पासवर्ड के साथ हम फिर से -c के साथ -d या सिर्फ omit -c करते हैं? इसके अलावा एक दूसरे नोट पर, क्या हम पासवर्ड बदलने के लिए सिर्फ क्वेरी फिर से करते हैं? या वहाँ एक और तरीका है। धन्यवाद
mdixon18

आपको useradd --home के साथ होम डायरेक्टरी बनाने की आवश्यकता क्यों है? यह आवश्यक है?
ई-जानकारी128

1
अतिरिक्त: सुरक्षित TLS कनेक्शन सक्षम करें। digitalocean.com/community/tutorials/…
e-info128

1
Apache2-utils की आवश्यकता हो सकती है कुछ प्रतिष्ठानों के लिए मैंने इसे उत्तर में शामिल नहीं किया है क्योंकि यह सभी के लिए प्रासंगिक नहीं है।
अवनीत

12

इस मैनुअल के साथ प्रयास करें। शायद आपके लिए काम करेंगे।

यह कैसे करना है

Vsftpd और PAM लाइब्रेरी स्थापित करें

संपादित करें /etc/vsftpd.confऔर/etc/pam.d/vsftpd

कस्टम निर्देशिकाओं (उदाहरण के लिए / var / www /) के साथ उपयोगकर्ता accout बनाएँ

सही chmodऔर के साथ निर्देशिका सेट करेंchown

सर्वर तक पूर्ण पहुंच के साथ एक व्यवस्थापक उपयोगकर्ता बनाएं

  1. स्थापित करें vsftpd(बहुत सुरक्षित एफ़टीपी डायनम) और libpam-pwdfileआभासी उपयोगकर्ता बनाने के लिए

मैं एफ़टीपी उपयोगकर्ता बनाना चाहता था, लेकिन मैं स्थानीय यूनिक्स उपयोगकर्ताओं (कोई शेल एक्सेस, कोई होम डायरेक्टरी और इतने पर) को जोड़ना नहीं चाहता था। एक PAM (Pluggable Authentication Modules) आपको वर्चुअल उपयोगकर्ता बनाने में मदद करेगा।

sudo apt-get install vsftpd libpam-pwdfile

  1. संपादित करें vsftpd.conf

सबसे पहले आपको मूल फ़ाइल का बैकअप लेना होगा

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

फिर एक नया बनाएँ

sudo vim /etc/vsftpd.conf

निम्नलिखित पंक्तियों को कॉपी और पेस्ट करें। फ़ाइल में केवल ये पंक्तियाँ होनी चाहिए:

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. आभासी उपयोगकर्ताओं को पंजीकृत करें

आपके द्वारा उपयोग किए जाने वाले उपयोगकर्ता को पंजीकृत करने के लिए htpasswd, इसलिए मैं मानता हूं कि आपने apache2अपने सर्वर पर काम किया है। एक vsftpdफ़ोल्डर बनाएँ, फिर उसमें कॉन्फ़िगरेशन फ़ाइलें डालें।

sudo mkdir /etc/vsftpd

फिर

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

-c का मतलब है कि अगर हम अभी तक मौजूद नहीं हैं तो फाइल को बनाएंगे -d बलों MD5, आपको इसे ubuntu 12.04 पर चाहिए, बस इसे हमेशा उपयोग करें

कमांड एक पासवर्ड के लिए संकेत देगा।

यदि आप बाद में नए उपयोगकर्ता जोड़ना चाहते हैं:

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

  1. PAM को कॉन्फ़िगर करें /etc/pam.d/vsftpd

फिर से, आपको orignal फ़ाइल का बैकअप लेना होगा

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

और एक नया बनाएँ

sudo vim /etc/pam.d/vsftpd

इन 2 पंक्तियों को कॉपी और पेस्ट करें (यह एकमात्र सामग्री होनी चाहिए)। मैं केवल इन 2 पंक्तियों पर जोर देता हूं, मैंने मूल को बनाए रखते हुए बहुत समय बर्बाद किया और बस इन्हें जोड़ा।

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. शेल एक्सेस के बिना एक स्थानीय उपयोगकर्ता बनाएं

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

आप जांच सकते हैं कि यह आईडी कमांड के साथ बनाया गया है: आईडी vsftpd। हम check_shell पैरामीटर (भले ही आप इसका उपयोग न करें) के कारण / बिन / झूठे शेल के साथ उपयोगकर्ता को परिभाषित करते हैं। जब अंतिम उपयोगकर्ता एफ़टीपी सर्वर से जुड़ता है, तो उनका उपयोग अधिकारों और स्वामित्व के लिए किया जाएगा:

chmodऔर chown

  1. पुनः आरंभ करें vsftpd

सामान्य तरीका init.d का उपयोग सभी बधिरों की तरह करता है

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. निर्देशिका बनाएँ

कॉन्फ़िगरेशन के अनुसार सभी उपयोगकर्ताओं को इस फ़ोल्डर में रखा जाएगा: / var / www / user1।

आपको उन्हें विशेष अधिकारों के साथ बनाने की आवश्यकता है: रूट फ़ोल्डर को राइट नहीं किया जा सकता है!

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

नोट: उपयोगकर्ता रूट डायरेक्टरी में फाइल या फोल्डर नहीं बना सकता है।

में vsftpd.confहमारे पास chroot_local_user=YESतो उपयोगकर्ता अपने फ़ोल्डर का कुछ भी बाहर नहीं देख सकता। उसके लिए, सर्वर इस तरह दिखता है:

तो बस ये कमांड चलाएं:

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/user1फ़ोल्डर मौजूद गया है या कनेक्शन असफल हो जायेगी।

अभी आप अपने FTP से जुड़ने की कोशिश कर सकते हैं

  1. संपूर्ण सर्वर तक पहुँचने के लिए एक व्यवस्थापक उपयोगकर्ता बनाएँ

एक व्यवस्थापक उपयोगकर्ता बनाने के लिए हमें एक नया उपयोगकर्ता पंजीकृत करना होगा htpasswd

इससे पहले कि हम ऐसा करते हैं, मैं आपको सलाह दूंगा कि आप /etc/ftpusersकुछ ऐसे उपयोगकर्ताओं को परिभाषित करें, जिन्हें ftp के साथ जुड़ने की अनुमति नहीं है। मुझे लगता है कि यह केवल स्थानीय उपयोगकर्ताओं के लिए है और आभासी उपयोगकर्ताओं के लिए नहीं है, लेकिन केवल इस फ़ाइल में निहित नाम का चयन न करें।

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

अब हमें एक नई लाइन जोड़ने की जरूरत है /etc/vsftpd.conf

chroot_list_enable=YES

इसका अर्थ है कि आपके उपयोगकर्ता को उनके फ़ोल्डर में रखा जाएगा (जेल के रूप में) उपयोगकर्ताओं को / etc / में

vsftpd.chroot_list

चलिए इस फाइल को बनाते हैं और हमारे उपयोगकर्ता को जोड़ते हैं, फाइल एक सरल रेखा है जिसमें "थीडमिन" होता है। प्रति पंक्ति एक उपयोगकर्ता जोड़ें। इसका मतलब है कि आपको /var/www/theadminफ़ोल्डर बनाने की आवश्यकता नहीं है , उपयोगकर्ता लॉगिन करेगा और शुरू करेगा /home/vsftpd

सर्वर को पुनरारंभ करें और आप कर रहे हैं!


यह पहले से ही बहुत अनम्य है क्योंकि यह स्थानीय_रूप = / var / www / $ USER को लागू करता है। यह मुझे एक उपयोगकर्ता या उपयोगकर्ताओं के लिए एकल निर्देशिका निर्दिष्ट करने की अनुमति नहीं देता है। इस निर्देशिका में सामान्य रूप से क्लाइंट के आधार पर अलग-अलग उद्देश्य और स्थान होते हैं। हालांकि प्रतिक्रिया के लिए धन्यवाद।
Avenyet

0

हाँ, और लचीलेपन के लिए आप एक userconfig dir और फ़ाइल बना सकते हैं, mkdir /var/www/userconfsया जो भी आप userconfs का नाम बदलना चाहते हैं, उसके बाद एक विशिष्ट फ़ाइल बनाएँ

vi /var/www/userconfigs/ftpuseraccount

प्रकार के अंदर, local_root=/var/www(या जो भी आप dir द्वारा एक्सेस करना चाहते हैं) guest_username=www-data(फ़ाइल शीर्ष संपादन के ubuntu मालिक

अपडेट करने के बाद आपको vsftpd.conf को जोड़कर user_config_dir=/var/www/userconfigs(या जो भी आपने इसे प्रतिस्थापित किया है, यह खाता जो भी एसडीआर यो सूची का उपयोग करेगा)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.