사용자 생성 후 홈 디렉토리 생성


68

나는 다음을 사용하여 일부 사용자를 만들었습니다.

$ useradd john

-m홈 디렉토리를 만들고 각 사용자에게 뼈대 파일을 복사 하는 매개 변수를 지정하는 것을 잊었습니다 . 이제 그렇게하고 싶습니다. 모든 사용자를 다시 만들고 싶지 않습니다 (더 쉬운 방법이 있어야 함). 따라서 사용자 디렉토리를 만들고 골격 파일을 복사하는 방법이 있습니까?

디렉토리를 만들고 해당 사용자에게 호칭하고 모든 스켈레톤 파일을 복사하여 해당 사용자에게 호핑하는 것에 대해 생각했습니다. 그러나 이와 같은 명령이 있으면 useradd -m사용자를 다시 만들지 않고 디렉토리를 만들면 더 좋습니다.


이 문제는 많은 사용자 목록에서 발생 했습니까?
David Rickman

나는이 문제를 가진 약 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
예, 새로운 UID와 GID를 만들었지 만 작동했지만 문제는 없었습니다. 하지만 / etc / shadow에서 비밀번호를 백업하는 것을 잊었습니다. 이제 사용자는 비밀번호를 다시 설정해야합니다 = /
cd1

그가 최근에 작성한 경우 다음을 수행 할 수 있습니다. cat / etc / passwd | egrep '^ \ : [0-9] {4} \ :'| cut -f 1 -d :> /tmp/users.list 시스템 사용자가 아닌 유효한 사용자의 UID 만 가져와야합니다.
David Rickman

암호는 어떻게 유지됩니까? 나는 두려워하지 않는다!
math

for i in $(awk -F: '{print $1 }' /etc/passwd)
Rahul Patil

왜 고양이와 파이프로 grep이나 cut을 사용합니까? cut -f 1 -d : </ etc / passwd> passwtmp
c4f4t0r

97

또한 사용할 수 있습니다 mkhomedir_helper

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

13
이것은 실제로 10 줄 스크립트없이 질문에 대답하는 유일한 대답입니다.
Brendan Byrd

이것과 pam 답변이 가장 좋습니다. 감사합니다. 피할 수 있다면 손으로 그 파일들을 엉망으로 만들지 마십시오.
h4unt3r

1
DKA @ DEV-04 : / $ / sbin에 / mkhomedir_helper DKA DKA DEV-04 @ : / $ CD를 bash는 : CD / 홈 / DKA : 해당 파일이나 디렉토리
디미트리 Kopriwa

@DimitriKopriwa 예를 들어 루트로 사용해 보셨습니까 sudo /sbin/mkhomedir_helper dka? /home디렉토리는에 속하는 root사용자, 그래서 내가 하나가 그 하위 디렉토리를 만들 수있는 루트 할 것이다 상상할 것입니다.
조나단

15

사용자 디렉토리를 수동으로 작성해야합니다. 세 단계가 필요합니다.

  1. 를 준수하여 디렉토리를 작성하십시오 /etc/passwd. 일반적으로 / home / login 항목이 이미 있습니다.
  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 옵션도 항상 그리워합니다 . 최소한 데비안 기반 시스템에는 adduseruseradd보다 권장 하는 명령 이 있어야합니다 . -m옵션 을 놓친 경우 deluser적절한 옵션을 사용하여 사용자를 고려한 후 다시 작성하는 것이 좋습니다.

편집 : -r디렉토리를 복사하기 위해 추가되었습니다 .


그렇게 했습니까 : usernameh = myusername; mkdir / home / $ usernameh; cp / etc / skel / * /etc/skel/.* / home / $ usernameh; chown -R $ usernameh : $ usernameh / home / $ usernameh; chmod -R 755 / home / $ usernameh;
Aki

개인적으로 나는 755 chmod를 좋아하지 않습니다. 사용자가 다른 사용자를 집으로 감시 할 수 있기 때문입니다. 각 사용자는 명시 적으로 다른 사용자에게 액세스 권한을 부여해야한다고 생각합니다. 으로 public_html필요 이상의 x비트 세트, 내가 추천 할 것입니다 chmod 0711각 가정에, public_html기본적으로 유사한 디렉토리.
math

