सवाल एक शेल स्क्रिप्ट चलाएं जिसके रूप में कोई अन्य उपयोगकर्ता नहीं है


मैं मुख्य यूबंटू खोल से एक अलग उपयोगकर्ता के रूप में एक स्क्रिप्ट चलाने के लिए चाहता हूं जिसमें कोई पासवर्ड नहीं है।

मेरे पास पूर्ण सुडो विशेषाधिकार हैं, इसलिए मैंने यह कोशिश की:

sudo su -c "Your command right here" -s /bin/sh otheruser

तब मुझे अपना पासवर्ड दर्ज करना होगा, लेकिन मुझे यकीन नहीं है कि क्या वह स्क्रिप्ट अब उस उपयोगकर्ता के तहत चल रही है।

मैं कैसे पुष्टि कर सकता हूं कि स्क्रिप्ट वास्तव में उस उपयोगकर्ता के तहत चल रही है?


206
2018-05-13 10:55


मूल




जवाब:


आप इसके साथ कर सकते हैं su या sudo, दोनों के लिए कोई ज़रूरत नहीं है।

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

के प्रासंगिक भागों man sudo:

-H   The -H (HOME) option requests that the security policy set
     the HOME environment variable to the home directory of the
     target user (root by default) as specified by the password
     database.  Depending on the policy, this may be the default
     behavior.
-u user     The -u (user) option causes sudo to run the specified
      command as a user other than root.  To specify a uid
      instead of a user name, use #uid.  When running commands as
      a uid, many shells require that the '#' be escaped with a
      backslash ('\').  Security policies may restrict uids to
      those listed in the password database.  The sudoers policy
      allows uids that are not in the password database as long
      as the targetpw option is not set.  Other security policies
      may not support this.

su यदि आप रूट हैं तो पासवर्ड प्रदान किए बिना उपयोगकर्ता को केवल स्विच कर सकते हैं। कालेब का जवाब देखें 

आप संशोधित कर सकते हैं /etc/pam.d/su अनुमति देने के लिए फ़ाइल su पासवर्ड के बिना यह देखो उत्तर

यदि आपने अपनी ऑथ फ़ाइल को निम्न में संशोधित किया है, तो कोई भी उपयोगकर्ता जो समूह का हिस्सा था somegroup सकता है su सेवा मेरे otheruser पासवर्ड के बिना

auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = otheruser
auth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

फिर टर्मिनल से परीक्षण करें

rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser

287
2018-05-13 11:20



क्या आप कृपया इसे जोड़कर जोड़ सकते हैं su भी? - rubo77
यह मुझे पासवर्ड के लिए पूछता है :-( - IanVaughan
@IanVaughan, डिफ़ॉल्ट कॉन्फ़िगरेशन (सुडो के) के साथ, आपको पासवर्ड के लिए तब तक पूछा जाएगा जब तक कि आप इसे रूट के रूप में नहीं चलाते। आप सूडो को कॉन्फ़िगर कर सकते हैं "उपयोगकर्ता ए को पासवर्ड की आवश्यकता के बिना उपयोगकर्ता बी के रूप में cmd ​​C चलाने की अनुमति दें"। देख help.ubuntu.com/community/Sudoers - geirha
रूट के रूप में इसे चलाने पर मुझे पासवर्ड के लिए संकेत दिया जाता है। कोई सुझाव? - Nate
@Nate, क्या आपने सूडोर्स फ़ाइल में कुछ बदलाव किए हैं। डिफ़ॉल्ट कॉन्फ़िगरेशन रूट की आवश्यकता के बिना किसी को भी किसी के रूप में चलाने की अनुमति देता है। - geirha


यदि आप सुडो के बजाय सु का उपयोग करना चाहते हैं, तो मेरा मानना ​​है कि आप इस तरह कुछ उपयोग कर सकते हैं:

su - <username> -c "<commands>"
  • -  निर्दिष्ट उपयोगकर्ता का लॉगिन अनुकरण करेगा
  • -c  यह बताता है कि आप एक कमांड चलाने के लिए चाहते हैं

ps। दुर्भाग्य से मैं इस विधि के साथ आरवीएम का उपयोग कर रूबी स्थापित करने में सक्षम नहीं हूं, लेकिन शायद यह संबंधित नहीं है।


87
2018-04-07 00:01



मुझे जोड़ने की जरूरत है sudo शुरुआत में अन्यथा उसने मुझे अपने पासवर्ड के लिए कहा। - IanVaughan
यह निश्चित रूप से बिना काम नहीं करता है sudo। सुडो के साथ यह काम करता है, उदाहरण के लिए: sudo su - www-data -c "touch /tmp/test"www-data के रूप में सफलतापूर्वक फ़ाइल बनाई गई - rubo77
"Su" का उपयोग करने के लिए आपको रूट पासवर्ड की आवश्यकता है, "सुडो" का बिंदु उस से बचने के लिए है। यदि आपके पास उपरोक्त के रूप में "su" का उपयोग करके रूट पासवर्ड है तो ठीक काम करना चाहिए। - Samuel Åslund


ऊपर दिए गए उत्तर वास्तव में मेरे लिए उपयोगी हैं लेकिन वास्तविक प्रश्न का उत्तर देने के लिए ...

मैं कैसे पुष्टि कर सकता हूं कि स्क्रिप्ट वास्तव में उस उपयोगकर्ता के तहत चल रही है? -

उपयोग:

ps -ef | grep <command-name>

आउटपुट में आपकी स्क्रिप्ट और वास्तविक उपयोगकर्ता इसे निष्पादित करना चाहिए। बीएसडी जैसी प्रणालियों पर लोग, उदा। मैक के साथ समान जानकारी मिल सकती है:

ps aux | grep <command-name>

6
2018-05-11 18:30





मुझे भी यही समस्या थी। बस कमांड टाइप करें screen -dmS testscreen यह आपके गैर-सुडो उपयोगकर्ता खाते पर एक अलग स्क्रीन तैयार करेगा और फिर आप इसे लॉग कर सकते हैं और जांच सकते हैं कि यह स्क्रीन वहां है या नहीं screen -ls


2
2018-05-06 08:35