리눅스 사용자 계정 관리 자동화 스크립트 구현하기

리눅스 서버를 운영하다 보면 사용자 계정을 생성하고 관리하는 일이 반복적으로 발생합니다. 특히 교육용 서버, 개발 테스트 환경, 또는 다수의 인원이 협업하는 프로젝트에서는 수십 명의 계정을 빠르게 생성하고, 필요 시 삭제하거나 권한을 조정해야 할 일이 빈번합니다. 이 글에서는 사용자 계정 생성뿐 아니라 삭제, 조회까지 자동화할 수 있는 통합 스크립트를 소개합니다.

1단계 글에서 부족한 부분을 아래 해당되는 내용으로 수정본 구성하였습니다.

계정 관리, 왜 자동화해야 할까?

수동으로 useradd, passwd, usermod, userdel 명령어를 반복하는 것은 시간이 오래 걸릴 뿐 아니라 실수의 여지도 큽니다. 특히 비밀번호를 직접 설정하거나 sudo 권한을 부여할 때 오타나 누락이 발생하면 보안상 큰 문제가 될 수 있습니다. 자동화된 스크립트를 사용하면 다음과 같은 장점이 있습니다

  • 사용자 수에 따라 반복 작업을 자동 처리
  • 비밀번호를 무작위로 생성하여 보안 강화
  • sudo 권한 여부를 선택적으로 부여
  • 생성된 사용자 정보를 백업 파일로 저장
  • 계정 삭제 시 안전하게 확인 및 처리
  • 현재 사용자 및 그룹 목록을 조회하여 관리 상태 파악

통합 사용자 관리 스크립트의 구성

이 스크립트는 다음과 같은 기능을 제공합니다:

  1. 사용자 생성
    • 사용자 수를 입력받아 루프를 돌며 계정 생성
    • 아이디, 그룹명, sudo 권한 여부를 직접 입력
    • 비밀번호는 영문 대소문자, 숫자, 특수문자를 포함한 10자리 무작위 생성
    • 그룹이 존재하지 않으면 자동 생성
    • 생성된 사용자 정보는 텍스트 파일로 백업
  2. 사용자 삭제
    • 현재 시스템에 존재하는 일반 사용자 목록을 출력
    • 삭제할 사용자 아이디를 입력받아 존재 여부 확인
    • 삭제 전 사용자에게 확인을 요청하여 실수 방지
    • userdel -r 명령어로 홈 디렉토리까지 안전하게 삭제
  3. 사용자 목록 조회
    • /etc/passwd 파일에서 UID가 1000 이상인 일반 사용자만 필터링
    • 시스템 계정(nobody, daemon 등)은 제외
  4. 그룹 목록 조회
    • /etc/group 파일에서 전체 그룹명을 출력
    • 그룹 구성 상태를 빠르게 파악 가능

스크립트 실행 흐름

스크립트를 실행하면 다음과 같은 메뉴가 출력됩니다

사용자 관리 작업을 선택하세요:
1) 사용자 생성
2) 사용자 삭제
3) 사용자 목록 조회
4) 그룹 목록 조회

사용자는 원하는 작업 번호를 입력하면 해당 기능이 실행됩니다. 예를 들어 1을 입력하면 사용자 생성 루틴으로 넘어가고, 2를 입력하면 삭제 루틴이 실행됩니다.

비밀번호 생성 방식

보안 강화를 위해 비밀번호는 urandom을 활용하여 다음과 같이 생성됩니다

password=$(tr -dc 'A-Za-z0-9!@#$%^&*' </dev/urandom | head -c 10)

이 방식은 특수문자를 포함한 10자리의 강력한 비밀번호를 생성하며, 사람이 직접 입력하지 않기 때문에 예측 가능성이 낮습니다. 생성된 비밀번호는 백업 파일에 저장되므로 초기 로그인 후 사용자에게 전달하거나, 비밀번호 변경을 강제할 수 있습니다.

백업 파일 관리

스크립트는 사용자 정보를 다음 형식으로 백업합니다

아이디: test1 | 비밀번호: Ab3#xYz9!Q | 그룹: dev | sudo 권한 있음

백업 파일은 user_backup_날짜_시간.txt 형식으로 저장되며, 민감한 정보를 포함하므로 다음 명령어로 권한을 제한하는 것이 좋습니다.

