नए उपयोगकर्ताओं के लिए प्रोग्रामिक क्लोन / etc / skel


11

/etc/skelएक फ़ोल्डर है जिसे नए उपयोगकर्ताओं के लिए क्लोन किया जाएगा। क्या कोई संभव तरीका है कि हम नियमों को परिभाषित कर सकते हैं कि /etc/skelफ़ोल्डर से क्या कॉपी करें ?

उदाहरण के लिए, मैं एक ऐसा तरीका ढूंढ रहा हूं कि यदि कोई उपयोगकर्ता बनाया गया है और नाम समूह के अंतर्गत आता है A, तो क्लोन /etc/skelफ़ोल्डर को छोड़कर /etc/skel/not_for_a.txt। मुमकिन?

जवाबों:


11

ध्यान दें कि useraddकमांड आपको -kविकल्प का उपयोग करके एक कस्टम SKEL निर्देशिका निर्दिष्ट करने की अनुमति देता है। आप एक / etc / skel-for-group-A निर्देशिका बना सकते हैं not-for-a.txt, और उसके बाद अपने डिफ़ॉल्ट समूह के साथ A के रूप में नए उपयोगकर्ता जोड़ सकते हैं, और कमांड का उपयोग करके अपनी SKEL निर्देशिका निर्दिष्ट कर सकते हैं:

useradd username -g groupA -k /etc/skel-for-group-A -m

देखें: http://manpages.ubuntu.com/manpages/trusty/man8/useradd.8.html


1
useraddमेरे 16.04 सिस्टम पर मैन पेज में डेबियन आधारित सिस्टम के लिए हतोत्साहित किया गया है। यदि इस सावधानी का कारण बदल गया है तो आप इसे अपने उत्तर में जोड़ सकते हैं। 16.04 पर भी useraddऔर adduserविभिन्न विकल्पों के साथ अलग-अलग कार्यक्रम हैं, शायद आप अपने उत्तर को स्पष्टता के लिए संपादित कर सकते हैं।
जे। स्टार्न्स

8
@ J.Starnes कस्टम SKEL निर्देशिका निर्दिष्ट करने के लिए adduserकमांड में संभव नहीं है , इसलिए हम उपयोग करते हैं useradd। यह पूरी तरह से हतोत्साहित नहीं किया गया है: " useraddउपयोगकर्ताओं को जोड़ने के लिए एक निम्न स्तर की उपयोगिता है। डेबियन पर, प्रशासकों को आमतौर परadduser इसके बजाय उपयोग करना चाहिए ।" इस तरह की असामान्य परिस्थितियों में इस कमांड का उपयोग करना ठीक है।
मुकेश साई कुमार

8
  1. अतिरिक्त skelनिर्देशिका बनाएं ।

    sudo mkdir /etc/skel{A,B}
    
  2. की सामग्री की प्रतिलिपि /etc/skelकरने के लिए /etc/skelA

    sudo cp /etc/skel/* /etc/skelA/
    
  3. वैकल्पिक स्कील निर्देशिका सामग्री को अनुकूलित करें।

  4. adduserएक होमडायर के बिना, लेकिन अन्यथा सामान्य सेटिंग्स के साथ। उपयुक्त सेटिंग्स के साथ दीर्घवृत्त बदलें।

    sudo adduser --no-create-home ... bob
    
  5. mkhomedir_helper वैकल्पिक स्किल डायर के आधार पर उपयोगकर्ताओं को बनाने के लिए।

    sudo mkhomedir_helper bob /etc/skelA
    
#!/bin/bash
### a bare bones dumb script to create a user with a homedir based on an alternitive skeldir
adduseropt="--no-create-home --ingroup"
# assumes $1 will be user TODO add sanity check
# Assumes $2 will be alternitive skeldir TODO add sanity check
# assumes $3 will be a group TODO add sanity check
sudo adduser --no-create-home $adduseropt $3 $1
sudo mkhomedir_helper $1 $2

3

adduserकंकाल निर्देशिका से फ़ाइलों को बाहर करने के लिए एक सीमित तरीके का समर्थन करता है। से man adduser.conf:

SKEL_IGNORE_REGEX
    Files  in  /etc/skel/  are  checked  against this regex, and not
    copied to the newly created home directory if they match.   This
    is  by default set to the regular expression matching files left
    over from unmerged config files (dpkg-(old|new|dist)).

जब आप इस regex को कमांड लाइन से सेट नहीं कर सकते हैं, तो आप --confविकल्प का उपयोग करके उपयोग की गई कॉन्फ़िगरेशन फ़ाइल को सेट कर सकते हैं । इसलिए आप /etc/adduser.confकेवल SKEL_IGNORE_REGEXउन पर अतिरिक्त प्रतियां बना सकते हैं , और उन का उपयोग कर सकते हैं:

(grep -v '^SKEL_IGNORE_REGEX' /etc/adduser.conf; printf "%s\n" 'SKEL_IGNORE_REGEX="not_for_a.txt"') > /etc/adduser_A.txt
sudo adduser --conf /etc/adduser_A.txt ...

3

adduserआदेश फ़ाइलों को हटाने की तरह किसी भी सेटअप करने के लिए एक साइट विशिष्ट स्क्रिप्ट चला सकते हैं। जब तक यह एक पूर्ण प्रति के साथ शुरू करने और फिर बाद में कुछ फ़ाइलों को हटाने के लिए स्वीकार्य है, तब तक यह दृष्टिकोण आपके लिए काम कर सकता है।

से adduser (8) आदमी पेज :

यदि फ़ाइल /usr/local/sbin/adduser.local मौजूद है, तो उपयोगकर्ता खाता किसी भी स्थानीय सेटअप को करने के लिए स्थापित होने के बाद इसे निष्पादित किया जाएगा। adduser.localनिम्न तर्क दिए गए हैं:

उपयोगकर्ता नाम uid gid होम-डायरेक्टरी

तो आपको बस एक स्क्रिप्ट लिखने की ज़रूरत है जो चार मापदंडों को लेती है और इसका उपयोग आपकी ज़रूरत की किसी भी फ़ाइल को निकालने के लिए करती है। इसे सहेजें /usr/local/sbin/adduser.localऔर सुनिश्चित करें कि यह निष्पादन योग्य ( chmod a+x) चिह्नित है ।

यहाँ कुछ आप शुरू करने के लिए है:

#!/bin/bash
## Site-specific setup for newly-created users.
## adduser(8) will call this script after setting up a new user.

set -euo pipefail
if [[ "$#" != 4 ]]; then
  echo "usage: $0 username uid gid home" > /dev/stderr
fi
NEW_USERNAME="${1:?}"
NEW_UID="${2:?}"
NEW_GID="${3:?}"
NEW_HOME="${4:?}"

# The groups command outputs a space-separated list of group names
IFS=' '
for group in $(groups "${NEW_USERNAME}"); do
   case "${group}" in
     a)
       [[ "${VERBOSE}" > 0 ]] && echo Removing file for a
       rm "${NEW_HOME}/not_for_a.txt"
       ;;
     b)
       [[ "${VERBOSE}" > 0 ]] && echo Removing dir for b
       rm -r "${NEW_HOME}/not_for_b/"
       ;;
     *)
       [[ "${VERBOSE}" > 1 ]] && echo No special setup required for $group
       ;;
   esac
done

दिलचस्प हिस्सा, जिसे आप संपादित करना चाहते हैं, वे लाइनें हैं जो इस तरह दिखती हैं:

     a)
       [[ "${VERBOSE}" > 0 ]] && echo Removing file for a
       rm "${NEW_HOME}/not_for_a.txt"
       ;;

आप वास्तविक समूह का नाम और व्यवहार भर सकते हैं जिसे आप a)और के बजाय देखना चाहते हैं rm not_for_a.txt

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