Linux에서 여러 사용자를 생성하는 방법에 대한 질문이 있는데 이를 처리하려면 프로그램이 필요합니다. 다음 내용으로 새 users.txt 파일을 만듭니다.
adams:5000:Adams, John Couch:/bin/bash
atiyah:5001:Atiyah, Michael:/bin/csh
babbage:5002:Babbage, Charles:/bin/csh
baker:5003:Baker, Alan:/bin/csh
barrow:5004:Barrow, Isaac:/bin/bash
...(파일에는 70개의 사용자 이름이 있습니다)
이러한 사용자를 자동으로 추가하는 스크립트를 작성하는 방법을 알고 싶습니다.
답변1
파일 이름이 이라고 가정하면 file
이 스크립트는 다음을 수행합니다.
USERNAME=$(cat file | cut -d: -f1)
echo "$USERNAME"
ID=$(cat file | cut -d: -f2)
echo "$ID"
USER_SHELL=$(cat file | cut -d, -f2 | cut -d: -f2)
echo "$USER_SHELL"
useradd -m -s "$USER_SHELL" -u "$ID" "$USERNAME"
답변2
이것은 작업을 완료하는 최소한의 스크립트입니다. 사용자 이름이나 uid가 사용 중이 아닌지 확인합니다. 각 사용자에 대해 일치하는 그룹을 생성합니다(gid=uid 사용). gid 또는 그룹 이름이 이미 존재하는지 확인하지 않습니다(독자의 연습용으로 남겨두었습니다. 힌트: 사용 getent group
).
참고: 아래 스크립트는 테스트되지 않았지만 이전에 유사한 스크립트를 백만 번 작성했습니다(약간 과장)...수정해야 할 몇 가지 사소한 버그가 있을 수 있습니다.
#! /bin/bash
# get newusers file from first arg on cmd line or default to 'newusers.txt'
nf="${1:-newusers.txt}"
# get existing usernames and uids.
names="^($(getent passwd | cut -d: -f1 | paste -sd'|'))$"
uids="^($(getent passwd | cut -d: -f3 | paste -sd'|'))$"
yesterday=$(date -d yesterday +%Y-%m-%d)
# temp file for passwords
tf=$(mktemp) ; chmod 600 "$tf"
while IFS=: read u uid gecos shell; do
gid="$uid" ; homedir="/home/$u"
useradd -e "$yesterday" -m -d "$homedir" -c "$gecos" \
-u "$uid" -g "$gid" -s "$shell" "$u"
groupadd -g "$gid" "$u"
# generate a random password for each user..
p=$(makepasswd)
echo "$u:$p" >> "$tf"
done < <(awk -F: '$1 !~ names && $2 !~ uids' names="$names" uids="$uids" "$nf")
# uncomment to warn about users not created:
#echo Users not created because the username or uid already existed: >&2
#awk -F: '$1 ~ names || $2 ~ uids' names="$names" uids="$uids" "$nf" >&2
# uncomment the cat to display the passwords in the terminal
echo ; echo "passwords are saved in $tf"
# cat "$tf"
# set passwords using `chpasswd:
chpasswd < "$tf"
설치되어 있지 않은 경우 pwgen
또는 makepassword
이와 유사한 프로그램을 사용하십시오. makepasswd
또는 4개 이상의 임의의 5개 이상의 문자 단어를 연결하여 최소 20자 길이의 기억하기 쉬운 암호를 얻으십시오. 일부 단어를 대문자로 만들고 각 단어 숫자 및/또는 구두점 사이에 임의의 1-3을 삽입하여 암호를 균등하게 더 길게 만들고 무차별 대입 검색 공간을 늘리십시오. 무작위 비밀번호 생성은 여러 번 재발명되었습니다.
사용자 이름과 비밀번호( 에서)를 인쇄 "$tf"
하고 이를 스트립(각 스트립 사이에 빈 줄을 남겨두기 user:password
)으로 잘라서 각 사용자에게 제공할 수 있습니다. 즉시 비밀번호를 변경하고 메모를 파기하라고 안내하세요. 비밀번호는 만료되도록 설정되어 있으므로 "$yesterday"
(GNU 필요 date
) 사용자가 쉘에 처음 로그인할 때 비밀번호를 변경하라는 메시지가 표시되어야 합니다.
답변3
일괄 모드의 파일에서 사용자를 추가하거나 업데이트하는 더 쉬운 방법은 다음과 같습니다 newusers(8)
.그림자도구 스위치. 이 도구 모음은 최소한 Debian 및 그 파생 제품용 패키지로 제공되어야 합니다. 제가 사용하고 있는 Arch Linux에서 사용할 수 있습니다.
사용 방법에 대한 자세한 내용은 다음을 참조하세요.man newusers