برنامه نویسی

خودکارسازی مدیریت کاربر با Bashscript پیشرفته

Summarize this content to 400 words in Persian Lang
به عنوان بخشی از الزامات کارآموزی DevOps با HNG، من باید یک اسکریپت bash برای خودکارسازی مدیریت کاربر ایجاد کنم.اگر به صورت دستی انجام شود، مدیریت کاربران در محیط لینوکس می تواند یک کار تکراری و مستعد خطا باشد، به خصوص زمانی که با تعداد زیادی کاربر سروکار دارید. برای ساده کردن این فرآیند، می‌توانید از یک اسکریپت bash برای ایجاد خودکار کاربر، تخصیص گروه و مدیریت رمز عبور استفاده کنید. بیایید یک اسکریپت bash جامع را که برای ساده کردن مدیریت کاربر طراحی شده است مرور کنیم. این اسکریپت فهرستی از نام‌های کاربری و گروه‌ها را از یک فایل متنی می‌خواند، کاربران و گروه‌ها را بر اساس آن ایجاد می‌کند، فهرست‌های اصلی را راه‌اندازی می‌کند، رمزهای عبور تصادفی ایجاد می‌کند، و همه اقدامات را برای اهداف ممیزی ثبت می‌کند. می توانید اسکریپت کامل را در مخزن GitHub من پیدا کنید.

این اسکریپت bash چندین کار کلیدی را انجام می دهد:

امتیازات ریشه را تضمین می کند: اسکریپت بررسی می کند که آیا به صورت روت اجرا می شود یا خیر.

کنش‌ها را ثبت می‌کند: اقدامات و خطاهای مهم را برای ممیزی و اشکال زدایی ثبت می کند.

ورودی ها را تأیید می کند: از معتبر بودن نام کاربری و نام گروه اطمینان می دهد.

کاربران و گروه ها را ایجاد می کند: کاربران و گروه های جدید را همانطور که در یک فایل ورودی مشخص شده است اضافه می کند.

رمزهای عبور را تنظیم می کند: رمزهای عبور تصادفی را برای کاربران جدید ایجاد و تنظیم می کند.

دایرکتوری های خانگی را پیکربندی می کند: مجوزهای مناسب را برای فهرست های اصلی کاربر تنظیم می کند.

توضیح مفصل اسکریپت

هدر اسکریپت و ورود به سیستم
اسکریپت با تعریف یک تابع ورود به سیستم برای ثبت اقدامات و خطاها در یک فایل گزارش شروع می شود.

#!/usr/bin/bash

log() {
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) – $1” >> “$LOG_FILE”
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تولید رمز عبور
تابعی برای تولید رمزهای عبور تصادفی تعریف شده است که از /dev/urandom برای تولید اعداد تصادفی ایمن استفاده می کند.

