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


245

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

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

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

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

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

जवाबों:


354

आप ऐसा कर सकते हैं 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

4
क्या आप कृपया इसे बस के साथ suभी जोड़ सकते हैं ?
रतौ .77

2
यह मुझसे पासवर्ड मांगता है :-(
इवानवघन

1
@IanVaughan, डिफ़ॉल्ट कॉन्फ़िगरेशन (sudo का) के साथ, आपको तब तक पासवर्ड मांगा जाएगा जब तक आप इसे रूट के रूप में नहीं चलाते। आप "एक पासवर्ड की आवश्यकता के बिना उपयोगकर्ता बी के रूप में cmd ​​C चलाने के लिए उपयोगकर्ता A को अनुमति देने के लिए" sudo को कॉन्फ़िगर कर सकते हैं। सहायता देखें ।ubuntu.com
community/

1
रूट के रूप में इसे चलाते समय मुझे पासवर्ड के लिए कहा जाता है। कोई सुझाव?
नैट

1
@NamGVU इस बात को ध्यान में रखता है कि आदेश मायने रखता है। यदि आपके sudoers में एक नियम है जो आपके उपयोगकर्ता के लिए अन्य अनुमतियाँ सेट करता है, या एक समूह जिसका आप सदस्य हैं, जो आपके NOPASSWD नियम को ओवरराइड करेगा।
गीरा

100

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

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

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


5
मुझे sudoशुरुआत में जोड़ने की जरूरत थी अन्यथा उसने मुझसे मेरा पासवर्ड मांगा।
इवनविघ्न

2
यह निश्चित रूप से बिना काम नहीं करता है sudo। उदाहरण के लिए, सुडो के साथ यह काम करता है: sudo su - www-data -c "touch /tmp/test"सफलतापूर्वक www-data
rubo77

"सु" का उपयोग करने के लिए आपको रूट पासवर्ड की आवश्यकता होती है, इससे बचने के लिए "सुडो" की बात है। यदि आपके पास ऊपर "सु" का उपयोग करके रूट पासवर्ड है, तो ठीक काम करना चाहिए।
शमूएल undसलंद

6

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

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

उपयोग:

ps -ef | grep <command-name>

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

ps aux | grep <command-name>

लिनक्स यूजर्स ps aux का उपयोग कर सकते हैं।
डीन हॉवेल

@DeanHowell; सच है, लेकिन मैक उपयोगकर्ता "ps -ef" का उपयोग नहीं कर सकते हैं और "ps aux" बीएसडी विकल्प हैं, केवल एक संगतता सुविधा के रूप में उपलब्ध है जबकि "ps -ef" मानकीकृत यूनिक्स / POSIX विकल्प है।
शमूएल undslund

2

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

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