مدیریت خودکار کاربران و گروه ها با اسکریپت Bash

Summarize this content to 400 words in Persian Lang
بسیار خوب، ما اینجا هستیم تا گردش کار SysOps شما را با یک اسکریپت ساده Bash تغییر دهیم که مدیریت کاربر و گروه را بدون دردسر خودکار می کند.
این پست وبلاگ بخشی از مجموعهای است که با هدف حفظ دانش برای راهنمای خودآموزی آینده من از طریق ایجاد پروژههای بیشتر با این ماهیت به من کمک میکند با فنآوران همفکر ارتباط برقرار کنم. به من بپیوندید تا نحوه خودکارسازی مدیریت کاربر و گروه را بطور یکپارچه با یک اسکریپت Bash بررسی کنیم.
بیا شروع کنیم!
این پیش نیازها را دنبال کنید و می توانید اسکریپت bash خود را اجرا کنید
– محیط لینوکس:
یک محیط لینوکس متناسب با نیاز خود انتخاب کنید. برای این وبلاگ، من استفاده می کنم Kali OS نسخه 2022.4 (مبتنی بر دبیان).
– کد ویژوال استودیو را نصب کنید (اختیاری، می توانید اسکریپت را در ترمینال با استفاده از ویرایشگرهایی مانند Vim، Vi یا Nano اجرا کنید)
– ایجاد دایرکتوری های لازم:
اطمینان حاصل کنید که دایرکتوری های مورد نیاز اسکریپت در دسترس هستند.sudo mkdir -p /var/secure/
– تنظیم مجوزها:
مجوزهای مناسب را برای فهرست ها و فایل ها تنظیم کنید.sudo touch /var/log/user_management.logsudo touch /var/secure/user_passwords.csvsudo chmod 600 /var/secure/user_passwords.csv
– برنامه های کاربردی مورد نیاز را نصب کنید:
مطمئن شوید که همه ابزارهای ضروری نصب شده اند. اینها معمولاً از قبل نصب شده اند، اما همیشه می توانید دوباره آنها را بررسی کنید.sudo apt-get updatesudo apt-get install passwd coreutils openssl
– فایل Bash خود را آماده کنید:
#!/bin/bashکد اجرا شده در پوسته Bash را مشخص می کند
اسکریپت خود را برای اجرا در روت مشخص کنید
if [ “$EUID” -ne 0 ]; thenecho “This script must be run as root”exit 1fiاگر از اسکریپت کد در روت استفاده نکنید، یک پیام خطا هشدار می دهد
تابعی برای ثبت مهر زمانی اقدامات
log_action() {echo “$(date +’%Y-%m-%d %H:%M:%S’) – $1” | tee -a “$LOG_FILE”}هر رکورد را با یک مهر زمانی به فایل گزارش ثبت می کند. دستور tee -a پیام را به فایل log اضافه می کند و همچنین آن را در ترمینال نمایش می دهد.
عملکرد ایجاد کاربر و اختصاص گروه ها
create_user() {
local username=”$1″
local groups=”$2″
هنگام فراخوانی تابع create_user با دو آرگومان، آرگومان اول در متغیر نام کاربری ذخیره می شود که همچنین آرگومان (‘$1’) را به عنوان اولین آرگومان نشان می دهد و آرگومان دوم در متغیر گروه ها (‘$1′) ذخیره می شود.
فضای خالی را کوتاه کنیدusername=$(echo “$username” | xargs)groups=$(echo “$groups” | xargs)در حین استفاده از دستور xargs، هر فضای سفید پیشرو یا انتهایی را از نام کاربری بریده و متغیرها را گروه بندی می کند.
اگر کاربر قبلاً در گزارشها وجود داشته باشد (پرونده) گزارشها را بررسی میکندif id “$username” &>/dev/null; thenlog_action “User $username already exists. (No action taken)”returnfiاین کد بررسی می کند که آیا کاربر مشخص شده توسط نام کاربری وجود دارد یا خیر، و در این صورت، یک پیام را ثبت می کند و بدون انجام هیچ اقدام دیگری از عملکرد خارج می شود.
در صورت عدم وجود گروه برای کاربر ایجاد کنیدif ! getent group “$username” &>/dev/null; thengroupadd “$username”log_action “Group $username created.”fiاگر گروه از دست رفته باشد، به سادگی گروه کاربری جدیدی ایجاد می کند.
ایجاد کاربر با فهرست اصلی و اضافه کردن گروهuseradd -m -g “$username” -s /bin/bash “$username”log_action “User $username created with directory and group $username.”به سادگی کاربر جدیدی ایجاد می کند.
یک رمز عبور رند برای کاربر جدید ایجاد کنیدpassword=$(openssl rand -base64 12)echo “$username:$password” | chpasswdlog_action “Password for $username.”این کد یک رمز عبور تصادفی برای کاربر جدید ایجاد می کند، آن را تنظیم می کند و عملیات را ثبت می کند.
ذخیره ایمن رمز عبورecho “$username,$password” | tee -a “$PASSWORD_FILE”مقادیر ذخیره شده در $username و $password آنها را در یک رشته که با کاما از هم جدا شده است ترکیب می کند و سپس این رشته را به فایل مشخص شده توسط $PASSWORD_FILE اضافه می کند و در پایانه نیز چاپ می شود.
در صورت مشخص شدن، کاربر را به گروه های اضافی اضافه کنیدif [ -n “$groups” ]; thenIFS=’,’ read -r -a group_array
for group in “${group_array[@]}”; dogroup=$(echo “$group” | xargs)if ! getent group “$group” &>/dev/null; thengroupadd “$group”log_action “Group $group created.”fiusermod -aG “$group” “$username”log_action “User $username added to group $group.”donefi}
بررسی کنید که آیا فایل ورودی ارائه شده است یا از پرچم دستی استفاده شده است
if [ -z “$1” ]; thenecho “Usage: $0 or $0 –manual”exit 1fi
اکشن لاگ و استرواژ رمز عبور را تعریف کنید LOG_FILE=”/var/log/user_management.log”PASSWORD_FILE=”/var/secure/user_passwords.csv”
از وجود دایرکتوری ها و فایل لاگ اطمینان حاصل کنیدmkdir -p /var/secure/touch “$LOG_FILE”touch “$PASSWORD_FILE”chmod 600 “$PASSWORD_FILE”
خروجی اشکال زداییecho “DEBUG: LOG_FILE=$LOG_FILE”echo “DEBUG: PASSWORD_FILE=$PASSWORD_FILE”if [ “$1” == “–manual” ]; thenecho “Enter the username:”read usernameecho “Enter the groups ( use comma seperation for more than ONE group (e.g: dev,devops)):”read groupscreate_user “$username” “$groups”elseINPUT_FILE=$1while IFS=’;’ read -r username groups; docreate_user “$username” “$groups”done
filog_action “User creation successful.”echo “User creation successful”
– یک فایل متنی از نامهای کاربری و نامهای گروه کارمندان را میخواند که به صورت کاربر؛ گروهها در هر خط قالببندی شده است:
یک فایل متنی حاوی نام های کاربری و گروه ها در قالب user;groups ایجاد کنید. هر خط باید نشان دهنده یک کاربر و گروه های مرتبط با آنها باشد.
یک فایل متنی ساده به نام “textfile.txt” اضافه کنید و این داده ها را اضافه کنید:
username1;a,adminusername2;devusername3;devops,admin
– اجرای اسکریپت:
دستور اجرایی را اسکریپت کنید سپس آن را اجرا کنید. فایل ‘create_users.sh’ شما به دایرکتوری که فایل شما ذخیره شده است بروید و سپس دستور را اجرا کنید.
chmod +x create_users.sh
در اینجا ما دو روش برای اجرای اسکریپت bash داریم
انتخاب 1 – SUDO ./create_users.sh textfile.txt گزینه 2 – SUDO ./create_users.sh –manual
– نتایج در خط فرمان
-هنگام استفاده از دستور sudo ./create_users.sh textfile.txt نتیجه اینجاست.
هنگام استفاده از دستور sudo ./create_users.sh –manual در اینجا نتیجه است.
– آزمایش کاربر ایجاد شده موجود
وقتی کاربر موجود در گزارشها پیدا شد، ورودی رد شد.
– اگر می خواهید بخشی از تیم باشید به ما بپیوندید
HNGسفر خود را برای تبدیل شدن به یک توسعه دهنده در سطح جهانی از امروز شروع کنید!https://hng.tech
HNG Premiumاز بهترین های بازی یاد بگیرید و در سطح جهانی شوید!https://hng.tech/premium
بسیار خوب، ما اینجا هستیم تا گردش کار SysOps شما را با یک اسکریپت ساده Bash تغییر دهیم که مدیریت کاربر و گروه را بدون دردسر خودکار می کند.
این پست وبلاگ بخشی از مجموعهای است که با هدف حفظ دانش برای راهنمای خودآموزی آینده من از طریق ایجاد پروژههای بیشتر با این ماهیت به من کمک میکند با فنآوران همفکر ارتباط برقرار کنم. به من بپیوندید تا نحوه خودکارسازی مدیریت کاربر و گروه را بطور یکپارچه با یک اسکریپت Bash بررسی کنیم.
بیا شروع کنیم!
این پیش نیازها را دنبال کنید و می توانید اسکریپت bash خود را اجرا کنید
– محیط لینوکس:
یک محیط لینوکس متناسب با نیاز خود انتخاب کنید. برای این وبلاگ، من استفاده می کنم Kali OS نسخه 2022.4 (مبتنی بر دبیان).
– کد ویژوال استودیو را نصب کنید (اختیاری، می توانید اسکریپت را در ترمینال با استفاده از ویرایشگرهایی مانند Vim، Vi یا Nano اجرا کنید)
– ایجاد دایرکتوری های لازم:
اطمینان حاصل کنید که دایرکتوری های مورد نیاز اسکریپت در دسترس هستند.sudo mkdir -p /var/secure/
– تنظیم مجوزها:
مجوزهای مناسب را برای فهرست ها و فایل ها تنظیم کنید.sudo touch /var/log/user_management.log
sudo touch /var/secure/user_passwords.csv
sudo chmod 600 /var/secure/user_passwords.csv
– برنامه های کاربردی مورد نیاز را نصب کنید:
مطمئن شوید که همه ابزارهای ضروری نصب شده اند. اینها معمولاً از قبل نصب شده اند، اما همیشه می توانید دوباره آنها را بررسی کنید.sudo apt-get update
sudo apt-get install passwd coreutils openssl
– فایل Bash خود را آماده کنید:
#!/bin/bash
کد اجرا شده در پوسته Bash را مشخص می کند
- اسکریپت خود را برای اجرا در روت مشخص کنید
if [ "$EUID" -ne 0 ]; then
echo "This script must be run as root"
exit 1
fi
اگر از اسکریپت کد در روت استفاده نکنید، یک پیام خطا هشدار می دهد
- تابعی برای ثبت مهر زمانی اقدامات
log_action() {
echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
هر رکورد را با یک مهر زمانی به فایل گزارش ثبت می کند. دستور tee -a پیام را به فایل log اضافه می کند و همچنین آن را در ترمینال نمایش می دهد.
- عملکرد ایجاد کاربر و اختصاص گروه ها
create_user() {
local username="$1"
local groups="$2"
هنگام فراخوانی تابع create_user با دو آرگومان، آرگومان اول در متغیر نام کاربری ذخیره می شود که همچنین آرگومان (‘$1’) را به عنوان اولین آرگومان نشان می دهد و آرگومان دوم در متغیر گروه ها (‘$1’) ذخیره می شود. -
فضای خالی را کوتاه کنید
username=$(echo "$username" | xargs)
groups=$(echo "$groups" | xargs)
در حین استفاده از دستور xargs، هر فضای سفید پیشرو یا انتهایی را از نام کاربری بریده و متغیرها را گروه بندی می کند. -
اگر کاربر قبلاً در گزارشها وجود داشته باشد (پرونده) گزارشها را بررسی میکند
if id "$username" &>/dev/null; then
log_action "User $username already exists. (No action taken)"
return
fi
این کد بررسی می کند که آیا کاربر مشخص شده توسط نام کاربری وجود دارد یا خیر، و در این صورت، یک پیام را ثبت می کند و بدون انجام هیچ اقدام دیگری از عملکرد خارج می شود. -
در صورت عدم وجود گروه برای کاربر ایجاد کنید
if ! getent group "$username" &>/dev/null; then
groupadd "$username"
log_action "Group $username created."
fi
اگر گروه از دست رفته باشد، به سادگی گروه کاربری جدیدی ایجاد می کند. -
ایجاد کاربر با فهرست اصلی و اضافه کردن گروه
useradd -m -g "$username" -s /bin/bash "$username"
log_action "User $username created with directory and group $username."
به سادگی کاربر جدیدی ایجاد می کند. -
یک رمز عبور رند برای کاربر جدید ایجاد کنید
password=$(openssl rand -base64 12)
echo "$username:$password" | chpasswd
log_action "Password for $username."
این کد یک رمز عبور تصادفی برای کاربر جدید ایجاد می کند، آن را تنظیم می کند و عملیات را ثبت می کند. -
ذخیره ایمن رمز عبور
echo "$username,$password" | tee -a "$PASSWORD_FILE"
مقادیر ذخیره شده در $username و $password آنها را در یک رشته که با کاما از هم جدا شده است ترکیب می کند و سپس این رشته را به فایل مشخص شده توسط $PASSWORD_FILE اضافه می کند و در پایانه نیز چاپ می شود. -
در صورت مشخص شدن، کاربر را به گروه های اضافی اضافه کنید
if [ -n "$groups" ]; then
IFS=',' read -r -a group_array
for group in "${group_array[@]}"; do
group=$(echo "$group" | xargs)
if ! getent group "$group" &>/dev/null; then
groupadd "$group"
log_action "Group $group created."
fi
usermod -aG "$group" "$username"
log_action "User $username added to group $group."
done
fi
} -
بررسی کنید که آیا فایل ورودی ارائه شده است یا از پرچم دستی استفاده شده است
if [ -z "$1" ]; then
echo "Usage: $0
exit 1
fi
-
اکشن لاگ و استرواژ رمز عبور را تعریف کنید
LOG_FILE="/var/log/user_management.log"
PASSWORD_FILE="/var/secure/user_passwords.csv" -
از وجود دایرکتوری ها و فایل لاگ اطمینان حاصل کنید
mkdir -p /var/secure/
touch "$LOG_FILE"
touch "$PASSWORD_FILE"
chmod 600 "$PASSWORD_FILE" -
خروجی اشکال زدایی
echo "DEBUG: LOG_FILE=$LOG_FILE"
echo "DEBUG: PASSWORD_FILE=$PASSWORD_FILE"
if [ "$1" == "--manual" ]; then
echo "Enter the username:"
read username
echo "Enter the groups ( use comma seperation for more than ONE group (e.g: dev,devops)):"
read groups
create_user "$username" "$groups"
else
INPUT_FILE=$1
while IFS=';' read -r username groups; do
create_user "$username" "$groups"
done
fi
log_action "User creation successful."
echo "User creation successful"
– یک فایل متنی از نامهای کاربری و نامهای گروه کارمندان را میخواند که به صورت کاربر؛ گروهها در هر خط قالببندی شده است:
یک فایل متنی حاوی نام های کاربری و گروه ها در قالب user;groups ایجاد کنید. هر خط باید نشان دهنده یک کاربر و گروه های مرتبط با آنها باشد.
یک فایل متنی ساده به نام “textfile.txt” اضافه کنید و این داده ها را اضافه کنید:
username1;a,admin
username2;dev
username3;devops,admin
– اجرای اسکریپت:
دستور اجرایی را اسکریپت کنید سپس آن را اجرا کنید. فایل ‘create_users.sh’ شما به دایرکتوری که فایل شما ذخیره شده است بروید و سپس دستور را اجرا کنید.
chmod +x create_users.sh
در اینجا ما دو روش برای اجرای اسکریپت bash داریم
انتخاب 1 – SUDO ./create_users.sh textfile.txt
گزینه 2 – SUDO ./create_users.sh --manual
– نتایج در خط فرمان
-هنگام استفاده از دستور sudo ./create_users.sh textfile.txt نتیجه اینجاست.
هنگام استفاده از دستور sudo ./create_users.sh –manual در اینجا نتیجه است.
– آزمایش کاربر ایجاد شده موجود
وقتی کاربر موجود در گزارشها پیدا شد، ورودی رد شد.
– اگر می خواهید بخشی از تیم باشید به ما بپیوندید
HNG
سفر خود را برای تبدیل شدن به یک توسعه دهنده در سطح جهانی از امروز شروع کنید!
https://hng.tech
HNG Premium
از بهترین های بازی یاد بگیرید و در سطح جهانی شوید!
https://hng.tech/premium