generate_password() {
local password_length=12
tr -dc A-Za-z0-9 /urandom | head -c $password_length
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اطمینان از حقوق ریشه
اسکریپت بررسی می کند که آیا با حقوق ریشه اجرا می شود یا خیر. اگر نه، یک خطا ثبت می کند و خارج می شود. کاربران ریشه دارای شناسه کاربری 0 هستند.

if [ “$(id -u)” -ne 0 ]; then
echo “This script must be run as root or with sudo privileges” >&2
log “Script not run as root or with sudo privileges”
exit 1
fi

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مسیرهای فایل و بررسی های اولیه
اسکریپت مسیرهای فایل را برای فایل ورودی کاربر، فایل لاگ و ذخیره رمز عبور تنظیم می کند. همچنین وجود این فایل ها را تایید می کند.

USER_FILE=”$1″
LOG_FILE=”/var/log/user_management.log”
PASSWORD_FILE=”/var/secure/user_passwords.txt”

if [ -z “$USER_FILE” ]; then
echo “Usage: $0 ”
log “No user file provided. Usage: $0 ”
exit 1
fi

if [ ! -f “$USER_FILE” ]; then
echo “Input file not found”
log “Input file ‘$USER_FILE’ not found”
exit 1
fi

if [ ! -f “$LOG_FILE” ]; then
touch “$LOG_FILE”
chmod 0600 “$LOG_FILE”
log “Log file created: $LOG_FILE”
fi

if [ ! -f “$PASSWORD_FILE” ]; then
mkdir -p /var/secure
touch “$PASSWORD_FILE”
chmod 0600 “$PASSWORD_FILE”
log “Password file created: $PASSWORD_FILE”
fi

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اعتبار سنجی ورودی
اسکریپت نام های کاربری و نام گروه ها را با استفاده از عبارات منظم تایید می کند تا مطمئن شود که آنها فقط دارای نویسه های الفبایی، خط فاصله و زیرخط هستند.

validate_username() {
if [[ ! “$1” =~ ^[a-zA-Z0-9_-]+$ ]]; then
return 1
fi
return 0
}

validate_groups() {
IFS=’,’ read -ra group_list

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد کاربر و گروه
اسکریپت فایل کاربر را خط به خط می خواند و در صورت لزوم کاربران و گروه های آنها را ایجاد می کند. همچنین تضمین می کند که هر کاربر یک گروه شخصی دارد و فهرست خانه را با مجوزهای مناسب تنظیم می کند.

while IFS=’;’ read -r username groups; do
username=$(echo “$username” | xargs)
groups=$(echo “$groups” | xargs)

if [ -z “$username” ] || [ -z “$groups” ]; then
log “Invalid line format in user file: ‘$username;$groups'”
user_creation_failed=true
continue
fi

if ! validate_username “$username”; then
log “Invalid username format: ‘$username'”
user_creation_failed=true
continue
fi

if ! validate_groups “$groups”; then
log “Invalid group format: ‘$groups'”
group_creation_failed=true
continue
fi

if id “$username” &>/dev/null; then
log “User $username already exists.”
continue
fi

all_users_exist=false

if ! getent group “$username” > /dev/null; then
if groupadd “$username”; then
log “Group $username created.”
else
log “Failed to create group $username.”
group_creation_failed=true
continue
fi
fi

IFS=’,’ read -ra group_list /dev/null; then
if groupadd “$group”; then
log “Group $group created.”
else
log “Failed to create group $group.”
group_creation_failed=true
fi
fi
done
unset IFS

if useradd -m -g “$username” -G “$groups” “$username”; then
log “User $username created and added to groups $groups”
users_created=true
any_users_created=true
else
log “Failed to create user $username”
user_creation_failed=true
continue
fi

password=$(generate_password)
log “Generated password for $username”

if echo “$username:$password” | chpasswd; then
echo “$username,$password” >> “$PASSWORD_FILE”
log “Password set for $username and stored securely”
else
log “Failed to set password for $username”
password_setting_failed=true
continue
fi

if chown “$username:$username” “/home/$username” && chmod 700 “/home/$username”; then
log “Home directory for $username set up with appropriate permissions.”
else
log “Failed to set up home directory for $username”
home_directory_setup_failed=true
fi

done

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خلاصه و خروج
پس از پردازش تمام خطوط، اسکریپت خلاصه ای از اقدامات انجام شده را ثبت می کند و از آن خارج می شود.

log “User creation script run completed.”

if [ “$any_users_created” = true ]; then
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) – User creation script completed successfully.”
elif [ “$all_users_exist” = true ]; then
echo “Users already exist. Nothing left to do”
else
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) – No users were created successfully. Check log file.”
log “No users were created successfully. Please check the input file format: username;group1,group2,group3.”
fi

[ “$user_creation_failed” = true ] && echo “Users creation incomplete.” && log “Some users were not created due to errors. Check file format”
[ “$password_setting_failed” = true ] && echo “Users’ passwords creation incomplete.” && log “Some users’ passwords were not set due to errors. Check file format”
[ “$group_creation_failed” = true ] && echo “Groups creation incomplete.” && log “Some groups were not created due to errors. Check file format”
[ “$home_directory_setup_failed” = true ] && echo “Home directories creation incomplete.” && log “Some home directories were not set up due to errors.”

exit 0

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجهاین اسکریپت روشی قابل اعتماد برای خودکارسازی فرآیندهای مرتبط با مدیریت کاربر، کاهش احتمال اشتباهات و صرفه جویی در وقت اداری مهم ارائه می دهد. مدیران سیستم می‌توانند با این اسکریپت حساب‌های کاربری را به شیوه‌ای سازگار و ایمن ایجاد کنند، که همچنین گذرواژه‌ها و تکالیف گروهی را مدیریت می‌کند. گزارش های دقیق برای اهداف پاسخگویی و اشکال زدایی نگهداری می شوند. برای به دست آوردن تجربه کارآموزی در زمان واقعی، با HNG ثبت نام کنید

