अलग यूजर और रनिंग स्क्रीन के रूप में सूडो


167

आज पता चला है कि एक अलग उपयोगकर्ता के रूप में चल रहे स्क्रीन कि मैं sudo काम नहीं करेगा!

अर्थात

ssh bob@server         # ssh into server as bob
sudo su "monitor" -
screen                 # fails: Cannot open your terminal '/dev/pts/0'

मेरे पास एक स्क्रिप्ट है जो "मॉनिटर" उपयोगकर्ता के रूप में चलती है। हम स्क्रीन पर आउटपुट देखने के लिए इसे एक स्क्रीन सेशन में चलाते हैं। समस्या यह है, हमारे पास कई उपयोगकर्ता हैं जो अपने स्वयं के खाते (यानी बॉब, जेम्स, सूसी, आदि) के साथ लॉग इन करते हैं ... और फिर वे "मॉनिटर" उपयोगकर्ता में sudo करते हैं। उन्हें "मॉनिटर" उपयोगकर्ता तक पहुंच प्रदान करना सवाल से बाहर है।


13
क्या यह त्रुटि है जो आपको मिल रही है? "अपना टर्मिनल नहीं खोल सकते '/ dev / pts / 0' - कृपया जाँच करें।"
जिम

हाँ एक thats। मैं समझता हूं कि ऐसा क्यों हो रहा है लेकिन क्या कोई समाधान है?
भाग्य विधा

4
आपके आदेशों पर एक टिप्पणी - मैं लोगों को भागते हुए देखता रहता हूं sudo su "user" -। उपयोग क्यों नहीं sudo -u user -s?
एंड्रयू आइलेट

2
@Jim: +1 लापता त्रुटि संदेश की आपूर्ति के लिए।
डेनिस विलियमसन

1
ज्यादातर लोग मुझे जानते हैं sudo su- मुझे लगता है कि मुझे लगता है कि लोगों को इसकी आदत है (मेरे मामले में ऐसा इसलिए है क्योंकि आपको किसी भी सूडो फ्लैग को जानने की आवश्यकता नहीं है sudo su- मुझे नहीं लगता कि मैंने कभी सूडो मेन्यू पढ़ा है :)
voretaq7

जवाबों:


245

स्क्रीन लॉन्च करने से पहले script /dev/nullआपको उपयोगकर्ता के रूप में चलाने की कोशिश करें su- इसकी एक यहूदी बस्ती थोड़ा हैक है, लेकिन इसे स्क्रीन को खुश करना चाहिए।


5
पुन: सुरक्षा निहितार्थ, किसी को भी मुझे पता नहीं है (लेकिन इसका मतलब यह नहीं है कि कोई भी नहीं हैं :) - IIRC यह एक नया टर्मिनल डिवाइस खोलने वाले "स्क्रिप्ट" के साइड-इफेक्ट पर निर्भर करता है (जैसा कि उपयोगकर्ता इसे लागू करता है) , और जब से आप स्क्रिप्ट के आउटपुट को / dev / null में भेज रहे हैं, तो कैप्चर करने के लिए कुछ भी नहीं है। यह निश्चित रूप से उपयोगकर्ताओं को tty समूह (IMHO) में जोड़ने की तुलना में अधिक सुरक्षित है
voretaq7

2
यदि आप यूनिक्स सिस्टम प्रशासक हैं, तो @nalply स्पष्ट रूप से आपको कई गोले नहीं मिलने चाहिए - जो कहा scriptजाता है, लॉन्च करने के लिए उपयोग किया जा सकता है screen। फिर आपको केवल दो बार (एक बार के लिए screen, एक बार su) बाहर निकलना होगा । (यह कुछ ऐसा है जो scriptमैन पेज आपके लिए स्पष्ट कर सकता है, यदि आप इसे पढ़ने के लिए समय लेते हैं ...)
voretaq7

10
या बस चलाओ sudo -u bob script -q -c 'screen -dr myscreen' /dev/null। तब आपके पास से बाहर निकलने / अलग होने के लिए केवल एक टर्मिनल होता है।
एंडी शुलमैन

4
धन्यवाद, इसने मुझे बचा लिया। लेकिन यह इसे ठीक क्यों करता है? मैं जो समझता हूं, वह सब कुछ stdout से ... कहीं भी प्रिंट करता है। और वह किसी तरह स्क्रीन को ठीक करता है।
सूदो

3
@sudo अपनी बात करने के लिए अपना scriptस्वयं का tty डिवाइस खोलता है, जो उस उपयोगकर्ता के स्वामित्व में है जो इसे चलाता है (देखें /devऔर आपके चलने के बाद आपको दिखाई देगा script)। screenफिर उस tty डिवाइस को पकड़ लेता है (जो चल रहे उपयोगकर्ता के स्वामित्व में है, screenइसलिए इसे एक्सेस करने में कोई परेशानी नहीं है)। यह कुल हैक काम है, लेकिन यह काम करता है। मेरी कुछ मशीनों को देखते हुए ऐसा प्रतीत होता है कि स्क्रीन के नए संस्करण सेतु-मूल को स्थापित करने के लिए प्रतीत होते हैं, जो काम भी करता है, लेकिन इसका मतलब है कि आपके पास एक और सेतु-रूट बाइनरी है जो चारों ओर तैर रहा है, जो कुछ लोगों को उचित रूप से असहज बनाता है।
voretaq7

33

