घर की निर्देशिका को सुरक्षित रूप से बदलें


82

मैं घर की निर्देशिका को सुरक्षित रूप से अपडेट करने का प्रयास कर रहा हूं /etc/passwd, लेकिन सिगविन द्वारा प्रदान नहीं किए जाने के लिए मानक लिनक्स के बर्तन - usermod और vipw -।

क्या कोई मुझे बता सकता है कि उन्होंने साइगविन में इसे कैसे बदल दिया?


4
पर डुप्लिकेट प्रश्न stackoverflow.com/q/1494658/923560 1.7.34 के साथ शुरुआत हाल ही में Cygwin संस्करणों के लिए उत्तर प्रदान करता है।
अब्दुल

जवाबों:


96

संपादित करें: सिगविन (1.7.34 और उससे आगे) के हाल के संस्करणों के लिए, यह नया प्रश्न देखें

Sblundy के उत्तर की तरह, आप हमेशा हाथ से संपादित कर सकते हैं।

लेकिन अगर आप इसे "आधिकारिक" तरीके से करना चाहते हैं, तो साइबर-विशिष्ट mkpasswdकमांड का उपयोग करें । नीचे आधिकारिक डॉक्स से एक स्निपेट दिया गया है mkpasswd:

उदाहरण के लिए, यह आदेश:

उदाहरण 3.11। एक वैकल्पिक होम रूट का उपयोग करना

$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd

स्थानीय उपयोगकर्ताओं के होम निर्देशिकाओं को विंडोज 'प्रोफाइल' डायरेक्टरी में रखा जाएगा।

Cygwin उपयोगिताएँ प्रलेखन पृष्ठ (जिसमें शामिल हैं mkpasswd) पर वर्णित अन्य वास्तव में उपयोगी आदेशों का एक समूह है । cygpathउपरोक्त उदाहरण में उपयोग इन साइबर-विशिष्ट उपकरणों में से एक है।

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


10
यदि आप एक डोमेन पर हैं, तो आप इस वैकल्पिक आदेश पर विचार कर सकते हैं: ( -dडोमेन के लिए) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd यह मेरे लिए काम नहीं किया - यह मूल रूप से लटका हुआ है। चूँकि मैं इस मशीन का उपयोग करने वाला एकमात्र व्यक्ति हूं, इसलिए मैं इस विकल्प का उपयोग कर सकता हूं, जो सुरक्षित होना चाहिए चाहे आप एक डोमेन पर हों या नहीं ( -cवर्तमान उपयोगकर्ता के लिए है) $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
Ryan Pavlik

1
ऐसा करने के बाद, .bashrc पढ़ने के लिए नहीं लगता है, भले ही मैं इसे अपने नए पर कॉपी करूं $HOME। इसे ठीक करने के लिए कोई भी विचार?
जेफ

1
आउटपुट को संलग्न किया जाना चाहिए (>>) से / etc / passwd (कई उपयोगकर्ताओं के साथ कॉर्पोरेट परिदृश्यों के लिए)। यह काम किया! :)
आंद्रे

1
उपयोग करने के लिए uname -r को देखें कि आप
किस साइबर

19

मैंने अपने सभी सागविन गोले से बाहर निकल कर एक पाठ संपादक में हाथ से संपादन किया। अब तक सब ठीक है।

नोट: "दस्तावेज़ और सेटिंग" निर्देशिका में रिक्त स्थान से बच नहीं। प्रवेश जैसा दिखेगा

user:...:/cygdrive/c/Documents and Settings/user:/bin/bash

रेखा :चरित्र पर अंकित है ।


यह UNC रास्तों के लिए भी काम करता है, धन्यवाद पहले होम वेरिएबल के साथ ओवरराइड कर रहा था
HaveAGuess

मुझे हाथ से क्या संपादित करना है? मुझे नहीं पता कि मेरी साइबरविन होम निर्देशिका /cygdrive/c/Users/JoseAngel/AppData/Roaming/SPB_16.6 क्यों है, मैं इसे C: / Users / MyName /

16

