क्षमा करें, आपके पास sudo चलाने के लिए एक tty होना चाहिए


13

मैंने यह सवाल स्टैक ओवरफ्लो में पहले ही पूछ लिया था , लेकिन मुझे इसे यहाँ पोस्ट करने के लिए कहा गया है। तो वही कर रहे हैं।

मैंने अपने जावा प्रोग्राम का उपयोग करके इस कमांड को चलाया-

sudo -u <username> -S pwd

मुझे यह आउटपुट मिला-

command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo

मैंने संपादन / आदि / sudoers की कोशिश की, लेकिन यह पहले से ही शामिल है

<username>       ALL=(ALL)       NOPASSWD: ALL

फिर, मुझे पता चला कि यह निम्नलिखित कोड / in / sudoers पर टिप्पणी करके किया जा सकता है

# Defaults requiretty

इसके अलावा, डिफ़ॉल्ट रूप से, जब किसी अन्य उपयोगकर्ता के रूप में एक कमांड निष्पादित करने का प्रयास किया जाता है sudo, तो हमें अपना पासवर्ड प्रदान करना होगा। लेकिन इसे / etc / sudoers में निम्न परिवर्तन करके बदला जा सकता है-

Defaults targetpw

मेरा प्रश्न यह है कि क्या जावा में मेरे उपरोक्त कमांड को कहीं भी बिना किसी बदलाव के डिफ़ॉल्ट सेटिंग्स के द्वारा निष्पादित करना संभव है ?


1
क्या यही कारण है कि आप सूडो के लिए बल्कि वैकल्पिक विकल्प पूछ रहे थे ?
slhck

6
requirettyडिफॉल्ट द्वारा सक्षम होने पर डिस्ट्रो विशिष्ट लगता है। sudoअपने स्वयं के प्रलेखन के अनुसार यह "डिफ़ॉल्ट रूप से बंद है।"
मपी

जवाबों:


3

मुझे नहीं पता कि जावा में शेल कमांड कैसे चलाते हैं, लेकिन ssh कमांड के लिए -t विकल्प पर एक नज़र है

-t force pseudo-tty allocation.

यही कारण है कि जब मैं ssh पर रूट के रूप में कमांड चलाने की आवश्यकता होती है (सीधी रूट लॉगिन अक्षमता और sudo द्वारा आवश्यक tty)


1
हालांकि यह दृष्टिकोण पहली नजर में समस्या को हल कर सकता है, यह बिल्कुल स्पष्ट नहीं है कि यह प्रश्न से कैसे संबंधित है। क्या आप अधिक विवरण में बता सकते हैं?
पाबूक

1
किसी भी डिफ़ॉल्ट सेटिंग्स को बदलने की आवश्यकता के बिना समस्या को हल करने के लिए +1।
ल्यूक

1

मेरा प्रश्न यह है कि क्या जावा में मेरी उक्त कमांड को कहीं भी बिना किसी बदलाव के डिफ़ॉल्ट रूप से निष्पादित करना संभव है?

सुडो -उ -एस पीडब्ल्यूडी

संक्षिप्त जवाब नहीं है, आपको चीजों को अलग-अलग तरीके से करने के लिए सुडोल पाने के लिए सेटिंग्स को बदलना होगा।

sudo इसके लिए गलत टूल हो सकता है। सूडो के नियम सिस्टम प्रशासकों को उच्च विशेषाधिकार प्राप्त करने के लिए एक तरीका कॉन्फ़िगर करने में मदद करने के लिए हैं जो अतिरिक्त / अनजाने विशेषाधिकारों को प्राप्त करने के लिए दुरुपयोग करना मुश्किल है।

यदि आप विचार करते हैं कि सूडो आपके लिए क्या करती है:

  1. पहचान सत्यापित करने के लिए पासवर्ड के लिए संकेत देता है
  2. विशेषाधिकारों
  3. फिर वैकल्पिक रूप से किसी अन्य उपयोगकर्ता के रूप में विशेषाधिकार प्राप्त करें
  4. लॉग sudo का उपयोग पहुँच प्राप्त करने या कमांड चलाने के लिए किया जाता है

यदि आप चाहते हैं कि आपका जावा उन उपयोगकर्ताओं या आपके स्वयं के लिए पासवर्ड प्रदान किए बिना मनमाने उपयोगकर्ताओं के रूप में मनमाना आदेशों को चलाने के लिए है, तो आप अनिवार्य रूप से सूडो को प्रतिस्थापित कर रहे हैं। उस स्थिति में आपको दुरुपयोग रोकने के लिए अपने नियम बनाने चाहिए।

ऐसा करने के लिए मूल रूप से दो तरीके हैं:

  1. अपने जावा को उन्नत विशेषाधिकारों के साथ चलाएं और सावधानीपूर्वक ले लें और आपको वे विशेषाधिकार वापस दे दें जिनकी आपको आवश्यकता है (देखें सेट्विड () सेटवीड () सी चेक)।
  2. जब आप उन्हें चाहते हैं तो उन्नत विशेषाधिकार प्राप्त करने के लिए एक बाहरी कार्यक्रम चलाएं

# 1 के मामले में आपका जावा प्रोग्राम स्वयं प्रदर्शन कर रहा है जो सूडो करता है, और आपको दुरुपयोग से बचाने के लिए अपने स्वयं के नियमों को लागू करना चाहिए।

# 2 करने के लिए sudo के अलावा अन्य कार्यक्रम भी हैं। एक उदाहरण https://code.google.com/archive/p/exec-wrapper/downloads में पाया जा सकता है

यह आसान शेल स्क्रिप्ट एक अन्य कमांड (आमतौर पर एक स्क्रिप्ट) को चलाने के लिए एक सी प्रोग्राम बनाता है। फिर आप सी प्रोग्राम को एक बाइनरी पर संकलित करते हैं और उस रूट को सेट करते हैं और वास्तव में इसे किसी भी उपयोगकर्ता के लिए सेट किया जा सकता है। (मोड: 4555 और मालिक: रूट)

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

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