मैं screenउस उपयोगकर्ता (उपयोगकर्ता) के लिए एक रैपर फ़ंक्शन का उपयोग कर रहा हूं जो मैं sudo suकर रहा हूं । यह रैपर फ़ंक्शन है जो मैंने उपयोगकर्ता को जोड़ा है ~/.bashrc:

फंक्शन स्क्रीन () {
  / usr / bin / script -q -c "/ usr / bin / screen $ {*}" / dev / null
}

यह मुझे उन सभी विकल्पों और मापदंडों का उपयोग करने की अनुमति देता है screenजिनके लिए मैं उपयोग करना चाहता हूं। मैं इस कार्य को प्रणालीबद्ध तरीके से करने पर विचार कर रहा हूं।


1
अच्छी तरह से काम। इस सिस्टम-वाइड को चाहने वालों के लिए, मैं इसे /etc/bash.bashrc पर जोड़ने की सलाह देता हूं - सभी उपयोगकर्ताओं के लिए काम करता है।
Someguy123

2
यह सही ढंग से स्क्रीन करने के लिए तर्कों को उद्धृत नहीं करेगा, अन्यथा एक अच्छा समाधान।
अगस्त

7

यह मानते हुए कि वे होस्ट में वैसे भी SSH कर रहे हैं, आप प्रत्येक उपयोगकर्ता के लिए सार्वजनिक ssh कुंजियाँ जोड़ सकते हैं जिन्हें ~ मॉनिटर / .ssh / अधिकृत_की फ़ाइल में मॉनिटर खाते तक पहुँचने की आवश्यकता है। फिर प्रत्येक उपयोगकर्ता की रिमोट मशीन पर वे चल सकते हैं

ssh -t monitor@remote.machine स्क्रीन -RD


यह एक और अच्छा तरीका है - आपको अधिकृत कुंजी फ़ाइल में मजबूर कमांड को निर्दिष्ट करना होगा हालांकि (प्रति के रूप में "उन्हें" मॉनिटर 'उपयोगकर्ता तक पहुंच देना "ऊपर दिए गए प्रश्न से बाहर है) - मजबूर कमांड उन्हें सिर्फ तक सीमित कर सकता है स्क्रीन सेशन संलग्न करना)
voretaq7

2
मुझे यकीन नहीं था कि मेरे जवाब में इसे कैसे संबोधित किया जाए, क्योंकि उन्होंने कहा कि "उन्हें पहुंच प्रदान करना ... सवाल से बाहर है", लेकिन यह भी कहा "... वे 'मॉनिटर' उपयोगकर्ता में sudo"। लेकिन मैं सहमत हूं, अधिकृत_की में कमांड प्रतिबंध को ध्यान में रखना चाहिए।
एलेक्स

7

यह मानते हुए कि हम इस त्रुटि के बारे में बात कर रहे हैं:

$ sudo su - bob
$ screen
Cannot open your terminal '/dev/pts/5' - please check.

यहाँ एक लाइनर है (उदाहरण के लिए "उर्फ गोबोब" के रूप में इस्तेमाल किया जा सकता है):

sudo su - bob -c "script -c bash /dev/null"'

स्पष्टीकरण:

यह उपयोगकर्ता बॉब के रूप में एक शेल (लॉगिन शेल की तरह) शुरू करेगा। उपयोगकर्ता बॉब शुरू होता है script, जिसे एक बैश आह्वान करने के लिए कहा जाता है (डैश या ksh हो सकता है ...) और सत्र की एक प्रति फेंक दी जाती है।


0

संभवतः प्रश्न में डिवाइस पर अनुमतियों को बदलना होगा या उस समूह में मॉनिटर को जोड़ना होगा, जिसके पास उस डिवाइस को पढ़ने की अनुमति है, यह मेरा पहला झुकाव होगा। लेकिन आपको ऐसा करने के सुरक्षा निहितार्थ को तौलना होगा।


0

तुम कहते हो:

sudo su "monitor" -

मैं ट्रेलिंग डैश के बारे में सोच रहा हूं। मैं आमतौर पर करता हूं:

sudo su - username

पानी का छींटा (प्रति सु मैन पेज) सु को "शेल को एक लॉगिन शेल बनाने के लिए" बताता है। इसका मतलब है कि यह सभी सामान्य शेल स्टार्टअप स्क्रिप्ट को स्रोत करेगा और PATH और HOME जैसी चीजों को ठीक से सेट करेगा।


3
नहीं। sudo su - usernameऔर sudo su username -यही काम करो।
टिम लुडविंस्की

-4

मैंने बस इस समस्या को मारा। सूडो chmod +rw $(tty)चलाने से पहले इसे हल किया । इस समाधान के साथ समस्या यह है कि कोई भी कनेक्ट कर सकता है और उसके बाद आपके टर्मिनल पर जा सकता है।


2
एक महान समाधान की तरह लगता है।
इवान कैरोल

10
@EvanCarroll यह एक महान समाधान है, उस हिस्से को छोड़कर, जहां यह पूरी दुनिया को अपने टर्मिनल तक पढ़ने और लिखने की सुविधा देता है । बस एक मामूली सुरक्षा समस्या है - कोई भी कार्यक्रम इस बात की परवाह नहीं करेगा, सिवाय इसके कि पासवर्ड स्वीकार करने से पहले टर्मिनल सुरक्षा की जाँच करने के लिए कुछ भी हो ( gpgउदाहरण के लिए)। और निश्चित रूप से वह कभी भी दुर्भावनापूर्ण उपयोगकर्ताओं के साथ एक प्रणाली पर नहीं होगा जो ttyपासवर्ड को देखेगा और
सूँघेगा

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