मैंने जो सबसे आसान उत्तर पाया है, वह है, आपके विंडोज होम / यूजरप्रोफाइल डायरेक्टरी के लिए एक सॉफ्ट लिंक बनना / होम करना

cd /
mv home oldhome
ln -s "$(cygpath -H)" home

मैंने cygpath का उपयोग किया क्योंकि यह विंडोज़ के वर्तमान संस्करण पर गृह निर्देशिका के लिए उचित स्थान प्राप्त करेगा। मेरे बॉक्स पर cygpath -Hलौटता है/cygdrive/c/Users


कुछ समय के लिए ऐसा करने के बाद एक खामी है: मुझे हर बार इसे चलाना पड़ता है जब मैं अपने setup.exe का उपयोग करके cygwin को अपडेट करता हूं। कोई बड़ी बात नहीं लेकिन कुछ याद रखना।
एम स्मिथ

यह सबसे अच्छा जवाब है। मुझे आश्चर्य है कि क्यों साइबर डिफ़ॉल्ट रूप से डिफ़ॉल्ट नहीं होता है cygwin -H। यह सबसे समझदार स्थान है, और विंडोज 7 के बाद से इसके मार्ग में भी कोई जगह नहीं है।
दशमी तिथि

दूसरे नोट पर, यह काम नहीं करेगा। यह अचानक प्रतीकात्मक लिंक की अनदेखी करने का फैसला किया!
दशमी तिथि

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

विंडोज 10 पर अपेक्षित के रूप में काम करता है। मुझे अभी भी हर बार मुझे साइबरविन को अपडेट करने के लिए फिर से आवेदन करना होगा।
एम स्मिथ

8

वर्तमान उपयोगकर्ता के लिए निम्नलिखित मेरे लिए काम करते हैं:

  1. साइगविन को बंद करें।
  2. गृह विंडोज उपयोगकर्ता पर्यावरण चर सेट करें।
  3. Cygwin प्रारंभ करें।
  4. "mkpasswd -c -p" $ (cygpath -H) "> / etc / passwd" चलाएँ।
  5. साइगविन को पुनः आरंभ करें।

मैंने इसकी पुष्टि की कि यह बिना किसी तर्क के ssh-keygen चलाकर काम करता है। इस परिवर्तन को करने के बाद, अब ऐप को / home / उपयोगकर्ता के बजाय / cygdrive / c / Users / user की कुंजी को बचाने के लिए डिफॉल्ट करता है।

मैं अगर सेटिंग घर के लिए आवश्यक है पता नहीं है, लेकिन मैं Cygwin अनौपचारिक Cygwin समर्थन के लिए कछुआ की आधिकारिक प्रलेखन उपयोग करने के साथ TortoiseGit स्थापित करने के लिए निर्देशों के अनुसार वैसे भी यह किया यहाँ । गृह निर्देशिका परिवर्तन को पहचानने के लिए ssh-keygen के लिए पर्याप्त नहीं होने पर अकेले घर की स्थापना करना।

इसके अलावा, ध्यान दें कि इस मुद्दे पर Cygwin के आधिकारिक दस्तावेज यहां मिल सकते हैं

64-बिट Cygwin v1.7.35 का उपयोग करके विंडोज 7 में पुष्टि की गई।


Cygwin के लिए 1.7.35+ mkpasswd का उपयोग /etc/nsswitch.conf के पक्ष में हतोत्साहित किया जाता है
क्रिस्टोफर

4

मैं हमेशा गृह को कंप्यूटर गुण में एक उपयोगकर्ता-विशिष्ट पर्यावरण चर के रूप में सेट करता हूं।


मैं इससे बचने की कोशिश कर रहा हूं क्योंकि यह एक कॉर्पोरेट नेटवर्क ड्राइव पर सेट है। ऐसा लगता है कि यह काम करेगा।
sblundy

6
ध्यान दें कि यह ssh के लिए काम नहीं करेगा, यह स्पष्ट रूप से होम को अनदेखा करता है और हमेशा / etc / passwd का उपयोग करता है। Cygwin.com/faq/faq-nochunks.html#faq.setup.home का अंतिम वाक्य देखें ।
स्टॉपजेक

3

