cmod.ify

[LINUX] 사용자 계정 생성 스크립트 본문

BASIC/LINUX

[LINUX] 사용자 계정 생성 스크립트

modifyC 2026. 1. 16. 19:51
728x90
반응형

1) 시나리오 및 주요 기능

  • 입력 데이터: 사용자 계정 리스트와 해당 패스워드 리스트.
  • 유효성 검사: 인자값(계정, 비번)이 입력되지 않으면 사용법을 출력하고 종료함.
  • 중복 체크: /etc/passwd 파일을 조회하여 이미 존재하는 계정인지 확인 후 생성함.
  • 반복 처리: for 문을 사용하여 리스트 내의 모든 사용자를 순차적으로 생성함.

2) 관련 핵심 명령어

  • useradd: 새로운 사용자 계정 생성.
  • passwd: 계정의 비밀번호 설정. 스크립트 내에서는 echo "비번" | passwd --stdin "계정" 형태나 표준 입력을 활용함.
  • wc -l: 결과값의 라인 수를 카운트하여 존재 여부(0 또는 1)를 판단함.

3) 스크립트 코드 작성 (sudo nano adduser-script.sh)

#!/bin/bash

if [[ -n $1 ]] && [[ -n $2 ]]
then
  # 인자값을 배열로 변환
  UserList=($1)
  Password=($2)

  for (( i=0; i < ${#UserList[@]}; i++ ))
  do
    # 1. 계정 존재 여부 확인 (grep -w로 정확한 아이디만 체크)
    if [[ $(cat /etc/passwd | grep -w ${UserList[$i]} | wc -l) == 0 ]]
    then
      # 2. 계정 생성
      useradd ${UserList[$i]}
      
      # 3. 비밀번호 설정 (passwd 대신 chpasswd 사용)
      # '아이디:비밀번호' 형식을 파이프로 넘김
      echo "${UserList[$i]}:${Password[$i]}" | chpasswd
      
      echo "User ${UserList[$i]} created and password set."
    else
      echo "this user ${UserList[$i]} is existing"
    fi
  done
  echo "Job Finished: Success"
else
  echo -e "Usage: $0 'user01 user02' 'pw01! pw02!'"
fi

4) 스크립트 실행 및 테스트

작성한 스크립트에 실행 권한을 부여한 뒤, 관리자 권한(sudo)으로 실행해야 함.

실행 명령어:

# 권한 부여
chmod +x adduser-script.sh

# 실행 (쌍따옴표로 묶어서 여러 명 전달)
sudo ./adduser-script.sh 'u1 u2' 'Pass1234@@@C Pass1234!@@@B'

5) 코드 포인트 정리

  • [[ -n $1 ]]: 첫 번째 인자값이 비어 있지 않은지 확인하는 조건문임.
  • ${#UserList[@]}: 배열에 담긴 요소의 전체 개수를 반환함.
  • grep -w: 정확히 일치하는 단어만 찾도록 하여 user1을 찾을 때 user11이 걸리는 간섭을 방지함.

[부록] 생성된 유저 삭제 및 정리하기

실습을 마치고 테스트로 만든 유저들을 지우고 싶을 때 사용하는 방법임.

1. 개별 유저 삭제 (userdel)

가장 기본이 되는 명령어로, 계정 정보를 시스템에서 제거함.

  • 단순 삭제: sudo userdel 유저명
  • 완전 삭제 (권장): 유저의 홈 디렉토리와 메일함까지 싹 다 지우려면 -r 옵션을 꼭 붙여야 함.
    sudo userdel -r u1
    

2. 여러 유저 한꺼번에 지우기 (반복문 활용)

실습할 때 여러 명을 만들었다면, 일일이 지우기 귀찮으므로 for 문을 사용함.

# u1, u2를 한 번에 삭제
for name in u1 u2
do
    sudo userdel -r $name
    echo "$name 삭제 완료"
done

3. 삭제 확인하기

유저가 진짜 지워졌는지 확인하려면 /etc/passwd 파일에서 해당 이름이 남아있는지 체크하면 됨

grep "u1" /etc/passwd
# 아무 결과도 나오지 않으면 정상적으로 삭제된 것임
728x90
반응형