लिनक्स ubuntu पर www-data के रूप में चलाने के लिए PHP CLI कैसे कॉन्फ़िगर करें?


12

मैं अपने ubuntu पर एक symfony2 आवेदन है। सिम्फनी में बहुत सारे उपयोगी कंसोल कमांड हैं (जैसे php app/console cache:clearया php app/console assets:install web)।

समस्या यह है कि यदि मैं उन्हें rootउपयोगकर्ता के रूप में चलाता हूं तो नई जनरेट की गई फ़ाइलों में root:rootउपयोगकर्ता / समूह होंगे, और यदि मैं अपनी वेबसाइट पर आरोप लगाता हूं तो मुझे त्रुटियां मिलती हैं (becouse apache इन फ़ाइलों को पढ़ / संशोधित नहीं कर सकता -> उनके पास होना चाहिए www-data:www-data)।

रनिंग chown www-data:www-dataसमस्या को हल करता है, लेकिन इसे हर बार चलाने से मुझे स्पष्ट होता है कि मेरा कैश समाधान नहीं है।

मैं PHP CLI को हमेशा www-data उपयोगकर्ता / समूह के रूप में चलाने के लिए कैसे कॉन्फ़िगर कर सकता हूं?

या

मैं एक डिफरेंट यूजर के रूप में कमांड कैसे चला सकता हूं (रूट होने के नाते, इसे www-डेटा के रूप में चलाएं)?

जवाबों:


23

एक बार किसी अन्य उपयोगकर्ता के रूप में एक कमांड चलाएँ:

sudo -u www-data php script.php

यदि आप हैं, तो यह काम करना चाहिए root

हमेशा की तरह php चलाने के लिए www-data, कई व्यवसाय हैं। आप एक साधारण आवरण आवरण बना सकते हैं। यदि /usr/bin/phpकेवल एक सॉफ्ट-लिंक /usr/bin/php5या इसके समान है, जो इसे सरल बनाता है। बस सॉफ्ट-लिंक (फ़ाइल नहीं php5) को इस तरह से स्क्रिप्ट के साथ बदलें :

#!/bin/sh

sudo -u www-data php5 $*

return $?

हालांकि इसका परीक्षण नहीं किया गया है। यह भी ध्यान रखें कि यह हमेशा php5उपयोगकर्ता के रूप में चलाने की कोशिश करेगा www-data, भले ही उपयोगकर्ता ऐसा न हो rootऔर ऐसा करने की अनुमति न हो। और यह भी नहीं हो सकता है कि आप वास्तव में क्या चाहते हैं। कुछ इंस्टॉल की गई सेवाएं php निष्पादित करने की कोशिश करते समय समस्याओं में चल सकती हैं।

(संभवतः बेहतर) समाधान केवल इस बात पर लागू होता है कि रूट को सॉफ्ट-लिंक को /usr/bin/phpअकेला छोड़ना और स्क्रिप्ट को /root/binइसके स्थान पर रखना हो सकता है । फिर उस फ़ोल्डर को PATH के माध्यम से .bashrc, .profileया इसी तरह से जोड़ें। यदि आपके पास है /etc/skel/.profile, तो यह इंगित कर सकता है कि यह कैसे किया जाता है:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

एक बार जब यह अपने में है .bashrc, .profileया इसी तरह, हर नई खोल आप खोलना आप सीधे (+ x) में किसी भी निष्पादनयोग्य पर अमल करने की अनुमति देगा $HOME/bin( /root/binजड़ के लिए)।

संकेत: आप रैपर स्क्रिप्ट को कुछ नाम देना चाहते हैं, जैसे phpwwwकि आप स्पष्ट रूप से निर्दिष्ट करना चाहते हैं php script.phpया phpwww script.phpयह तय करना चाहते हैं कि आप नियमित या sudo'n php चाहते हैं।

एक अन्य समाधान एक साधारण उपनाम है। इसे अपने .bashrc, .profileया समान में रखें :

alias phpwww='sudo -u www-data php'

मजेदार, आधी सुनवाई बीत चुकी है और मैं फिर से अपने ही सवाल पर ठोकर खा गया =) लगता है जैसे मैं पिछली बार आपके जवाब को स्वीकार करना भूल गया था - मैंने अभी तय किया है कि, धन्यवाद!
सितंबर

उपनाम विधि बहुत खूनी समझ में आता है, और इसने मेरी सटीक समस्या हल कर दी
RedactedProfile

1

## linux (IRC Freenode.net) पर mwargh द्वारा उत्तर दिया गया


एक डिफरेंट यूजर के रूप में कमांड चलाने के लिए -> उस यूजर को स्विच करने के लिए स्विच करें:

su www-data

मैं अभी भी रुचि रखता हूँ (यदि संभव हो तो) PHP को कॉन्फ़िगर करने में ताकि चल रहा हो:

root@mycomp php (php script creating a file)

रूट उपयोगकर्ता के रूप में

www-data के साथ एक फ़ाइल बनाने में परिणाम होगा : www-data उपयोगकर्ता / समूह

(इस तरह मुझे अपने कमांड चलाने के लिए रूट से www-data पर स्विच नहीं करना होगा)


1

मैं www-data के स्वामित्व में / usr / bin / php बनाने की कोशिश करूंगा और सुसाइड की अनुमति देता हूं, जो कमांड को फाइल मालिक द्वारा निष्पादित करने के लिए मजबूर करता है। आप इसके साथ करेंगे:

chmod u+s /usr/bin/php

आप की तरह अष्टक नोटेशन:

chmod 4755 /usr/bin/php

हालाँकि, मुझे यह कहना चाहिए कि जब भी आप www-data को किसी चीज़ का मालिक बना रहे हैं, तो उसे एक असहज करना चाहिए, क्योंकि www-data खाते का बिंदु जितना संभव हो उतना कम है।


यही कारण है कि मैं
रीहा

1

अगर आपको php-fpm (FastCGI Process Manager) मिल गया है, तो आप
इसे विन्यास फाइल में स्थित कर सकते हैं (सेंटो के लिए कम से कम): /etc/php-fpm.d/www.conf
लाइन 39 में आप उपयोगकर्ता को सेट कर सकते हैं और 49 आप समूह सेट कर सकते हैं


यह लागू नहीं होता है php-cli, यह करता है?
रीहा

1

स्क्रिप्ट फ़ाइल बनाएँ:

touch /usr/bin/phpuid
chmod +x /usr/bin/phpuid

सामग्री जोड़ें:

#!/bin/bash

UIDX="#"`stat -c '%u' $1`
sudo -u $UIDX php5 $*

अपनी स्क्रिप्ट को रूट से चलाएं:

phpuid /path/to/script.php

या अपनी लिपियों में दुभाषिया का उपयोग करें

#!/usr/bin/phpuid
<?php
phpinfo();

नोट: डेबियन 7 पर परीक्षण करने के लिए आपको सुडो स्थापित करने की आवश्यकता हो सकती है

apt-get install sudo

script.php द्वारा बनाई गई सभी फाइलों में उस स्क्रिप्ट का समान यूआईडी होगा

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