उपयोगकर्ता बनाने के बाद घर निर्देशिका बनाएँ


68

मैंने कुछ उपयोगकर्ताओं को बनाया:

$ useradd john

और मैं -mघर निर्देशिका बनाने के लिए पैरामीटर निर्दिष्ट करना भूल गया और कंकाल की फाइलें प्रत्येक उपयोगकर्ता के लिए कॉपी की गई। अब मैं ऐसा करना चाहता हूं, और मैं सभी उपयोगकर्ताओं को फिर से बनाना नहीं चाहता (एक आसान तरीका होना चाहिए)। इसलिए, क्या उपयोगकर्ता निर्देशिकाओं को बनाने और कंकाल फ़ाइलों की प्रतिलिपि बनाने का कोई तरीका है?

मैंने निर्देशिका बनाने के बारे में सोचा, उन्हें संबंधित उपयोगकर्ता के लिए, सभी कंकाल फ़ाइलों की प्रतिलिपि बनाकर उन्हें संबंधित उपयोगकर्ता को चुना। लेकिन अगर ऐसा कोई आदेश है useradd -mजो उपयोगकर्ता को फिर से नहीं बनाता है, लेकिन निर्देशिकाएं बनाता है, तो यह बेहतर होगा।


क्या यह उपयोगकर्ताओं की एक बड़ी सूची के साथ हुआ था?
डेविड रिकमैन

मेरे पास इस समस्या के लगभग 10 उपयोगकर्ता थे।
cd1

मैं मदद नहीं कर सकता लेकिन महसूस कर सकता हूं कि राहुल के पास आपके सवाल का सबसे अच्छा जवाब है। हो सकता है कि आपको अपने स्वीकृत उत्तर पर फिर से विचार करना चाहिए?

जवाबों:


17

यह एक मूर्खतापूर्ण विचार की तरह लग सकता है, लेकिन यदि उपयोगकर्ता वास्तव में कुछ भी नहीं कर रहे हैं, तो आप कर सकते हैं:

cat /etc/passwd | cut -f 1 -d : >/tmp/users.list

इसके बाद /tmp/users.list को संपादित करें। फिर करो:


for i in `cat /tmp/users.list`
do
    userdel $i
    useradd -m $i
done

हालाँकि, कई Redhat आधारित वितरण, जब आप पहली बार लॉगिन करते हैं, तो एक नई होम डायरेक्टरी बनाएंगे, बशर्ते कि यह कहाँ पर होना चाहिए / etc / passwd में जहाँ डायरेक्टरी होनी चाहिए।

यह जांचने के लिए, "su -" करें और देखें कि क्या यह "सही काम" करता है। यदि ऐसा नहीं होता है, तो उपरोक्त स्क्रिप्ट काफी अच्छी तरह से काम करेगी, मुझे लगता है।


1
हां, यह काम किया, हालांकि इसने नए यूआईडी और जीआईडी ​​बनाए (लेकिन यह कोई समस्या नहीं थी)। लेकिन मैं / etc / छाया से पासवर्ड का बैकअप लेना भूल गया, अब उपयोगकर्ताओं को अपने पासवर्ड फिर से सेट करने होंगे = /
cd1

यदि उसने उन्हें हाल ही में बनाया तो वह ऐसा करने में सक्षम हो सकता है: बिल्ली / आदि / पासवार्ड | egrep '^ \: [0-9] {4} \:' | cut -f 1 -d:> /tmp/users.list केवल वैध उपयोगकर्ताओं का UID हड़पना चाहिए, न कि सिस्टम उपयोगकर्ताओं को।
डेविड रिकमैन

पासवर्ड के बारे में क्या, वे एक ही रहते हैं? मुझे डर नहीं!
गणित

for i in $(awk -F: '{print $1 }' /etc/passwd)
राहुल पाटिल

क्यों बिल्ली के साथ और पाइप के साथ ग्रीप या कट का उपयोग करें, सीधे इस तरह से क्यों नहीं? cut -f 1 -d: </ etc / passwd> passwtmp
c4f4t0r

97

इसके अलावा आप उपयोग कर सकते हैं mkhomedir_helper

Usage: /sbin/mkhomedir_helper <username> [<umask> [<skeldir>]]

13
यह एकमात्र उत्तर है जो वास्तव में कुछ 10 लाइन स्क्रिप्ट के बिना प्रश्न का उत्तर देता है।
ब्रेंडन बर्ड

यह और पीएएम उत्तर यहां सबसे अच्छा है, धन्यवाद। अगर आप इससे बच सकते हैं तो कभी भी उन फाइलों को हाथ से न लगाएं।
h4unt3r

