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


87

मुझे केवल एक विशेष स्क्रिप्ट को चलाने की ज़रूरत है जो एक विशेष उपयोगकर्ता के रूप में है जिसके पास nologin/falseशेल इंगित है /etc/passwd

मैं स्क्रिप्ट को रूट के रूप में चलाऊंगा और यह किसी अन्य उपयोगकर्ता के रूप में चलना चाहिए। चल रहा है:

~# su -c "/bin/touch /tmp/test" testuser

काम करेगा, लेकिन मुझे परीक्षक के लिए एक वैध शेल की आवश्यकता है। मुझे पता है कि मैं पासवर्ड को निष्क्रिय कर सकता हूं passwd -d testuserऔर शेल को /bin/bashइस तरह से छोड़ सकता हूं थोड़ा सुरक्षित होगा लेकिन मुझे nologin/falseशेल की आवश्यकता होगी ।

मूल रूप से मुझे जो चाहिए crontabवह तब होता है जब हम एक विशेष उपयोगकर्ता के रूप में चलने के लिए नौकरियों को निर्धारित करते हैं, भले ही यह कोई भी हो nologin/false

ps मुझे यह थ्रेड एक्ज़ॉस्टिंग कमांड के रूप में एक नोगलिन उपयोगकर्ता के रूप में मिला , लेकिन मुझे नहीं पता कि मुझे उस स्क्रिप्ट को कैसे concatenateकमांड su -s /bin/sh $userकरना है जिसे मुझे चलाने की आवश्यकता है।

जवाबों:


119

किसी विशेष शेल को चलाने के लिए आप -s स्विच का उपयोग कर सकते हैं

su -s /bin/bash -c '/path/to/your/script' testuser

( sudoयदि पासवर्डविहीन testuserउपयोगकर्ता है तो ऊपर की ओर संकेत करें।)


अगर सु है तो क्या होगा root:root -rwsr-x---?
पैट्रिक

1
यदि उपयोगकर्ता के पास पासवर्ड नहीं है तो क्या होगा?
CMCDragonkai

3
@Wesley को पता चला कि आपको पासवर्ड रहित उपयोगकर्ता के लिए उस कमांड को चलाने के लिए रूट होने की आवश्यकता है।
CMCDragonkai

1
@lain, यदि उपयोगकर्ता के पास शेल नहीं होना चाहिए, तो कमांड से संबंधित प्रक्रिया बैश प्रक्रिया का बच्चा नहीं होनी चाहिए। इस प्रकार, आपको शेल को स्क्रिप्ट के साथ बदलने के लिए निष्पादन का उपयोग करना चाहिए। और यदि आप स्क्रिप्ट को init का बच्चा बनाना पसंद करते हैं, तो आप सिर्फ एक उदाहरण के रूप में उपयोग करते हैंsu -s /bin/bash -c 'exec /path/to/your/script &' test
Facundo Victor

1
चूँकि मैंने पिछले 20 मिनट काम करते हुए बिताए हैं कि उसी परिणाम का उपयोग करके कैसे प्राप्त किया जाए runuser, तो मैं यह su -s SHELLबताना चाहूँगा कि पैरामीटर रेंडरर कमांड बहुत ज्यादा बेकार है :) धन्यवाद Jan!
जिरका २१'१६ को

12

sudo -uयदि आपने इसे स्थापित किया है तो आप इसके साथ कर सकते हैं :

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

आप मापदंडों को कैसे पास करते हैं sudo -u apache whoami?
CMCDragonkai

@CMCDragonkai कमांड के बाद कोई भी पैरामीटर पास किया जाएगा। आप इसे "sudo [-u apache] [whoami <param1> <param2>]" की तरह सोच सकते हैं।
अप्रेंटिस ५

मुझे लगता है कि उपयोग sudo -uकरना संभवतः एक नॉलॉग उपयोगकर्ता के रूप में कमांड चलाने के लिए एक अच्छा विचार नहीं है, क्योंकि यह SUDO_USERउस वातावरण में उजागर करता है जो वास्तविक है जो कमांड को आमंत्रित करता है। शायद मैं इसे खत्म कर रहा हूं।
मेव

5

/ बिन / श को निष्पादित करने के तर्क के रूप में स्क्रिप्ट प्रदान करके:

su -s "/bin/sh /your/script/location" username

2

अभी अहसास हुआ :

su -s "/ bin / bash" -c "/ bin / touch / tmp / testuser" testuser

शायद एक बेहतर तरीका है!


0

वास्तव में, ऐसा करने का सबसे अच्छा तरीका रनर के माध्यम से है

विवरण के लिए मैन पेज देखें

इस उपकरण का उपयोग उस स्थिति से निपटने के लिए किया जाता है जैसा कि डेवलपर ने अपनी बोली में कहा था

जब भी कोई सेवा रूट के रूप में चल रही है और शेल का उपयोग करके यूआईडी को बदलना चाहता है तो इसे रनर का उपयोग करना चाहिए।

http://danwalsh.livejournal.com/55588.html

मैंने कई महलों में यह उत्तर दिया है, यदि आपको यह कष्टप्रद लगे तो मुझे क्षमा करें


कृपया लिंक रोट को रोकने के लिए लिंक-केवल उत्तर पोस्ट न करें। इसके बजाय, लिंक से सबसे प्रासंगिक जानकारी को अपने उत्तर में जोड़ें या वैकल्पिक रूप से, लिंक को उत्तर के बजाय टिप्पणी के रूप में पोस्ट करें। अधिक जानकारी के लिए यह serverfault.com/help/how-to-answer सहायता केंद्र लेख देखें।
फेडरिको गैली

@FedericoGalli सबसे अधिक प्रासंगिक जानकारी पहले से ही जोड़ी गई है, उपयोग को कॉपी और पेस्ट करने की आवश्यकता नहीं है, मैन पेज पर्याप्त जानकारी प्रदान करता है
Z-Y00

-1

उपयोगकर्ता निर्दिष्ट करने के लिए sudo -u का उपयोग करें। लक्ष्य उपयोगकर्ता के पर्यावरण चर भी सेट करने के लिए -i ध्वज का उपयोग करें।

sudo -i -u user command

1
यह देता हैThis account is currently not available.
knocte

-3

शेल -s और -c कमांड के साथ su कमांड का उपयोग करें। जैसा की नीचे दिखाया गया

 su  exec -l -c '/bin/bash /etc/update_conf.sh' -s /bin/bash

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