सवाल उपयोगकर्ताओं को बनाने के बाद घर निर्देशिका बनाएँ


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

$ useradd john

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

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


57
2017-09-09 14:33


मूल


क्या यह उपयोगकर्ताओं की एक बड़ी सूची के साथ हुआ? - David Rickman
मेरे पास इस समस्या के साथ लगभग 10 उपयोगकर्ता थे। - cd1
मैं मदद नहीं कर सकता लेकिन महसूस करता हूं कि राहुल के पास आपके प्रश्न का सबसे अच्छा जवाब है। शायद आपको अपने स्वीकृत उत्तर पर फिर से जाना चाहिए? - jww


जवाब:


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

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

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

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


15
2017-09-09 15:02



हां, यह काम करता है, हालांकि इसने नए यूआईडी और जीआईडी ​​बनाए हैं (लेकिन यह कोई समस्या नहीं थी)। लेकिन मैं / etc / छाया से पासवर्ड बैकअप करना भूल गया, अब उपयोगकर्ताओं को अपने पासवर्ड फिर से सेट करना होगा = / - cd1
अगर उसने हाल ही में उन्हें बनाया है तो वह ऐसा करने में सक्षम हो सकता है: बिल्ली / आदि / passwd | egrep '^ \: [0-9] {4} \:' | कट-एफ 1-डी:> /tmp/users.list यह केवल वैध उपयोगकर्ताओं के यूआईडी को पकड़ लेना चाहिए, न कि सिस्टम उपयोगकर्ता। - David Rickman
पासवर्ड के बारे में क्या, क्या वे वही रहते हैं? मुझे डर नहीं है! - math
for i in $(awk -F: '{print $1 }' /etc/passwd) - Rahul Patil
बिल्ली के साथ और पाइप के साथ grep या कट का उपयोग क्यों करें, सीधे इस तरह क्यों नहीं? कट-एफ 1-डी: </ etc / passwd> passwtmp - c4f4t0r


आप भी उपयोग कर सकते हैं mkhomedir_helper

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

85
2018-05-17 03:59



यह एकमात्र उत्तर है जो वास्तव में कुछ 10 लाइन स्क्रिप्ट के बिना प्रश्न का उत्तर देता है। - Brendan Byrd
सरल। धन्यवाद! - mawaldne
यह और पाम उत्तर यहां सबसे अच्छा है, धन्यवाद। यदि आप इससे बच सकते हैं तो उन फ़ाइलों के साथ कभी गड़बड़ न करें। - h4unt3r
dka @ dev-04: / $ / sbin / mkhomedir_helper dka dka @ dev-04: / $ cd bash: cd: / home / dka: ऐसी कोई फ़ाइल या निर्देशिका नहीं - BigDong


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

  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= .

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

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


15
2018-05-12 16:14



क्या वह: usernameh = myusername; mkdir / home / $ usernameh; सीपी / आदि / skel / * /etc/skel/.* / घर / $ उपयोगकर्ता नाम; chown -R $ usernameh: $ usernameh / home / $ usernameh; chmod -R 755 / घर / $ उपयोगकर्ता नाम; - Aki
व्यक्तिगत रूप से मुझे 755 chmod पसंद नहीं है, क्योंकि यह उपयोगकर्ताओं को अन्य उपयोगकर्ताओं के घर में जासूसी करने की अनुमति देता है। मुझे लगता है कि प्रत्येक उपयोगकर्ता को स्पष्ट रूप से दूसरों तक पहुंच प्रदान करनी चाहिए। जैसा public_html कम से कम जरूरत है x बिट सेट, मैं सिफारिश करेंगे chmod 0711 प्रत्येक घर पर, public_html और डिफ़ॉल्ट रूप से समान निर्देशिकाएं। - math
भी, skel के लिए cp -r का उपयोग करें, अन्यथा यह निर्देशिका (.ssh) की प्रतिलिपि नहीं करेगा। - Aki
मेरे सिस्टम पर (एआरएम पर आर्क लिनक्स) cp -r /etc/skel/.* / etc / में वापस लौटें और यहां से सभी डेटा कॉपी करें (/etc/skel/.* मैचों / आदि / skel / .. मुझे उम्मीद है)। से समाधान superuser.com/a/61619/22153 काम करने लगते हैं: सीपी-आर / आदि / स्केल / घर / उपयोगकर्ता (/ घर / उपयोगकर्ता आदेश चलाने से पहले मौजूद नहीं होना चाहिए) - zpon
मुझे लगता है कि आप खोल globbing विस्तार * साथ में . (डॉट)। इसलिए .. मिलान किया गया है क्या मैं सही हू? इस तरह के व्यवहार के कारण कई गोले इसे प्रति डिफ़ॉल्ट अक्षम करते हैं। आप किस शेल का उपयोग करते हैं? - math


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

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


12
2017-09-09 14:49



इसे कहते हैं: usermod: no changes। और निर्देशिका नहीं बनाई गई है। यह या तो काम नहीं करता है -m विकल्प। - cd1
ठीक है। मुझे पता चला कि यह क्यों काम नहीं करता है, उपयोगकर्ता द्वारा केवल $ HOME_DIR को / home में डाल दिया जाता है जब तक कि आप अन्यथा निर्दिष्ट नहीं करते हैं। अब यह स्वचालित रूप से इसे / home / $ USER में डाल देता है। एक सस्ता तरीका usermod -d / home / john2 -m जॉन के लिए हो सकता है तो usermod -d / home / john -m चलाएं। - David Rickman
कभी भी काम न करें जो काम नहीं करता है। - David Rickman
खैर कम से कम आपने कुछ नया सीखा। - David Rickman
आप उन नई फ़ाइलों के लिए / etc / skel / + chown recursive की सामग्री कॉपी करने के लिए भूल गए हैं। Usermod यहां काम नहीं करेगा क्योंकि निर्देशिका पंजीकृत थी लेकिन बनाई गई नहीं, Usermod कुछ भी नहीं करेगा। - Aki


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

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


9
2018-05-12 16:29





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

#!/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

4
2017-10-08 16:45





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

CREATE_HOME yes

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

एक और विकल्प लॉग इन के लिए पीएएम का उपयोग करना है, और पहले लॉगिन पर होमएडिर बनाने के लिए pam_mkhomedir मॉड्यूल का उपयोग करना है।


2
2017-12-12 08:28





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

xdg-user-dirs-update

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

sudo -u john xdg-user-dirs-update

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


0
2018-02-07 19:44