Cygwin में रूट उपयोगकर्ता / sudo समतुल्य है?


156

मैं साइगविन में बैश स्क्रिप्ट चलाने की कोशिश कर रहा हूं।

मुझे Must run as root, i.e. sudo ./scriptnameत्रुटियाँ मिलती हैं।

chmod 777 scriptname मदद करने के लिए कुछ नहीं करता है।

मैंने Cygwin पर sudo की नकल करने के तरीकों की तलाश की है, एक रूट उपयोगकर्ता को जोड़ने के लिए, क्योंकि "su" कॉल करने से त्रुटि का प्रतिपादन होता है su: user root does not exist, कुछ भी उपयोगी, और कुछ भी नहीं मिला है।

किसी के पास कोई सुझाव है?


हैलो केनबी, क्या आप हमें उस whatस्क्रिप्ट पर अधिक विवरण दे सकते हैं जिसे आप चलाने की कोशिश कर रहे हैं? एक साइबर शेल के अंदर 'सुडो' के बराबर नहीं है - राइट्स जीत उपयोगकर्ता से हैं जिन्होंने साइबरविन शेल लॉन्च किया है, इसलिए "सूदो अज्ञात कमांड" जैसी त्रुटियों से बचने के लिए काइलवैप्पड लिंक अच्छा है। आपके मामले में ऐसा लगता है कि यह उस स्क्रिप्ट के साथ एक विशिष्ट समस्या है जिसे आप निष्पादित करना चाहते हैं।
स्टेफानो

1
ईमानदारी से, यह लंबे समय से एक मुद्दा है, और मुझे वास्तव में याद नहीं है कि स्क्रिप्ट क्या थी। ब्याज के लिए धन्यवाद, यद्यपि।
केन बेलोज

जवाबों:


225

मैंने सुपरयूज़र पर इस सवाल का जवाब दिया लेकिन ओपी द्वारा अवहेलना किए जाने के बाद ही इस सवाल का एकमात्र जवाब था।

यहाँ Cygwin में अनुमतियों को बढ़ाने का उचित तरीका है, SuperUser पर मेरे स्वयं के उत्तर से कॉपी किया गया:

मुझे साइगविन मेलिंग सूची पर उत्तर मिला । commandसाइग्विन में विशेषाधिकारों के साथ चलने के लिए , cygstart --action=runasइस तरह से कमांड को प्राथमिकता दें :

$ cygstart --action=runas command

यह व्यवस्थापक पासवर्ड के लिए पूछते हुए एक विंडोज संवाद बॉक्स खोलेगा और यदि उचित पासवर्ड दर्ज किया गया है तो कमांड चलाएगा।

यह आसानी से स्क्रिप्टेड है, इसलिए जब तक ~/binआपके रास्ते में है। ~/bin/sudoनिम्नलिखित सामग्री के साथ एक फ़ाइल बनाएँ :

#!/usr/bin/bash
cygstart --action=runas "$@"

अब फ़ाइल को निष्पादन योग्य बनाएं:

$ chmod +x ~/bin/sudo

अब आप वास्तविक उन्नत विशेषाधिकार के साथ कमांड चला सकते हैं :

$ sudo elevatedCommand

आपको ~/binअपने पथ पर जोड़ने की आवश्यकता हो सकती है । आप Cygwin CLI पर निम्न कमांड चला सकते हैं, या इसे इसमें जोड़ सकते हैं ~/.bashrc:

$ PATH=$HOME/bin:$PATH

64-बिट विंडोज 8 पर परीक्षण किया गया।

आप उपरोक्त चरणों के बजाय इस आदेश के लिए एक उपनाम जोड़ सकते हैं ~/.bashrc:

# alias to simulate sudo
alias sudo='cygstart --action=runas'

12
बहुत बढ़िया जवाब। आपके बैश कोड (नीचे) में कुछ ट्विक्स के साथ, मैं कमांड लाइन से एक उन्नत कमांड चलाने में सक्षम था। यहाँ पर मुझे आपके कोड को बनाने के लिए आवश्यक बदलाव आया है: cat << 'EOF' > ~/bin/sudo\n #!/usr/bin/bash\n cygstart --action=runas "$@"\n EOF (मैं इस टिप्पणी में नई रूपरेखाएँ डालने का पता नहीं लगा सकता, इसलिए मैंने '\ n कोड में जोड़ दिया है)' PATH = 'का शेष भाग ठीक है। ।
josmith42