1
dka @ dev-04: / $ / sbin / mkhomedir_helper dka dka @ dev-04: / $ cd bash: cd: / home / dka: ऐसी कोई फ़ाइल या निर्देशिका नहीं
दिमित्री गोपरीवा

@DimitriKopriwa क्या आपने इसे मूल के रूप में आज़माया है sudo /sbin/mkhomedir_helper dka? /homeनिर्देशिका के अंतर्गत आता है rootउपयोगकर्ता, और इसलिए मैं कल्पना कर सकते हैं एक उसके उप-निर्देशिका बनाने के लिए रूट होना जरूरी होगा।
जोनाथन

15

आपको मैन्युअल रूप से उपयोगकर्ता निर्देशिका बनाने की आवश्यकता होगी। इसके लिए तीन चरणों की आवश्यकता है:

  1. के अनुपालन में निर्देशिका बनाएं /etc/passwd, आमतौर पर पहले से ही एक / घर / लॉगिन प्रविष्टि होगी।
  2. प्रारंभिक फाइलों को / etc / skel से कॉपी करें
  3. और अंत में सही अनुमतियां सेट करें:

    • mkdir /home/YOU
    • cd /home/YOU
    • cp -r /etc/skel/. .
    • chown -R YOU.YOURGROUP .
    • chmod -R go=u,go-w .
    • chmod go= .

BTW: मैं हमेशा -museradd के लिए विकल्प भी याद करता हूँ । कम से कम डेबियन आधारित सिस्टम में एक adduserकमांड होनी चाहिए , जिसे मैं यूजरड पर सलाह देता हूं। यदि आप -mविकल्प चूक गए हैं तो यह विचार करने के लायक भी हो सकता है deluserऔर फिर उपयोगकर्ता को उचित विकल्पों के साथ फिर से बना सकता है ।

संपादित करें: -rनिर्देशिकाओं की प्रतिलिपि बनाने के लिए भी जोड़ा गया ।


ऐसा किया: उपयोगकर्ता नाम = myusername; mkdir / home / $ उपयोगकर्ता नाम; cp / etc / skel / * /etc/skel/.* / home / $ उपयोगकर्ता नाम; chown -R $ username: $ username / home / $ उपयोगकर्ता नाम; chmod -R 755 / होम / $ उपयोगकर्ता नाम;
अकी

व्यक्तिगत रूप से मुझे 755 chmod पसंद नहीं है, क्योंकि यह उपयोगकर्ताओं को घर के अन्य उपयोगकर्ताओं की जासूसी करने की अनुमति देता है। मुझे लगता है कि प्रत्येक उपयोगकर्ता को स्पष्ट रूप से दूसरों तक पहुंच प्रदान करनी चाहिए। जैसा कि public_htmlकम से कम xबिट सेट की जरूरत है , मैं chmod 0711प्रत्येक घर पर public_htmlऔर समान निर्देशिकाओं को डिफ़ॉल्ट रूप से सुझाऊंगा।
गणित

इसके अलावा, skel के लिए cp -r का उपयोग करें, क्योंकि यह निर्देशिका (.ssh) की नकल नहीं करेगा।
अकी

मेरे सिस्टम पर (ARM पर आर्क लिनक्स) cp -r /etc/skel/.*/ etc में वापस आ जाता है और यहाँ से सभी डेटा (/etc/skel/.* माचिस / etc / skel / .. मैं उम्मीद करता हूं) को कॉपी कर लेता हूं। Superuser.com/a/61619/22153 से समाधान काम करने लगता है: cp -r / etc / skel / home / user (/ home / user कमांड चलाने से पहले मौजूद नहीं होना चाहिए)
zpon

मुझे लगता है कि आप शेल ग्लोबिंग (डॉट) के *साथ विस्तार करते हैं .। तो ..मेल खाता है। क्या मैं सही हू? इस तरह के व्यवहार के कारण कई गोले इसे डिफ़ॉल्ट रूप से अक्षम कर देते हैं। आप किस शेल का उपयोग करते हैं?
गणित

14
mkdir -p /home/john
chown john:john /home/john
usermod -d /home/john john

मुझे विश्वास है कि चाल करना चाहिए


2
यह कहता है usermod: no changes:। और निर्देशिका नहीं बनाई गई है। यह -mविकल्प के साथ भी काम नहीं करता है ।
cd1

1
ठीक है। मुझे पता चला कि यह काम क्यों नहीं करता था, जब तक आप अन्यथा निर्दिष्ट नहीं करते, तब तक useradd केवल $ Home_DIR / घर में उपयोग करते थे। अब यह स्वचालित रूप से इसके बजाय / घर / $ USER में लगता है। एक सस्ता तरीका हो सकता है usermod -d / home / john2 -m john फिर usermod -d / home / john -m चलाएं।
डेविड रिकमैन 15

