Www-data के स्वामित्व / var / www पर उपयोगकर्ता अनुमतियाँ प्रदान करें


36

मेरे पास कुछ वेबसाइटों के लिए एक सरल वेब सर्वर सेटअप है, जिसमें कुछ लेआउट है:

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

मैंने पहले फ़ाइलों को प्रबंधित करने के लिए रूट उपयोगकर्ता का उपयोग किया है, और फिर उन्हें तब दिया गया www-dataजब मुझे किया गया था (वर्डप्रेस साइट्स, काम करने के लिए WP अपलोड के लिए आवश्यक)। यह शायद सबसे अच्छा तरीका नहीं है।

मैं एक अन्य उपयोगकर्ता बनाने का एक तरीका खोजने की कोशिश कर रहा हूं (इसे यूजर 1 कहता है) जिसे साइट 1 में फ़ाइलों को संपादित करने की अनुमति है, लेकिन साइट 2 नहीं है, और फ़ाइलों को 'स्वामित्व' होने से नहीं रोकता है www-data। क्या मेरे लिए ऐसा करने का कोई तरीका है?

जवाबों:


70

यदि हम site1 के स्वामित्व की जांच करते हैं, तो हम कुछ ऐसा पाएंगे,

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

इसका मतलब है कि निर्देशिका उपयोगकर्ता रूट, समूह रूट के स्वामित्व में है। जबकि उपयोगकर्ता रूट ने निर्देशिका को लिखने की अनुमति (प्लस पढ़ने और अनुमतियों को निष्पादित) की है, समूह रूट ने केवल अनुमतियों को पढ़ा और निष्पादित किया है।

हम समूह के स्वामित्व को दूसरे (नए) समूह में बदलना चाहेंगे और उस विशेष समूह में उपयोगकर्ता 1 को जोड़ेंगे। हम उस विशेष समूह को भी लिखित अनुमति देंगे।

एक नया समूह बनाएं,

sudo addgroup site1

नए बनाए गए समूह में user1 जोड़ें,

sudo adduser user1 site1

जाँचें कि user1 वास्तव में उस समूह में है,

groups user1

आउटपुट कुछ इस तरह की एक सूची होनी चाहिए,

user1 : <other-groups> site1

अब हम आपकी इच्छित निर्देशिका के समूह के स्वामित्व को बदल सकते हैं।

sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1

इस नए समूह के मालिक को अनुमति दें,

sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

जांचें कि सभी परिवर्तन वास्तव में हैं,

ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/

इसलिए, निर्देशिका अब उपयोगकर्ता रूट, समूह साइट 1 के स्वामित्व में है। दोनों उपयोगकर्ता रूट और समूह साइट 1 ने लेखन अनुमति (प्लस पढ़ें और अनुमति निष्पादित करें) निर्देशिका के लिए है। Group1 से संबंधित कोई भी उपयोगकर्ता उस समूह को दिए गए सभी विशेषाधिकारों का आनंद उठाएगा।

अब user1 के रूप में लॉगिन करें, साइट 1 निर्देशिका में जाएं और उस निर्देशिका में एक फ़ाइल बनाने का प्रयास करें,

echo "My User1 Site" > index.html 
bash: index.html: Permission denied

यह प्रायः विफल रहा क्योंकि प्रायः user1 का प्राथमिक समूह साइट 1 नहीं है। इसलिए, उस समूह में परिवर्तन करें।

newgrp - site1

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

संपादित करें

इसके अलावा, जैसा कि टिप्पणी में dan08 द्वारा बताया गया है , आपको साइट -1 समूह में www-data जोड़ने की आवश्यकता है।

sudo adduser www-data site1

कई (सभी नहीं) वितरण पर, www-data वह उपयोगकर्ता है जिसके तहत Apache वेब सर्वर चलता है। इसका अर्थ यह भी है कि Apache द्वारा किया गया सब कुछ (विशेष रूप से PHP स्क्रिप्ट सहित) डिफ़ॉल्ट रूप से उपयोगकर्ता www-data (और समूह www-data) की अनुमतियों के साथ किया जाएगा। वर्डप्रेस www-data का उपयोग फाइल लिखने के लिए करता है।

यदि आप देखना चाहते हैं कि वेब सर्वर अपाचे कैसे चल रहा है, तो कमांड जारी करें,

ps aux | grep apache2 | less

1
आपको साइट -1 समूह में www-data भी जोड़ना होगा। वर्डप्रेस वेब इंटरफेस में फाइल अपलोड और बदलते समय। बदलाव Apache द्वारा www-data उपयोगकर्ता का उपयोग करके किए जाते हैं। इसलिए अधिकांश समय में विशेषाधिकारों को पढ़ना पर्याप्त नहीं है।
दान

3
Permission deniedसंदेश "प्राथमिक समूह" के कारण नहीं है, लेकिन यदि उपयोगकर्ता ने अभी तक वास्तव में उस समूह में किया जा रहा है (जहाँ तक ओएस का संबंध है)। यदि आप लॉग आउट करते हैं और वापस आते हैं, तो यह अपेक्षित (बिना चलने के newgrp - site1) काम करेगा ।
0b10011

वास्तव में किस प्रकार इस देने से अलग होगा www-dataयदि आप अंत में जोड़ने के लिए होने समूह लिखने की अनुमति www-dataके लिए site1वैसे भी?
मैट