अपने होम डाइरेक्टरी के पथ में स्थान होने के कारण होने वाली समस्याओं से बचने के लिए, विंडोज 'प्रोफाइल' डायरेक्टरी के संक्षिप्त रूप का उपयोग करें - अर्थात /cygdrive/c/DOCUME~1/user

आप इसे कमांड टाइप करके कर सकते हैं:

mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd

2

मुझे अपनी साइबरविन इंस्टॉलेशन सिंक को एक पेन ड्राइव और दूसरे कंप्यूटर पर रखना पसंद है, इसलिए मुझे होम डायरेक्टरी में हार्ड-कोडिंग से नफरत है। मैं निम्नलिखित cygwin.bat का उपयोग करता हूं:

echo off
SETLOCAL
set SHELL=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL

सेटलॉक और ENDLOCAL यह सुनिश्चित करते हैं कि SHELL और HOME अन्य कार्यक्रमों के लिए मौजूदा env वेरिएबल को क्लोब न करें। HOME=%~dp0..\..\doc\unixघर को दो निर्देशिकाओं में सेट करें, doc / unix उपनिर्देशिका में। फिर .... \ doc \ unix.bashrc में, मैं शामिल करता हूं PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"। मैंने start /wait %CD%\bin\bashबैश शुरू करने के लिए उपयोग नहीं किया , क्योंकि मैं Console2 का उपयोग कर रहा हूं , इसलिए मुझे अतिरिक्त cmd विंडो की आवश्यकता नहीं है।


2

Windows पर्यावरण चर का उपयोग करना: गृह

यह मेरे लिए एक स्थायी, गैर-पोर्टेबल, गैर-नेटवर्क समाधान के लिए काम करता है; यानी विंडोज में होम एनवायरनमेंट वेरिएबल को स्थायी रूप से सेट करना।

ध्यान दें कि यह ssh या टेलनेट सत्र को प्रभावित नहीं करता है जो हमेशा / etc / passwd को संदर्भित करता है

रेफरी: साइग्विन की स्थापना- मेरा गृह पर्यावरण चर वह नहीं है जो मैं चाहता हूं।

अध्यक्ष एवं प्रबंध निदेशक

के लिए वर्तमान उपयोगकर्ता (जरूरतों एक बार प्रति उपयोगकर्ता को चलाने के लिए) ::

reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

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

reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

नोट: प्रतिशत-प्रतिशत% से पहले कैरेट ^

महत्वपूर्ण फ़ाइल

इस reg फ़ाइल को आयात करें ( वर्तमान उपयोगकर्ता):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

के लिए नए उपयोगकर्ताओं:

Windows Registry Editor Version 5.00