또한 디렉토리 (.ssh)를 복사하지 않으므로 skel에 cp -r을 사용하십시오.
Aki

내 시스템 (Arch Linux on ARM)에서 cp -r /etc/skel/.*다시 / etc /로 돌아가서 여기에서 모든 데이터를 복사합니다 (/etc/skel/.*는 / etc / skel /.과 일치합니다). superuser.com/a/61619/22153 의 솔루션 이 작동하는 것 같습니다 : cp -r / etc / skel / home / user (/ home / user는 명령을 실행하기 전에 존재하지 않아야 함)
zpon

쉘 글 로빙 *.(점)으로 확장 되는 것 같습니다 . 그래서 ..일치합니다. 내가 맞아? 이러한 동작으로 인해 많은 셸에서 기본적으로이 기능을 비활성화합니다. 어떤 쉘을 사용하십니까?
math

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을 / home에만 넣었습니다. 이제 자동으로 / home / $ USER에 넣는 것 같습니다. 가장 저렴한 방법은 usermod -d / home / john2 -m john을 실행 한 다음 usermod -d / home / john -m을 실행하는 것입니다.
David Rickman

작동하지 않습니다.
David Rickman

1
적어도 당신은 새로운 것을 배웠습니다.
David Rickman

1
새 파일에 대해 / etc / skel / + chown 재귀의 내용을 복사하는 것을 잊었습니다. 디렉토리가 등록되었지만 작성되지 않은 이후로 usermod가 작동하지 않습니다. usermod는 아무것도하지 않습니다.
Aki

9

pam_mkhomedir 과 같은 것을 사용 하여 향후 모든 사용자에게 이것이 문제가되지 않도록 할 수 있습니다 . pam_mkhomedir은 로그인시 사용자 홈 디렉토리가없는 경우 자동으로 사용자의 홈 디렉토리를 작성하고 / etc / skel (또는 지정한 skel 디렉토리)의 파일로 채우는 PAM 모듈입니다.

이는 나중에 사용자 저장소를 LDAP와 같은 디렉토리 서비스로 전환 한 경우에도이 문제를 계속 해결하기 때문에 확장 성이 뛰어납니다.


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 모듈을 사용하여 첫 번째 로그인에서 자동으로 homedir을 작성하는 것입니다.


0

를 한 후의 첫 번째 단계 useraddsu - <user>입니다.

홈 디렉토리를 생성하고, 스켈레톤 등을 복사합니다-적어도 CentOS 4 상자에서 가장 자주 수행합니다.


0

사용자 john로 로그인하고 쉘에서 작성하십시오.

xdg-user-dirs-update

그게 다야! sudo 또는 su를 사용하지 마십시오. 일부 디렉토리를 작성하기 위해 루트 액세스가 필요하지 않습니다. 루트 계정에서 다음을 사용할 수 있습니다.

sudo -u john xdg-user-dirs-update

이렇게하면 john 명령을 실행하게되며, 둘 이상의 사용자에게 실수를 한 경우 유용 할 수 있습니다.


-1

이것이 바로 mkhomedir_helper $USERNAME명령이하는 일입니다.


1
2 년 전에 다른 답변에서 이미 설명한 내용을 반복해도 아무런 가치가 없습니다.
kasperd

-2

/ etc / passwd를 간단히 편집 할 수 있습니다. 마지막 필드의 두 번째 필드는 사용자의 홈 디렉토리입니다.

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

그들은 이미 생성되었습니다. 홈 디렉토리는 스위치를 잊었 기 때문에 작성되지 않았습니다.
David Rickman

나는 사용자의 홈 디렉토리를 변경하려는 것이 아니라 사용자를 추가 한 후 디렉토리를 만들고 골격 파일을 적절한 권한으로 복사하려고했습니다 .
cd1

-2
usermod -d /home/john john

또는

usermod --home /home/john john

읽고

man usermod

;)


2
질문은 그보다 더 복잡하며 이미 더 나은 답변을 가지고 있습니다.
Esa Jokinen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.