새로운 사용자를 위해 프로그래밍 방식으로 / etc / skel 복제


11

/etc/skel새 사용자를 위해 복제 될 폴더입니다. /etc/skel폴더 에서 복사 할 규칙을 정의 할 수있는 방법이 있습니까?

예를 들어, 사용자가 만들어지고 이름이 group 인 그룹에 속하는 경우를 제외하고 폴더를 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
useradd16.04 시스템의 맨 페이지에서 데비안 기반 시스템은 사용하지 않는 것이 좋습니다. 이주의 사유가 변경된 경우 답변에 추가 할 수 있습니다. 또한 16.04에 useradd있으며 adduser다른 옵션을 가진 다른 프로그램이므로 명확성을 위해 답변을 편집 할 수 있습니다.
J. Starnes

8
@ J.Starnes adduser명령 에서 사용자 정의 SKEL 디렉토리를 지정하는 것은 불가능하므로을 사용 useradd합니다. " useradd사용자를 추가하기위한 낮은 수준의 유틸리티입니다. 데비안에서는 일반적으로 관리자가 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. 대체 스켈 디렉토리 컨텐츠를 사용자 정의하십시오.

  4. adduserhomedir이 없지만 일반 설정이 있습니다. 줄임표를 적절한 설정으로 바꾸십시오.

    sudo adduser --no-create-home ... bob
    
  5. mkhomedir_helper 대체 skel dir을 기반으로 사용자 homedir을 작성합니다.

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

명령 행에서이 정규식을 설정할 수 없지만 --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같습니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.