[HKU\.DEFAULT\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

REGEDIT

Regedit में, के तहत:

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

HKEY_CURRENT_USER\Environment

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

HKU\.DEFAULT\Environment

गृह को एक नए विस्तार योग्य स्ट्रिंग मान के रूप में बनाएं (* REG_EXPAND_SZ *) और % USERPROFILE% में डालें


यह उत्तर जिस भी सूचना पर आधारित था, वह अब चालू नहीं है। रेफरी: लिंक भी टूट गया है। मैं घर पर यह कोशिश नहीं करूंगा।
क्रिस्टोफर

2

मूल जवाब द्वारा क्रिस्टोफर से कहीं और

साइगविन 1.7.34+

Cygwin 1.7.34 या उच्चतर Cygwin का उपयोग करने वालों के लिए इनवॉइसिंग का समर्थन करता है कि कैसे घर की निर्देशिका, लॉगिन शेल, और gecre की जानकारी प्राप्त करें /etc/nsswitch.conf। यह सिगविन उपयोगकर्ता गाइड अनुभाग में विस्तृत है:

यदि आपने पहले एक ऐसी फ़ाइल /etc/passwdया /etc/groupफ़ाइल बनाई है, जिसे आप निकालना चाहते हैं और नए विंडोज सुरक्षा मॉडल का उपयोग करके सिग्विन को कॉन्फ़िगर कर सकते हैं।

[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak

/etc/nsswitch.confफ़ाइल है db_home:परिभाषित करता है कि कैसे Cygwin उपयोगकर्ता के घर निर्देशिका को हासिल करेगा स्थापित कर लिया। के लिए डिफ़ॉल्ट सेटिंग db_home:है

db_home: /home/%U

तो डिफ़ॉल्ट रूप से, साइगविन सिर्फ घर के लिए निर्धारित करता है /home/$USERNAME। आप इसे बदल सकते हैं, हालांकि किसी अन्य कस्टम पथ को इंगित करने के लिए जिसे आप चाहते हैं। समर्थित वाइल्डकार्ड वर्ण हैं:

  • %u साइग्विन उपयोगकर्ता नाम (यह लोअरकेस यू है)।
  • %U विंडोज उपयोगकर्ता नाम (यह अपरकेस यू) है।
  • %D NetBIOS शैली में विंडोज डोमेन।
  • %HPOSIX शैली में विंडोज होम डायरेक्टरी। ध्यान दें, db_home:सेटिंग के लिए, यह केवल पूर्ववर्ती स्लैश के बाद सही समझ में आता है, जैसा कि अंदर हैdb_home: /%H/cygwin
  • %_चूंकि स्कीमाटा को अलग करने के लिए स्पेस और TAB कैरेक्टर का इस्तेमाल किया जाता है, इसलिए फाइलनेम में स्पेस दिया जाना चाहिए %_
  • %% प्रति-प्रतिशत चरित्र।

पथ के स्थान पर, आप चार नामित पथ स्कीमाता में से एक निर्दिष्ट कर सकते हैं जो पूर्वनिर्धारित हैं।

  1. windowsउपयोगकर्ता की होम निर्देशिका उसी निर्देशिका पर सेट होती है जिसका उपयोग Windows होम निर्देशिका के रूप में किया जाता है, आमतौर पर %USERPROFILE%या की तर्ज पर कुछ C:\Users\$USERNAME। बेशक, विंडोज निर्देशिका को सिगविन द्वारा पोसिक्स-शैली में बदल दिया गया है।

  2. cygwinकेवल विज्ञापन: उपयोगकर्ता की होम डायरेक्टरी cygwinUome विशेषता वर्ग से साइबरविनोमे विशेषता में दिए गए POSIX पथ पर सेट है। "साइबरविन स्कीमा" नामक अनुभाग भी देखें ।

  3. unixकेवल AD: उपयोगकर्ता की होम निर्देशिका पॉज़िक्स पथ में दी गई है, जो पॉज़िक्सअकाउंट सहायक वर्ग से unixHomeDirectory विशेषता में दी गई है। "यूनिक्स स्कीमा" नामक अनुभाग भी देखें ।

  4. descउपयोगकर्ता की होम निर्देशिका घर में दिए गए POSIX पथ पर सेट है = "..." SAM या AD में उपयोगकर्ता के विवरण विशेषता में XML- एक जैसे सेटिंग। विस्तृत विवरण के लिए "desc स्कीमा" नामक अनुभाग देखें।

निम्न Cygwin में उपयोगकर्ता के होम डायरेक्टरी को वैसा ही बना देगा जैसा कि Windows होम डायरेक्टरी के लिए उपयोग किया जाता है।

db_home: windows

सिग्विन 1.7.33 या पहले

Cygwin 1.7.33 या इससे पहले का उपयोग करने वालों के लिए , नवीनतम संस्करण Cygwin में अपडेट करें और पहले उपयोग की गई /etc/passwdऔर /etc/groupफ़ाइलों को हटा दें , फिर ऊपर दिए गए चरणों को देखें।

और, नीचे दिए गए इन पुराने चरणों का पालन करें।

सबसे पहले, होम के लिए एक विंडोज़ पर्यावरण चर सेट करें जो आपके उपयोगकर्ता प्रोफ़ाइल की ओर इशारा करता है:

  1. कंट्रोल पैनल पर ओपन सिस्टम
  2. उन्नत टैब पर पर्यावरण चर (नीचे की ओर) पर क्लिक करें
  3. उपयोगकर्ता चर क्षेत्र में "नया ..." पर क्लिक करें
  4. चर नाम के लिए दर्ज करें HOME
  5. परिवर्तनीय मूल्य दर्ज करने के लिए %USERPROFILE%
  6. इस नई सेटिंग को लागू करने के लिए सभी खुले संवाद बॉक्स में ओके पर क्लिक करें

अब हम केवल बनाए /etc/passwdगए विंडोज %HOME%चर के साथ Cygwin फ़ाइल को अपडेट करने जा रहे हैं । शेल लॉगिन और दूरस्थ लॉगिन के माध्यम से उपयोगकर्ता के पथ के स्थान को बताने के लिए sshउस पर भरोसा करेंगे ।/etc/passwd$HOME

सिग्विन बैश कमांड प्रॉम्प्ट पर निम्न टाइप करें:

cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 

-dस्विच mkpasswd बताता DOMAIN उपयोगकर्ताओं को शामिल करने, जबकि -lकेवल उत्पादन स्थानीय मशीन उपयोगकर्ताओं के लिए है। यह महत्वपूर्ण है यदि आप कार्य में एक पीसी का उपयोग कर रहे हैं जहां उपयोगकर्ता जानकारी विंडोज डोमेन नियंत्रक से प्राप्त की जाती है।

अब, आप समूहों के लिए भी ऐसा कर सकते हैं, हालांकि यह आवश्यक नहीं है जब तक कि आप एक कंप्यूटर का उपयोग नहीं करेंगे जो विंडोज डोमेन का हिस्सा है। Cygwin, Windows खाता डेटाबेस से समूह की जानकारी पढ़ता है, लेकिन /etc/groupयदि आपकी मशीन अक्सर अपने डोमेन नियंत्रक से डिस्कनेक्ट हो जाती है, तो आप एक फ़ाइल जोड़ सकते हैं ।

सिग्विन बैश प्रॉम्प्ट पर निम्नलिखित टाइप करें:

cp /etc/group /etc/group.bak
mkgroup -l > /etc/group 
mkgroup -d >> /etc/group 

अब, Cygwin से बाहर निकलें और इसे फिर से शुरू करें। आपको पता होना चाहिए कि आपका गृह पथ आपके विंडोज उपयोगकर्ता प्रोफ़ाइल के समान स्थान पर इंगित करता है - अर्थात/cygdrive/c/Users/username


1
cd /home
rm -rf chris
ln -s /cygdrive/z chris

मुझे वास्तव में यकीन नहीं है कि यह सबसे सुरक्षित समाधान है लेकिन यह एक संभावित समाधान है जो मेरे लिए काम करता है;)


0

मैंने अपनी / etc / passwd फ़ाइल को सीधे संपादित किया (यह सुनिश्चित करते हुए कि कुछ और उस तक नहीं पहुंचेगा), और सभी संदर्भों को / उपयोगकर्ता के लिए / विंडोज 7 पर बदल दिया। मैंने पाया कि सब कुछ सही ढंग से काम करने के लिए, मुझे / होम निर्देशिका में किसी भी निर्देशिका को हटाना होगा (या उन्हें उपयुक्त स्थान पर ले जाना होगा)। अन्यथा, साइबरविन एक विभाजित व्यक्तित्व विकसित करेगा जहां, उदाहरण के लिए, 'bash -l' / home / Pablo में शुरू होगा, लेकिन $ HOME होगा / उपयोगकर्ता / पाब्लो और emacs रिवर्स करने के लिए दिखाई देंगे। एक बार जब मैंने घर / पाब्लो को डिलीट कर दिया, तो सब कुछ ठीक रहा।


0

मुझे केवल तभी होना चाहिए C:\Users\usernameजब मैं साइबरविन शुरू करूं। इसलिए, मैंने अभी .bashrcऔर इसमें जोड़ा है.profile

cd ${HOMEPATH}

यदि आप ~/.इसके बजाय उपयोग करना पसंद करते हैं $HOMEPATH, तो आप निम्नलिखित भी जोड़ सकते हैं:

export HOME=${HOMEPATH}

इस तरह मैं साइबर इंस्टॉलेशन को परेशान नहीं करता।

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