3
ओह मैं समझा! अगर मुझसे गलती नहीं हुई है, तो पाठ संपादक खोलने के बजाय, डिस्क पर फ़ाइल लिखने का आपका तरीका है। अच्छा आपका धन्यवाद! मुझे नहीं पता था कि बैश में हेरेडोस्क का उपयोग कैसे करें!
१०:४६ पर डॉटनचेन

8
इसके साथ समस्या यह है कि यह पूरी तरह से एक नई टर्मिनल विंडो (आमतौर पर conhost) बनाता है। आउटपुट वर्तमान टर्मिनल में इनबिल्ड नहीं है।
CMCDragonkai

1
चीजों को चलाने का एकमात्र तरीका lsयह है कि इसे लंबे समय तक चलने वाली प्रक्रिया में लपेटें जैसे कि मिनिटेट या बैश या जेड भी। लेकिन यह सब एक अलग टर्मिनल में दिखाई देता है। जो इस बिंदु पर, मैं अभी इसे GUI के माध्यम से CONEMU का उपयोग करके खोल सकता था।
CMCDragonkai

1
उद्धरण के बिना, यहां तक ​​कि उद्धृत तर्क फिर से रिक्त स्थान में विभाजित हैं, @katriel। उद्धरण के साथ, "$@"जैसे कुछ "$1" "$2" "$3" ...और बिना $@विस्तार के , के लिए फैलता है $1 $2 $3...
पालक

51

आपको शायद व्यवस्थापक के रूप में साइबरविन शेल को चलाने की आवश्यकता है। आप शॉर्टकट पर राइट-क्लिक कर सकते हैं और व्यवस्थापक के रूप में रन क्लिक कर सकते हैं या शॉर्टकट के गुणों में जा सकते हैं और इसे संगतता अनुभाग में जांच सकते हैं। बस खबरदार .... रूट अनुमतियां खतरनाक हो सकती हैं।


1
इस समाधान के विपरीत एक अच्छा जवाब के बिना पूछे जाने के बाद से तीन वर्षों में, मैंने नीचे दिए गए जवाब में मौजूदा सिगविन विंडो में एकल कमांड के लिए अनुमतियाँ जुटाने का सही तरीका खोजा है । इस प्रकार, यह sudoलिनक्स में बिल्कुल काम करता है ।
dotancohen