#!/bin/bash

BACKUP_FILE="user_backup_$(date +%Y%m%d_%H%M%S).txt"

# 사용자 전체 조회 함수
list_users() {
    echo "현재 시스템 사용자 목록:"
    awk -F: '$3 >= 1000 && $1 != "nobody" { print $1 }' /etc/passwd
}

# 그룹 전체 조회 함수
list_groups() {
    echo "현재 시스템 그룹 목록:"
    cut -d: -f1 /etc/group
}

# 사용자 생성 함수
create_users() {
    read -p "생성할 사용자 수를 입력하세요: " USER_COUNT

    for ((i=1; i<=USER_COUNT; i++)); do
        echo "[$i/$USER_COUNT] 사용자 정보를 입력하세요."

        read -p "아이디: " username
        read -p "부여할 그룹명 (없으면 엔터): " group
        read -p "sudo 권한 부여? (yes/no): " sudo

        password=$(tr -dc 'A-Za-z0-9!@#$%^&*' </dev/urandom | head -c 10)

        if [ -n "$group" ]; then
            if ! getent group "$group" > /dev/null; then
                groupadd "$group"
                echo "그룹 '$group' 생성됨."
            fi
            useradd -m -g "$group" "$username"
        else
            useradd -m "$username"
        fi

        echo "$username:$password" | chpasswd

        if [ "$sudo" == "yes" ]; then
            usermod -aG sudo "$username"
            sudo_status="sudo 권한 있음"
        else
            sudo_status="sudo 권한 없음"
        fi

        echo "아이디: $username | 비밀번호: $password | 그룹: ${group:-없음} | $sudo_status" >> "$BACKUP_FILE"
        echo "사용자 '$username' 생성 완료"
    done

    echo "모든 사용자 생성이 완료되었습니다."
    echo "사용자 정보 백업 파일: $BACKUP_FILE"
}

# 사용자 삭제 함수
delete_user() {
    echo "삭제 가능한 사용자 목록:"
    awk -F: '$3 >= 1000 && $1 != "nobody" { print $1 }' /etc/passwd

    read -p "삭제할 사용자 아이디를 입력하세요: " target

    if id "$target" &>/dev/null; then
        read -p "'$target' 계정을 정말 삭제하시겠습니까? (yes/no): " confirm
        if [ "$confirm" == "yes" ]; then
            userdel -r "$target"
            echo "사용자 '$target' 삭제 완료"
        else
            echo "삭제 취소됨"
        fi
    else
        echo "사용자 '$target'는 존재하지 않습니다."
    fi
}

# 메뉴 선택
echo "사용자 관리 작업을 선택하세요:"
echo "1) 사용자 생성"
echo "2) 사용자 삭제"
echo "3) 사용자 목록 조회"
echo "4) 그룹 목록 조회"
read -p "번호 입력: " choice

case "$choice" in
    1) create_users ;;
    2) delete_user ;;
    3) list_users ;;
    4) list_groups ;;
    *) echo "잘못된 선택입니다." ;;
esac

실무 적용 팁

  • 교육용 서버에서는 계정 생성 후 chage -d 0 명령어로 비밀번호 변경을 강제할 수 있습니다.
  • 협업 환경에서는 그룹을 활용해 파일 접근 권한을 제어하고, umaskACL 설정을 통해 세부 권한을 조정할 수 있습니다.
  • 삭제 기능은 실수 방지를 위해 반드시 사용자 목록을 먼저 출력하고, 삭제 전 확인을 받도록 설계되어 있습니다.

마무리

리눅스 사용자 계정 관리는 단순한 명령어 입력을 넘어서, 체계적인 접근이 필요합니다. 이 통합 스크립트는 계정 생성부터 삭제, 조회까지 한 번에 처리할 수 있어 실무 환경에서 매우 유용합니다. 반복 작업을 줄이고, 보안과 정확성을 높이고 싶다면 이 스크립트를 활용해보세요.

스크립트는 필요에 따라 SSH 키 등록, 로그인 제한, 비밀번호 만료 설정 등으로 확장할 수 있습니다. 사용자 관리가 필요한 모든 환경에서 이 자동화 스크립트는 강력한 도구가 되어줄 것입니다.

By Low ahn

리눅스를 처음 접하시는 분들은 위한 다양한 리눅스 정보를 공유합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다