BASH स्क्रिप्टिंग, सिंगल कमांड के लिए www-data के लिए su


26

मैं इस ब्लॉग पोस्ट में वर्णित के रूप में तोड़फोड़ भंडार और संबंधित वेबसाइटों के निर्माण को स्वचालित करने पर काम कर रहा हूं । मैं उस हिस्से के आसपास के मुद्दों में भाग रहा हूं जहां मैं निम्नलिखित कमांड को चलाने के लिए www-data उपयोगकर्ता के लिए su करता हूं:

svnadmin create /svn/repository

स्क्रिप्ट की शुरुआत में एक चेक होता है जो यह सुनिश्चित करता है कि यह रूट या sudo के रूप में चल रहा है, और उसके बाद सब कुछ रूट के रूप में चलाने के लिए आवश्यक है। वहाँ एक अच्छा तरीका है कि www-data के रूप में एक कमांड चलाने के लिए और फिर खत्म करने के लिए रूट पर वापस जाएं?

जवाबों:


24

बस su - www-data -c 'svnadmin create /svn/repository'रूट द्वारा चलाए जा रहे अपने स्क्रिप्ट में उपयोग करें। ताकि www-data उपयोगकर्ता द्वारा केवल यह कमांड चलाया जाए।


भविष्य के दर्शकों के लिए अपडेट करें :

यदि आपको कोई "This account is currently not available"त्रुटि मिलती है , तो उपयोग करने पर विचार करें:

su - www-data -s /bin/bash -c 'svnadmin create /svn/repository'

(@Petr उपयोगकर्ता के लॉगिन नीति -sको समायोजित करने के लिए ध्वज के बारे में मूल्यवान उल्लेख www-data)


1
हाँ, ऐसा लगता है कि मैं स्क्रिप्टिंग का एक बुनियादी नियम भूल गया ... RTFM। धन्यवाद!
ब्रेंडन दुगन

15
यह कोशिश करते हुए, मुझे त्रुटि मिलती हैThis account is currently not available.
rubo77

मुझे भी यह त्रुटि मिलती है, लेकिन नीचे दिए गए futbolsalas15 का जवाब ठीक काम करता है।
एंड्रयू

18
su - www-data -s /bin/bash -c 'your_command'इस काम को करने के लिए उपयोग करें । उपयोगकर्ता www-डेटा में शेल है /usr/sbin/nologinइसलिए -sपैरामीटर के बिना यह त्रुटि संदेश की ओर जाता है।
पेट्र

63

'Su' के साथ संभवतः एक पासवर्ड का अनुरोध है, और www-data में पासवर्ड नहीं है। मैं कमांड की सिफारिश करता हूं sudo:

 sudo -u www-data command

शर्त यह है कि आपका उपयोगकर्ता रूट होना चाहिए, या sudoers फ़ाइल में कॉन्फ़िगर होना चाहिए


4
वाह, यह चयनित उत्तर क्यों नहीं है? मुझे इसे खोजने के लिए बहुत लंबा रास्ता तय करना पड़ा।
कैप्टन हाइपरटेक्स्ट

3

उपयोग करें su:

   su [options] [username]

   The options which apply to the su command are:

   -c, --command COMMAND
       Specify a command that will be invoked by the shell using its -c.

2
यह ध्यान दिया जाना चाहिए कि र कमांड निष्क्रिय खातों (जैसे www-डेटा) वाले खातों के साथ काम नहीं करते हैं। आपको sudo का उपयोग करना होगा।
फ्रैंटम

2

2 संभव दृष्टिकोण :


1) sudoकमांड:

ज्यादातर मामलों में आपके पास sudoकमांड तक पहुंच होगी और इसलिए समाधान बस है:

sudo -u target_user target_command


2) suकमांड (यदि sudo स्थापित नहीं है। Ex. alpine-linux images): "

su - target_user -c 'target_command'

यदि आपको 'यह खाता वर्तमान में उपलब्ध नहीं है' त्रुटि प्राप्त होती है, तो उपयोगकर्ता के पास कोई लॉगिन (शेल एक्सेस) नीति नहीं होती है। यदि हां, तो उपयोग करने पर विचार करें:

su - target_user -s /bin/bash -c 'target_command'

( उपयोगकर्ता की नो लॉगिन नीति -sको समायोजित करने के लिए ध्वज के बारे में @Petr की बहुमूल्य टिप्पणी के आधार पर www-data)

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