خودکارسازی مدیریت کاربر با 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
[ “$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 چندین کار کلیدی را انجام می دهد:
- امتیازات ریشه را تضمین می کند: اسکریپت بررسی می کند که آیا به صورت روت اجرا می شود یا خیر.
- کنشها را ثبت میکند: اقدامات و خطاهای مهم را برای ممیزی و اشکال زدایی ثبت می کند.
- ورودی ها را تأیید می کند: از معتبر بودن نام کاربری و نام گروه اطمینان می دهد.
- کاربران و گروه ها را ایجاد می کند: کاربران و گروه های جدید را همانطور که در یک فایل ورودی مشخص شده است اضافه می کند.
- رمزهای عبور را تنظیم می کند: رمزهای عبور تصادفی را برای کاربران جدید ایجاد و تنظیم می کند.
- دایرکتوری های خانگی را پیکربندی می کند: مجوزهای مناسب را برای فهرست های اصلی کاربر تنظیم می کند.
توضیح مفصل اسکریپت
-
هدر اسکریپت و ورود به سیستم
اسکریپت با تعریف یک تابع ورود به سیستم برای ثبت اقدامات و خطاها در یک فایل گزارش شروع می شود.
#!/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 ثبت نام کنید