Win10 64 पर मेरे लिए काम किया। rsync के साथ सर्वर से डाउनलोड की गई फ़ाइलों का स्वामित्व बदलना था। chown --changes --verbose --recursive [USER] /cygdrive/c/[PATH TO FOLDER]/*। इसके बिना मैं rsynced फ़ोल्डर्स और फ़ाइलों तक नहीं पहुँच सकता।
लोटेकसून

25

Dotancohen के उत्तर पर निर्माण मैं एक उपनाम का उपयोग कर रहा हूं:

alias sudo="cygstart --action=runas"

एक आकर्षण के रूप में काम करता है:

sudo chown User:Group <file>

और अगर आपके पास SysInternals स्थापित है, तो आप सिस्टम यूजर के रूप में एक कमांड शेल भी आसानी से शुरू कर सकते हैं

sudo psexec -i -s -d cmd

9

मुझे sudo-for-cygwin मिला , शायद यह काम करेगा, यह एक क्लाइंट / सर्वर एप्लिकेशन है जो विंडोज़ (pty) में एक बच्चे की प्रक्रिया को स्पेंट करने के लिए एक पायथन स्क्रिप्ट का उपयोग करता है और उपयोगकर्ता के tty और I / O की प्रक्रिया को पूरा करता है।

इसके लिए खिड़कियों और अजगर मॉड्यूल ग्रीनलेट में अजगर, और साइगविन में इवेंटलेट की आवश्यकता होती है।


मैं अब थोड़ी देर के लिए इसका उपयोग कर रहा हूं और यह घटना बिना किसी समस्या के नैनो जैसे इंटरैक्टिव सामान को संभालती है!
मेम्फीज


4

ऐसा लगता है कि cygstart/runasठीक से संभाल नहीं करता है "$@"और इस प्रकार ऐसे कमांड हैं जिनके पास रिक्त स्थान वाले तर्क हैं (और शायद अन्य शेल मेटा-वर्ण - मैंने जांच नहीं की) सही तरीके से काम नहीं करेगा।

मैंने एक छोटी सी sudoस्क्रिप्ट लिखने का फैसला किया जो एक अस्थायी स्क्रिप्ट लिखकर काम करती है जो मापदंडों को सही ढंग से करती है।

#! /bin/bash

# If already admin, just run the command in-line.
# This works on my Win10 machine; dunno about others.
if id -G | grep -q ' 544 '; then
   "$@"
   exit $?
fi

# cygstart/runas doesn't handle arguments with spaces correctly so create
# a script that will do so properly.
tmpfile=$(mktemp /tmp/sudo.XXXXXX)
echo "#! /bin/bash" >>$tmpfile
echo "export PATH=\"$PATH\"" >>$tmpfile
echo "$1 \\" >>$tmpfile
shift
for arg in "$@"; do
  qarg=`echo "$arg" | sed -e "s/'/'\\\\\''/g"`
  echo "  '$qarg' \\" >>$tmpfile
done
echo >>$tmpfile

# cygstart opens a new window which vanishes as soon as the command is complete.
# Give the user a chance to see the output.
echo "echo -ne '\n$0: press <enter> to close window... '" >>$tmpfile
echo "read enter" >>$tmpfile

# Clean up after ourselves.
echo "rm -f $tmpfile" >>$tmpfile

# Do it as Administrator.
cygstart --action=runas /bin/bash $tmpfile

1
विन 7 पर मेरे लिए स्वीकृत जवाब काम नहीं आया लेकिन इस जवाब ने एक आकर्षण की तरह काम किया। मैं एलिवेटेड प्राइवेट के साथ एक्जिम-कॉन्फिगरेशन सेट करने में सक्षम था और फिर /etc/exim.conf फाइल को बाद में एडिट-एड करता था। स्लिक।
नानक

2

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

अगला, निम्न सामग्री के साथ एक सामान्य "रनस-एडमिन.बैट" फ़ाइल बनाएं:

@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||(
    cscript //E:JScript //nologo "%~f0" %*
    @goto :EOF
)
FOR %%A IN (%*) DO (
    "%%A"
)
@goto :EOF
@end @ELSE
args = WScript.Arguments;
newargs = "";
for (var i = 0; i < args.length; i++) {
    newargs += "\"" + args(i) + "\" ";
}
ShA=new ActiveXObject("Shell.Application");
ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+" "+newargs+"\"","","runas",5);
@end

फिर बैच फ़ाइल को इस तरह निष्पादित करें:

./runas-admin.bat "<command1> [parm1, parm2, ...]" "<command2> [parm1, parm2, ...]"

छूट के लिए:

./runas-admin.bat "net localgroup newgroup1 /add" "net localgroup newgroup2 /add"

बस दोहरे उद्धरण चिह्नों में प्रत्येक अलग कमांड को संलग्न करना सुनिश्चित करें। इस विधि का उपयोग करने के बाद आपको केवल UAC संकेत मिलेगा और इस प्रक्रिया को सामान्यीकृत किया गया है ताकि आप किसी भी प्रकार की कमांड का उपयोग कर सकें।


2

इस धागे में GitHub से CygWin के लिए SUDO बढ़ाने का एक नया प्रस्ताव , जिसका नाम है TOUACExt :

  • स्वचालित रूप से sudoserver.py को खोलता है।
  • टाइमआउट (15 मिनट डिफ़ॉल्ट) के बाद sudoserver.py को स्वचालित रूप से बंद कर देता है।
  • UAC ऊंचाई बढ़ाने का अनुरोध करें व्यवस्थापक उपयोगकर्ताओं के लिए हां / नहीं शैली।
  • गैर-व्यवस्थापक उपयोगकर्ताओं के लिए व्यवस्थापक उपयोगकर्ता / पासवर्ड का अनुरोध करें।
  • दूर से (एसएसएच) व्यवस्थापक खातों के साथ काम करता है।
  • लॉग बनाता है।

अभी भी प्री-बीटा में , लेकिन लगता है कि काम कर रहा है।


1

मैं यहाँ गूगल के माध्यम से उतरा, और मुझे वास्तव में विश्वास है कि मैंने साइबरविन में पूरी तरह से कार्यशील जड़ प्राप्त करने का एक तरीका ढूंढ लिया है।

यहाँ मेरे कदम हैं।

सबसे पहले आपको "रूट" करने के लिए विंडोज प्रशासक खाते का नाम बदलने की जरूरत है, प्रारंभ मनु खोलकर और "gpedit.msc" टाइप करके।

स्थानीय कंप्यूटर नीति> कंप्यूटर कॉन्फ़िगरेशन> विंडोज सेटिंग्स> सुरक्षा सेटिंग्स> स्थानीय नीतियां> सुरक्षा विकल्प> खाते: नाम बदलें व्यवस्थापक खाते के तहत प्रविष्टि संपादित करें

यदि आपको अभी तक सक्षम नहीं है तो आपको खाता सक्षम करना होगा। स्थानीय कंप्यूटर नीति> कंप्यूटर कॉन्फ़िगरेशन> विंडोज सेटिंग्स> सुरक्षा सेटिंग्स> स्थानीय नीतियां> सुरक्षा विकल्प> लेखा: व्यवस्थापक खाता स्थिति

अब लॉग आउट करें और रूट अकाउंट में लॉग इन करें।

अब cygwin के लिए एक पर्यावरण चर सेट करें। ऐसा करने का आसान तरीका: राइट क्लिक माय कंप्यूटर> प्रॉपर्टीज

क्लिक करें (बाएं साइडबार पर) "उन्नत सिस्टम सेटिंग्स"

नीचे के पास "एनवायरमेंट वेरिएबल्स" बटन पर क्लिक करें

"सिस्टम चर" के तहत "नया ..." बटन पर क्लिक करें

बिना उद्धरणों के "साइबरविन" नाम के लिए। मान के लिए, अपने साइबर रूट निर्देशिका में प्रवेश करें। (मेरा C: \ cygwin था)

ओके दबाएं और डेस्कटॉप पर वापस आने के लिए सभी को बंद करें।

साइगविन टर्मिनल खोलें (cygwin.bat)

फ़ाइल / etc / passwd संपादित करें और लाइन बदलें

प्रशासक : अप्रयुक्त: ५००: ५०३ : यू- मशीन \ _ प्रशासक , एस-१-५-११-१२३३५६86788३३५६-12-12०3०३३67४६90 ९ ० - ५००: / घर / प्रशासक : / बिन / बैश

इसके लिए (आपके नंबर, और मशीन का नाम अलग-अलग होंगे, बस सुनिश्चित करें कि आप हाइलाइट किए गए नंबर को 0 में बदल दें!)

रूट : अप्रयुक्त: 0: 0 : U- मशीन \ रूट , S-1-5-21-12345678-1234567890-1234567890- 0: / root : / bin / bash

अब जब वह सब समाप्त हो गया है, तो यह अगला बिट "सु" कमांड काम करेगा। (पूरी तरह से नहीं, लेकिन यह उपयोग करने के लिए पर्याप्त रूप से कार्य करेगा। मुझे नहीं लगता कि स्क्रिप्ट सही ढंग से काम करेगी, लेकिन हे, आपको यह बहुत दूर मिल गया है, शायद आपको रास्ता मिल जाए। और कृपया साझा करें)

सौदे को अंतिम रूप देने के लिए साइबरविन में इस कमांड को चलाएं।

mv /bin/su.exe /bin/_su.exe_backup
cat > /bin/su.bat << "EOF"
@ECHO OFF
RUNAS /savecred /user:root %cygwin%\cygwin.bat
EOF
ln -s /bin/su.bat /bin/su
echo ''
echo 'All finished'

रूट खाते से लॉग आउट करें और अपने सामान्य विंडोज़ उपयोगकर्ता खाते में वापस जाएं।

उस सब के बाद, नए "su.bat" को मैन्युअल रूप से एक्सप्लोरर में डबल क्लिक करके चलाएं। अपने पासवर्ड दर्ज करें और आगे बढ़ें और विंडो बंद करें।

अब सबगविन से सु कमांड चलाने की कोशिश करें और देखें कि क्या सब कुछ ठीक हो गया है।


1

उपलब्ध समाधान से नाखुश होने के कारण, मैंने सुरक्षा को जोड़ने और सेटअप और उपयोग में आसान बनाने के लिए nu774 की स्क्रिप्ट को अपनाया । यह परियोजना जीथब पर उपलब्ध है

इसका उपयोग करने के लिए, बस इसे डाउनलोड करें cygwin-sudo.pyऔर इसके माध्यम से चलाएं python3 cygwin-sudo.py **yourcommand**

आप सुविधा के लिए एक उपनाम स्थापित कर सकते हैं:

alias sudo="python3 /path-to-cygwin-sudo/cygwin-sudo.py"

0

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

यह chere टूल पर आधारित है और दुर्भाग्यवश link_boy से काम नहीं करने वाला उत्तर (मेरे लिए) है। यह विंडोज 8 का उपयोग करके मेरे लिए ठीक काम करता है,

एक साइड इफेक्ट एडमिन cmd विंडो में अलग रंग है। बैश पर इसका उपयोग करने के लिए, आप व्यवस्थापक उपयोगकर्ता की .bashrc फ़ाइल को बदल सकते हैं।

मैं चलाने के लिए "पृष्ठभूमि" संस्करण (एक खुली निर्देशिका में राइट क्लिक) को नहीं मिला। इसे जोड़ने के लिए स्वतंत्र महसूस करें।

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash]
@="&Bash Prompt Here"
"Icon"="C:\\cygwin\\Cygwin.ico"

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash\command]
@="C:\\cygwin\\bin\\bash -c \"/bin/xhere /bin/bash.exe '%L'\""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash_root]
@="&Root Bash Prompt Here"
"Icon"="C:\\cygwin\\Cygwin.ico"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash_root\command]
@="runas /savecred /user:administrator \"C:\\cygwin\\bin\\bash -c \\\"/bin/xhere /bin/bash.exe '%L'\\\"\""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd]
@="&Command Prompt Here"

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd\command]
@="cmd.exe /k cd %L"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd_root]
@="Roo&t Command Prompt Here"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd_root\command]
@="runas /savecred /user:administrator \"cmd.exe /t:1E /k cd %L\""

0

एक बहुत ही सरल तरीका है कि एक साइबर शेल और संबंधित उपधारा को व्यवस्थापक विशेषाधिकारों के साथ संचालित करना लिंक के गुणों को बदलना है जो प्रारंभिक शेल को खोलता है।

निम्न विंडोज 7+ के लिए मान्य है (शायद पिछले संस्करणों के लिए भी, लेकिन मैंने जाँच नहीं की है)

मैं आमतौर पर में एक cygwin-लिंक से cygwin खोल शुरू शुरू बटन (या डेस्कटॉप)। फिर, मैंने टैब में साइबरविन-लिंक के गुणों को बदल दिया

/ संगतता / विशेषाधिकार स्तर /

और बॉक्स को चेक किया,

"इस कार्यक्रम को व्यवस्थापक के रूप में चलाएं"

यह साइबर शेल को प्रशासक विशेषाधिकारों और इसी उप-श्रेणियों के साथ खोलने की अनुमति देता है।


एकमात्र मामूली समस्या यह है कि आप यह नहीं बता सकते कि क्या इसे व्यवस्थापक के रूप में खोला गया है।
एडविन प्रैट

0

मैं इस चर्चा sudoको अलग-अलग ऑपरेटिंग सिस्टम में कार्यान्वयन पर कुछ विवरणों की तलाश में मिला । इसे पढ़कर मैंने पाया कि @ ब्रायन-व्हाईट ( https://stackoverflow.com/a/42956057/3627676 ) द्वारा समाधान उपयोगी है लेकिन इसमें थोड़ा सुधार किया जा सकता है। मैंने अस्थायी फ़ाइल बनाने से परहेज किया और एकल स्क्रिप्ट द्वारा सब कुछ निष्पादित करने के लिए लागू किया।

इसके अलावा मैंने सिंगल विंडो / कंसोल के भीतर आउटपुट में सुधार के अगले चरण की जांच की। दुर्भाग्य से, बिना किसी सफलता के। मैंने STDOUT / STDERR को पकड़ने और मुख्य विंडो में प्रिंट करने के लिए नामित पाइप का उपयोग करने की कोशिश की। लेकिन चाइल्ड प्रोसेस ने नामित पाइपों को नहीं लिखा। हालाँकि एक नियमित फ़ाइल पर लिखना अच्छा काम करता है।

मैंने मूल कारण खोजने का कोई भी प्रयास छोड़ दिया और वर्तमान समाधान को छोड़ दिया। आशा है मेरी पोस्ट उपयोगी भी हो सकती है।

सुधार:

  • कोई अस्थायी फ़ाइल नहीं
  • कमांड लाइन विकल्पों में कोई पार्सिंग और पुनर्निर्माण नहीं
  • एलिवेटेड कमांड का इंतजार करें
  • उपयोग minttyया bash, अगर पहले एक नहीं मिला
  • कमांड एग्जिट कोड लौटाएं
    #! / Bin / bash

    # प्रशासक होने के नाते, सीधे कमांड का आह्वान करें
    आईडी -जी | grep -qw 544 && {
        "$ @"
        बाहर निकलें $?
    }

    # CYG_SUDO वैरिएबल का उपयोग कमांड इनवोकेशन को नियंत्रित करने के लिए किया जाता है
    [-z "$ CYG_SUDO"] && {
        मिनिटेट = "$ (जो मिनिटेट 2> / देव / नल)"
        निर्यात CYG_SUDO = "$$"
        cygstart --wait --action = runas $ mintty / bin / bash "$ 0" "$ @"
        बाहर निकलें $?
    }

    # अब हम सक्षम हैं:
    # - कमांड लॉन्च करें
    # - संदेश प्रदर्शित करें
    # - निकास कोड लौटाएं
    "$ @"
    Retval = $?

    गूंज "$ 0: विंडो बंद करने के लिए दबाएं ..."
    पढ़ना

    $ RETVAL से बाहर निकलें


cygstart --wait --action=runas $mintty /bin/bash "$0" "$@"एक तर्क में रिक्त स्थान होने पर कैसे नहीं टूटता है? यह हमेशा मेरे लिए था जब मैं साइबरस्टार्ट / रनस से गुजरता था।
ब्रायन व्हाइट

0

@ Mat-khor के जवाब के आधार पर, मैंने syswin लिया su.exe, इसे सहेजा manufacture-syswin-su.exeऔर इस आवरण स्क्रिप्ट को लिखा। यह कमांड के स्टडआउट और स्टेडर के पुनर्निर्देशन को संभालता है, इसलिए इसे एक पाइप आदि में इस्तेमाल किया जा सकता है। इसके अलावा, स्क्रिप्ट दिए गए कमांड की स्थिति से बाहर निकल जाती है।

सीमाएं:

  • वर्तमान उपयोगकर्ता का उपयोग करने के लिए वर्तमान में syswin-su विकल्प हार्डकोड किए गए हैं। Prepending env USERNAME=...स्क्रिप्ट मंगलाचरण करने के लिए इसे ओवरराइड करता है। यदि अन्य विकल्पों की आवश्यकता होती है, तो स्क्रिप्ट को syswin-su और कमांड तर्कों के बीच अंतर करना होगा, उदाहरण के लिए पहले विभाजन --
  • यदि UAC संकेत रद्द या अस्वीकृत हो जाता है, तो स्क्रिप्ट हैंग हो जाती है।

#!/bin/bash
set -e

# join command $@ into a single string with quoting (required for syswin-su)
cmd=$( ( set -x; set -- "$@"; ) 2>&1 | perl -nle 'print $1 if /\bset -- (.*)/' )

tmpDir=$(mktemp -t -d -- "$(basename "$0")_$(date '+%Y%m%dT%H%M%S')_XXX")
mkfifo -- "$tmpDir/out"
mkfifo -- "$tmpDir/err"

cat >> "$tmpDir/script" <<-SCRIPT
    #!/bin/env bash
    $cmd > '$tmpDir/out' 2> '$tmpDir/err'
    echo \$? > '$tmpDir/status'
SCRIPT

chmod 700 -- "$tmpDir/script"

manufacture-syswin-su -s bash -u "$USERNAME" -m -c "cygstart --showminimized bash -c '$tmpDir/script'" > /dev/null &
cat -- "$tmpDir/err" >&2 &
cat -- "$tmpDir/out"
wait $!
exit $(<"$tmpDir/status")

-1

यह पूरी तरह से स्वयं का परीक्षण नहीं कर सकता, मेरे पास इसे आज़माने के लिए एक उपयुक्त स्क्रिप्ट नहीं है, और मैं कोई लिनक्स विशेषज्ञ नहीं हूं, लेकिन आप किसी चीज़ को पर्याप्त रूप से हैक करने में सक्षम हो सकते हैं।

मैंने इन चरणों की कोशिश की है, और वे काम करने के लिए 'प्रतीत' होते हैं, लेकिन यह नहीं जानते कि क्या यह आपकी आवश्यकताओं के लिए पर्याप्त होगा।

'मूल' उपयोगकर्ता की कमी को पूरा करने के लिए:

  • 'रूट' नामक LOCAL विंडोज़ मशीन पर एक उपयोगकर्ता बनाएँ, इसे 'प्रशासक' समूह का सदस्य बनाएँ
  • बिन / bash.exe को सभी उपयोगकर्ताओं के लिए 'व्यवस्थापक के रूप में चलाएं' के रूप में चिह्नित करें (जाहिर है कि जब आपको इसकी आवश्यकता होगी, तो आपको इसे चालू / बंद करना होगा)
  • Cygwin.bat फ़ाइल पर राइट क्लिक करते हुए विंडोज़ एक्सप्लोरर में बाईं पारी बटन दबाए रखें
  • 'एक अलग उपयोगकर्ता के रूप में चलाएँ' का चयन करें
  • उपयोगकर्ता नाम और फिर अपना पासवर्ड दर्ज करें।

यह तब आपको एक उपयोगकर्ता के रूप में चलाता है जिसे 'sg' कहा जाता है cygwin में, जो bash.exe फ़ाइल पर 'Run as Administrator' के साथ मिलकर पर्याप्त हो सकता है।

हालाँकि आपको अभी भी एक सूडो की आवश्यकता है।

मैंने इसे (और किसी और लिनक्स ज्ञान के साथ शायद इसे बेहतर तरीके से नकली कर सकता है) 'sudo' नामक एक फाइल बनाकर / बिन में इस कमांड लाइन का उपयोग करके कमांड को इसके बजाय su में भेजने के लिए उपयोग किया:

su -c "$*"

कमांड लाइन 'sudo vim' और अन्य मेरे लिए ठीक काम करती हैं, इसलिए आप इसे आज़माना चाहते हैं।

यह जानने के लिए इच्छुक रहें कि यह आपकी आवश्यकताओं के लिए काम करता है या नहीं।


-1

मेरे पास आमतौर पर एक रजिस्ट्री "ओपन हियर" हेल्पर है, ताकि मेरे कंप्यूटर में कहीं से भी प्रशासनिक विशेषाधिकार के साथ एक साइबरविन शेल खोल सकें।

ज्ञात हो कि आपके पास chere -i -mपहले से ही एक ऊंचे सागविन गोले से "" चेरे "पैकेज" स्थापित करने के लिए, " " का उपयोग करना होगा ।

अपने cygwin स्थापना मान C: \ cygwin में है ...

यहाँ रजिस्ट्री कोड है:

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash]

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash]
@="Open Cygwin Here as Root"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash\command]
@="c:\\cygwin\\bin\\mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe"

[-HKEY_CLASSES_ROOT\Directory\Background\shell\cygwin_bash]

[HKEY_CLASSES_ROOT\Directory\Background\shell\cygwin_bash]
@="Open Cygwin Here as Root"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\Background\shell\cygwin_bash\command]
@="c:\\cygwin\\bin\\mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe"

[-HKEY_CLASSES_ROOT\Drive\shell\cygwin_bash]

[HKEY_CLASSES_ROOT\Drive\shell\cygwin_bash]
@="Open Cygwin Here as Root"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Drive\shell\cygwin_bash\command]
@="c:\\cygwin\\bin\\mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe"

उम्मीद है की यह मदद करेगा। अगर यह आप के लिए काम करता है तो मुझे बतलाएगा। धन्यवाद।

पुनश्च: आप इस कोड को पकड़ सकते हैं, इसे कॉपी और पेस्ट कर सकते हैं और इसे चलाने के लिए name.reg फ़ाइल में सहेज सकते हैं ... या आप मैन्युअल रूप से मान जोड़ सकते हैं।


-5

प्रयत्न:

chmod -R ug+rwx <dir>

<dir>वह निर्देशिका कहां है जिस पर आप अनुमतियां बदलना चाहते हैं।


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