به عنوان بخشی از الزامات کارآموزی DevOps با HNG، من باید یک اسکریپت bash برای خودکارسازی مدیریت کاربر ایجاد کنم.
اگر به صورت دستی انجام شود، مدیریت کاربران در محیط لینوکس می تواند یک کار تکراری و مستعد خطا باشد، به خصوص زمانی که با تعداد زیادی کاربر سروکار دارید. برای ساده کردن این فرآیند، می‌توانید از یک اسکریپت bash برای ایجاد خودکار کاربر، تخصیص گروه و مدیریت رمز عبور استفاده کنید. بیایید یک اسکریپت bash جامع را که برای ساده کردن مدیریت کاربر طراحی شده است مرور کنیم. این اسکریپت فهرستی از نام‌های کاربری و گروه‌ها را از یک فایل متنی می‌خواند، کاربران و گروه‌ها را بر اساس آن ایجاد می‌کند، فهرست‌های اصلی را راه‌اندازی می‌کند، رمزهای عبور تصادفی ایجاد می‌کند، و همه اقدامات را برای اهداف ممیزی ثبت می‌کند. می توانید اسکریپت کامل را در مخزن GitHub من پیدا کنید.

این اسکریپت bash چندین کار کلیدی را انجام می دهد:

  1. امتیازات ریشه را تضمین می کند: اسکریپت بررسی می کند که آیا به صورت روت اجرا می شود یا خیر.
  2. کنش‌ها را ثبت می‌کند: اقدامات و خطاهای مهم را برای ممیزی و اشکال زدایی ثبت می کند.
  3. ورودی ها را تأیید می کند: از معتبر بودن نام کاربری و نام گروه اطمینان می دهد.
  4. کاربران و گروه ها را ایجاد می کند: کاربران و گروه های جدید را همانطور که در یک فایل ورودی مشخص شده است اضافه می کند.
  5. رمزهای عبور را تنظیم می کند: رمزهای عبور تصادفی را برای کاربران جدید ایجاد و تنظیم می کند.
  6. دایرکتوری های خانگی را پیکربندی می کند: مجوزهای مناسب را برای فهرست های اصلی کاربر تنظیم می کند.

توضیح مفصل اسکریپت

  • هدر اسکریپت و ورود به سیستم
    اسکریپت با تعریف یک تابع ورود به سیستم برای ثبت اقدامات و خطاها در یک فایل گزارش شروع می شود.
#!/usr/bin/bash

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • تولید رمز عبور
    تابعی برای تولید رمزهای عبور تصادفی تعریف شده است که از /dev/urandom برای تولید اعداد تصادفی ایمن استفاده می کند.