कोई बात नहीं जो काम नहीं करता है।
डेविड रिकमैन 9:09

1
खैर कम से कम आपने कुछ नया सीखा।
डेविड रिकमैन

1
आप उन नई फ़ाइलों के लिए / etc / skel / + chown पुनरावर्ती की सामग्री की प्रतिलिपि बनाना भूल गए। usermod यहां से काम नहीं करेगा क्योंकि निर्देशिका पंजीकृत थी, लेकिन बनाई नहीं गई, usermod कुछ भी नहीं करेगा।
अकी

9

आप इसे भविष्य में किसी भी उपयोगकर्ता के साथ समस्या से रोकने के लिए pam_mkhomedir जैसी किसी चीज़ का उपयोग कर सकते हैं। pam_mkhomedir एक PAM मॉड्यूल है जो स्वचालित रूप से लॉगिन पर उपयोगकर्ता के होम डायरेक्टरी को बनाता है यदि यह मौजूद नहीं है, और इसे / etc / skel (या जो भी स्किल निर्देशिका आप निर्दिष्ट करते हैं) से फ़ाइलों के साथ पॉप्युलेट करता है।

यह भी एक अच्छी तरह से स्केलेबल दृष्टिकोण है क्योंकि यह इस समस्या को हल करना जारी रखेगा यदि आप कभी भी भविष्य में एलडीएपी जैसी निर्देशिका सेवा पर अपने उपयोगकर्ता भंडार को स्विच करते हैं।


4

मेरे मामले में, होम वॉल्यूम दूषित हो गया था और मैंने तय किया कि इसे स्क्रैच से फिर से बनाया जाए क्योंकि इसमें बहुत अधिक डेटा शामिल नहीं है, लेकिन मैं उपयोगकर्ताओं की लॉगिन जानकारी रखना चाहता हूं, इसलिए मैंने होम स्क्रिप्ट को मैन्युअल रूप से इस स्क्रिप्ट के साथ फिर से बनाया:

#!/bin/bash
cat /etc/passwd | while IFS=: read n x i g c d r
do
  # my system has uid started at 1000, but has nfsnobody at 65534:
  if [[ "$i" -ge 1000 && "$i" -le 65000 && ! -x "$d" ]]
  then
    cp -av /etc/skel "$d"
    chown -R "$i:$g" "$d"
    # may needed in SELinux system:
    restorecon -R "$d"
    # add your chmod as your need:
    chmod -R o-rw "$d"
  fi
done

2

यदि आप /etc/login.defsसमाहित करने के लिए संपादित करते हैं

CREATE_HOME yes

तब तक होम निर्देशिकाओं को किसी भी भविष्य के उपयोगकर्ताओं के लिए स्वचालित रूप से बनाया जाएगा, जब तक कि आप सिस्टम को ऐसा नहीं करने के लिए कहें ।

एक अन्य विकल्प लॉगिन के लिए PAM का उपयोग करना है, और पहले लॉगिन पर होमदिर को स्वचालित रूप से बनाने के लिए pam_mkhomedir मॉड्यूल का उपयोग करना है।


0

एक useraddकरने के बाद मेरा पहला कदम है su - <user>

घर निर्देशिकाओं, प्रतियां कंकाल, आदि बनाता है - कम से कम CentOS 4 बॉक्स पर जो मैं अक्सर करता हूं।


0

उपयोगकर्ता जॉन के साथ लॉगिन करें और एक शेल से लिखें:

xdg-user-dirs-update

बस! Sudo या su का उपयोग न करें, आपको कुछ निर्देशिका बनाने के लिए रूट एक्सेस की आवश्यकता नहीं है। रूट खाते से, आप उपयोग कर सकते हैं:

sudo -u john xdg-user-dirs-update

इस तरह, आप कमांड को जॉन के रूप में निष्पादित करेंगे, जो एक से अधिक उपयोगकर्ता के साथ गलती करने पर उपयोगी हो सकता है।


-1

यह वही है जो mkhomedir_helper $USERNAMEकमांड करता है।


1
दो साल पहले पहले से बताए गए दूसरे जवाब को दोहराकर कोई मूल्य नहीं जोड़ा जाता है।
कास्परड

-2

आप बस संपादित कर सकते हैं / etc / passwd। अंतिम से अंतिम फ़ील्ड उपयोगकर्ता की होम डायरेक्टरी है।

greeblesnort:x:1000:1000:greeblesnort,,,:/home/greeblesnort:/bin/bash

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

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

-2
usermod -d /home/john john

या

usermod --home /home/john john

और पढ़ो

man usermod

;)


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