@MattBorja आपकी क्वेरी बहुत स्पष्ट नहीं है। क्या आप पूछ रहे हैं कि www-data' write permissions? If that is the question, www-data नाम के समूह को देने में क्या गलत है 'एक समूह नहीं है, यह एक उपयोगकर्ता है। कृपया मुझे बताएं कि क्या मैंने आपके प्रश्न को गलत समझा।
मसरूर

मुझे लगता है, यह सुरक्षित कॉन्फ़िगरेशन नहीं है क्योंकि उपयोगकर्ता php स्क्रिप्ट के माध्यम से एक-दूसरे की साइटों तक पहुंच सकते हैं, उदाहरण के लिए, एक php फ़ाइल प्रबंधक।
क्यूडिनार

7

दो समूह बनाएं: site1grpऔरsite2grp

sudo groupadd site1grp && sudo groupadd site2grp

www-dataदोनों समूहों में जोड़ें ।

sudo adduser www-data site1grp && sudo adduser www-data site2grp

User1 और user2 को उचित समूहों में जोड़ें

sudo adduser user1 site1grp && sudo adduser user2 site2grp

अपने साइट फ़ोल्डरों की अनुमति बदलें ताकि उपयोगकर्ता स्वामी www-डेटा और समूह स्वामी उपयुक्त समूह हो

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

अब www-dataदोनों साइटों पर उपयोगकर्ता और समूह की अनुमति है और प्रत्येक उपयोगकर्ता के पास अपनी संबंधित साइट के लिए समूह की अनुमति है।


4

उन लोगों के लिए जिनके पास अपने होम फोल्डर के तहत वर्डप्रेस रूट फ़ोल्डर है:

Ubuntu / अपाचे

  1. अपने उपयोगकर्ता को www-data group में जोड़ें:

    क्रेडाई अनुदान www-data समूह को लिखने की अनुमति देता है

    आप usermodअपने उपयोगकर्ता को कॉल करना चाहते हैं । तो यह होगा:

    sudo usermod -aG www-data yourUserName
    

    मान लिया www-dataसमूह मौजूद है

  2. अपने उपयोगकर्ता की जाँच करें www-dataसमूह में है:

    groups yourUserName
    

    आपको कुछ इस तरह मिलना चाहिए:

    yourUserName : yourUserGroupName www-data
    

    yourUserGroupName आमतौर पर उपयोगकर्ता नाम के समान होता है

  3. अपने उपयोगकर्ता के स्वामित्व को रखते हुए फ़ोल्डर के समूह स्वामित्व को पुन: बदल दें

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. निर्देशिका को अपने WebSiteFolder में बदलें

    cd yourWebSiteFolder
    
  5. लिखने की अनुमति सक्षम करने के लिए फ़ोल्डरों और उप-फ़ोल्डरों के पुनरावर्ती समूह में परिवर्तन करें:

    find . -type d -exec chmod -R 775 {} \;
    

    के मोड /home/yourUserName/yourWebSiteFolder/'से बदल 0755 (rwxr-xr-x)करने के लिए0775 (rwxrwxr-x)

  6. लिखने की अनुमति को सक्षम करने के लिए फ़ाइलों और उप-फ़ाइलों के समूह में परिवर्तन

    find . -type f -exec chmod -R 664 {} \;
    

    परिणाम कुछ इस तरह दिखना चाहिए:

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    के बराबर:

    chmod -R ug+rw foldername
    

    अनुमतियां 664 या 775 जैसी होंगी।


3

आपको एक नया समूह बनाना है, तथाकथित "नया उपयोगकर्ता" के लिए, और फिर उस समूह में www-डेटा और "नया उपयोगकर्ता" जोड़ें:

sudo gpasswd -a new_user new_group

तब आप स्वामी को इस new_userसमूह में बदल सकते हैं new_group:

sudo chown -R new_user:new_group /var/www/site1

फिर आपको साइट 1 पर समूह स्तर की पहुंच प्रदान करनी होगी। www-data अभी भी साइट को एक्सेस करने में सक्षम होगा, क्योंकि यह new_group का है, जबकि new_user साइट 2 को एक्सेस नहीं कर पाएगा, क्योंकि वह www-data ग्रुप से संबंधित नहीं होगा, जो साइट 2 का मालिक है।


आपका उत्तर भ्रमित करने वाला है, "साइट 1 पर समूह स्तर पहुंच प्रदान करके", क्या आपका मतलब "साइट 1 के समूह को नए_ग्रुप में बदलना" या मोड बदलना है chmod? आपके उत्तर में उस मोड का कहीं भी उल्लेख नहीं है जो सुरक्षित होने (या चीजों को तोड़ने) का अंतर बना सकता है।
लेकेनस्टाइन

मेरा मतलब chmodOTHERS के लिए सभी अनुमतियों को रद्द करके मोड ( ) को बदलना था ।
एरिकोस

1

सभी फ़ाइलों को पहले से ही www-dataउपयोगकर्ता (आप इसे ls -slahकमांड के साथ जांच सकते हैं ) मान लें जो www-dataसमूह से संबंधित है (फ़ाइलों की सूची में उपयोगकर्ता नाम के बाद अगला कॉलम) आप बस www-dataइन फ़ाइलों को संपादित करने की अनुमति देने के लिए आपको उसी समूह में उपयोगकर्ता जोड़ सकते हैं

# usermod -aG www-data username

मौजूदा उपयोगकर्ता के लिए, या

# adduser username www-data

नव निर्मित के लिए

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