generate_password() {
    local password_length=12
    tr -dc A-Za-z0-9 /urandom | head -c $password_length
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • اطمینان از حقوق ریشه
    اسکریپت بررسی می کند که آیا با حقوق ریشه اجرا می شود یا خیر. اگر نه، یک خطا ثبت می کند و خارج می شود. کاربران ریشه دارای شناسه کاربری 0 هستند.
if [ "$(id -u)" -ne 0 ]; then
    echo "This script must be run as root or with sudo privileges" >&2
    log "Script not run as root or with sudo privileges"
    exit 1
fi
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • مسیرهای فایل و بررسی های اولیه
    اسکریپت مسیرهای فایل را برای فایل ورودی کاربر، فایل لاگ و ذخیره رمز عبور تنظیم می کند. همچنین وجود این فایل ها را تایید می کند.
USER_FILE="$1"
LOG_FILE="/var/log/user_management.log"
PASSWORD_FILE="/var/secure/user_passwords.txt"

if [ -z "$USER_FILE" ]; then
    echo "Usage: $0 "
    log "No user file provided. Usage: $0 "
    exit 1
fi

if [ ! -f "$USER_FILE" ]; then
    echo "Input file not found"
    log "Input file '$USER_FILE' not found"
    exit 1
fi

if [ ! -f "$LOG_FILE" ]; then
    touch "$LOG_FILE"
    chmod 0600 "$LOG_FILE"
    log "Log file created: $LOG_FILE"
fi

if [ ! -f "$PASSWORD_FILE" ]; then
    mkdir -p /var/secure
    touch "$PASSWORD_FILE"
    chmod 0600 "$PASSWORD_FILE"
    log "Password file created: $PASSWORD_FILE"
fi
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • اعتبار سنجی ورودی
    اسکریپت نام های کاربری و نام گروه ها را با استفاده از عبارات منظم تایید می کند تا مطمئن شود که آنها فقط دارای نویسه های الفبایی، خط فاصله و زیرخط هستند.
validate_username() {
    if [[ ! "$1" =~ ^[a-zA-Z0-9_-]+$ ]]; then
        return 1
    fi
    return 0
}

validate_groups() {
    IFS=',' read -ra group_list 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • ایجاد کاربر و گروه
    اسکریپت فایل کاربر را خط به خط می خواند و در صورت لزوم کاربران و گروه های آنها را ایجاد می کند. همچنین تضمین می کند که هر کاربر یک گروه شخصی دارد و فهرست خانه را با مجوزهای مناسب تنظیم می کند.
while IFS=';' read -r username groups; do
    username=$(echo "$username" | xargs)
    groups=$(echo "$groups" | xargs)

    if [ -z "$username" ] || [ -z "$groups" ]; then
        log "Invalid line format in user file: '$username;$groups'"
        user_creation_failed=true
        continue
    fi

    if ! validate_username "$username"; then
        log "Invalid username format: '$username'"
        user_creation_failed=true
        continue
    fi

    if ! validate_groups "$groups"; then
        log "Invalid group format: '$groups'"
        group_creation_failed=true
        continue
    fi

    if id "$username" &>/dev/null; then
        log "User $username already exists."
        continue
    fi

    all_users_exist=false

    if ! getent group "$username" > /dev/null; then
        if groupadd "$username"; then
            log "Group $username created."
        else
            log "Failed to create group $username."
            group_creation_failed=true
            continue
        fi
    fi

    IFS=',' read -ra group_list  /dev/null; then
            if groupadd "$group"; then
                log "Group $group created."
            else
                log "Failed to create group $group."
                group_creation_failed=true
            fi
        fi
    done
    unset IFS

    if useradd -m -g "$username" -G "$groups" "$username"; then
        log "User $username created and added to groups $groups"
        users_created=true
        any_users_created=true
    else
        log "Failed to create user $username"
        user_creation_failed=true
        continue
    fi

    password=$(generate_password)
    log "Generated password for $username"

    if echo "$username:$password" | chpasswd; then
        echo "$username,$password" >> "$PASSWORD_FILE"
        log "Password set for $username and stored securely"
    else
        log "Failed to set password for $username"
        password_setting_failed=true
        continue
    fi

    if chown "$username:$username" "/home/$username" && chmod 700 "/home/$username"; then
        log "Home directory for $username set up with appropriate permissions."
    else
        log "Failed to set up home directory for $username"
        home_directory_setup_failed=true
    fi

done 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • خلاصه و خروج
    پس از پردازش تمام خطوط، اسکریپت خلاصه ای از اقدامات انجام شده را ثبت می کند و از آن خارج می شود.
log "User creation script run completed."

if [ "$any_users_created" = true ]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') - User creation script completed successfully."
elif [ "$all_users_exist" = true ]; then
    echo "Users already exist. Nothing left to do"
else
    echo "$(date '+%Y-%m-%d %H:%M:%S') - No users were created successfully. Check log file."
    log "No users were created successfully. Please check the input file format: username;group1,group2,group3."
fi

[ "$user_creation_failed" = true ] && echo "Users creation incomplete." && log "Some users were not created due to errors. Check file format"
[ "$password_setting_failed" = true ] && echo "Users' passwords creation incomplete." && log "Some users' passwords were not set due to errors. Check file format"
[ "$group_creation_failed" = true ] && echo "Groups creation incomplete." && log "Some groups were not created due to errors. Check file format"
[ "$home_directory_setup_failed" = true ] && echo "Home directories creation incomplete." && log "Some home directories were not set up due to errors."

exit 0

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه
این اسکریپت روشی قابل اعتماد برای خودکارسازی فرآیندهای مرتبط با مدیریت کاربر، کاهش احتمال اشتباهات و صرفه جویی در وقت اداری مهم ارائه می دهد. مدیران سیستم می‌توانند با این اسکریپت حساب‌های کاربری را به شیوه‌ای سازگار و ایمن ایجاد کنند، که همچنین گذرواژه‌ها و تکالیف گروهی را مدیریت می‌کند. گزارش های دقیق برای اهداف پاسخگویی و اشکال زدایی نگهداری می شوند. برای به دست آوردن تجربه کارآموزی در زمان واقعی، با HNG ثبت نام کنید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا