โคลน / etc / skel โดยทางโปรแกรมสำหรับผู้ใช้ใหม่


11

/etc/skelเป็นโฟลเดอร์ที่จะถูกโคลนสำหรับผู้ใช้ใหม่ มีวิธีที่เป็นไปได้ที่เราสามารถกำหนดกฎว่าจะคัดลอกจาก/etc/skelโฟลเดอร์หรือไม่?

ตัวอย่างเช่นผมกำลังมองหาวิธีที่หากผู้ใช้ถูกสร้างขึ้นและอยู่ในกลุ่มชื่อAโคลนโฟลเดอร์ยกเว้น/etc/skel /etc/skel/not_for_a.txtไปได้หรือไม่

คำตอบ:


11

โปรดทราบว่าuseraddคำสั่งช่วยให้คุณระบุไดเรกทอรี SKEL ที่กำหนดเองโดยใช้-kตัวเลือก คุณสามารถสร้างไดเรกทอรี / 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มีกำลังใจสำหรับระบบที่ใช้เดเบียนในหน้า man ในระบบ 16.04 ของฉัน หากเหตุผลสำหรับความระมัดระวังนี้เปลี่ยนไปคุณสามารถเพิ่มคำตอบของคุณได้ นอกจากนี้ใน 16.04 useraddและadduserเป็นโปรแกรมที่แตกต่างกับตัวเลือกที่แตกต่างกันบางทีคุณอาจแก้ไขคำตอบของคุณเพื่อความชัดเจน
J. Starnes

8
@ J.Starnes ต้องการระบุไดเรกทอรีสเกลที่กำหนดเองเป็นไปไม่ได้ในคำสั่งเพื่อให้เราใช้adduser useraddมันไม่ได้เป็นกำลังใจอย่างสิ้นเชิง " useraddเป็นสาธารณูปโภคที่มีระดับต่ำสำหรับการเพิ่มผู้ใช้ใน Debian ผู้บริหารควร. มักจะใช้adduserแทน." มันก็โอเคที่จะใช้คำสั่งนี้ภายใต้สถานการณ์ที่ผิดปกติเช่นนี้
Mukesh Sai Kumar

8
  1. สร้างskelไดเรกทอรี เพิ่มเติม

    sudo mkdir /etc/skel{A,B}
    
  2. คัดลอกเนื้อหาของการ /etc/skel/etc/skelA

    sudo cp /etc/skel/* /etc/skelA/
    
  3. ปรับแต่งเนื้อหาไดเรกทอรีทางเลือก skel

  4. adduserไม่มี homedir แต่มีการตั้งค่าปกติเป็นอย่างอื่น แทนที่จุดไข่ปลาด้วยการตั้งค่าที่เหมาะสม

    sudo adduser --no-create-home ... bob
    
  5. mkhomedir_helper เพื่อสร้างผู้ใช้ homedir ตาม skel dir ทางเลือก

    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สนับสนุนวิธีที่ จำกัด ในการแยกไฟล์ออกจากไดเรกทอรี Skeleton จาก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คำสั่งสามารถเรียกใช้สคริปต์เว็บไซต์ที่เฉพาะเจาะจงที่จะทำตั้งค่าใด ๆ เช่นการลบไฟล์ ตราบใดที่ยอมรับได้ว่าเริ่มต้นด้วยการทำสำเนาเต็มรูปแบบแล้วจึงลบบางไฟล์หลังจากนั้นวิธีการนี้จะได้ผลสำหรับคุณ

จากหน้า man adduser (8) :

หากมีไฟล์/usr/local/sbin/adduser.local อยู่ไฟล์นั้นจะถูกเรียกใช้หลังจากที่บัญชีผู้ใช้ถูกตั้งค่าเพื่อทำการตั้งค่าในเครื่อง อาร์กิวเมนต์ที่ส่งผ่านไปยัง adduser.localคือ:

ชื่อผู้ใช้ uid gid home-directory

ดังนั้นสิ่งที่คุณต้องทำคือเขียนสคริปต์ที่ใช้พารามิเตอร์สี่ตัวและใช้มันลบไฟล์ใด ๆ ที่คุณต้องการ บันทึกเป็น/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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.