برنامه نویسی

خودکارسازی کاربر و ایجاد گروه با اسکریپت Bash

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

اهداف

کاربران و گروه های شخصی آنها را ایجاد کنید.کاربران را به گروه های مشخص اضافه کنید.
دایرکتوری های خانگی را با مجوزهای مناسب تنظیم کنید.رمزهای عبور تصادفی را تولید و ذخیره کنید.
همه اقدامات را برای اهداف حسابرسی ثبت کنید.

الزامات

فایل ورودی: یک فایل متنی حاوی نام‌های کاربری و گروه‌هایی که به‌عنوان نام کاربری، گروه 1، گروه 2 فرمت شده است.
Log File: یک فایل گزارش برای ثبت تمام اقدامات.
فایل رمز عبور: فایلی برای ذخیره ایمن رمزهای عبور ایجاد شده.

شروع کنیم

اول از همه، در ابتدای هر اسکریپت پوسته ای که می نویسیم، خط اول را با خطی به نام یک شروع می کنیم. “شبنگ”، جذاب به نظر می رسد درست است؟

#!/bin/bash

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

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

حضور الف شبنگ نشان می دهد که یک فایل قابل اجرا است.

اکنون که از راه خارج شده است، می توانیم به جزئیات آبدار برویم.

مقداردهی اولیه اسکریپت

اسکریپت با تعیین مکان های فایل log و فایل رمز عبور شروع می شود (شما می توانید نام این فایل ها را هر چه بخواهید، نام گذاری کنید):

LOGFILE=”/var/log/user_management.log”
PASSWORD_FILE=”/var/secure/user_passwords.csv”

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

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

ورودی فایل را بررسی کنید

اسکریپت بررسی می کند که آیا یک فایل ورودی به عنوان آرگومان ارائه شده است:

if [ -z “$1” ]; then
echo “Usage: $0 ”
exit 1
fi

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

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

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

فایل های لاگ و رمز عبور ایجاد کنید

این قطعه کد دایرکتوری ها و فایل های لازم را ایجاد می کند و مجوزهای مناسب را تنظیم می کند:

mkdir -p /var/secure
touch $LOGFILE $PASSWORD_FILE
chmod 600 $PASSWORD_FILE

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

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

ما یک دایرکتوری به نام “/var/secure/” ایجاد می کنیم که رمزهای عبور ما را حفظ می کند. پس از آن دو فایلی که در بالا برای لاگ و ذخیره رمز عبور تعریف شده بود ایجاد می کنیم. در حال تغییر $PASSWORD_FILE ما با chmod 600 اطمینان حاصل می کند که فقط کاربر با مجوزهای مناسب می تواند آن را مشاهده کند (که اتفاقاً کاربر فعلی است که ما به عنوان وارد شده ایم).

ایجاد تابع رمز عبور تصادفی

ما یک تابع برای ایجاد چند کلمه عبور تصادفی و امن برای کاربران مختلف خود خواهیم نوشت.

generate_random_password() {
local length=${1:-10} # Default length is 10 if no argument is provided
LC_ALL=C tr -dc ‘A-Za-z0-9!?%+=’

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

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

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

LC_ALL=C: محلی سیستم را روی POSIX تنظیم می کند
tr -dc ‘A-Za-z0-9!?%+=’: این دستور برای ترجمه و حذف کاراکترهایی که در regex نیستند استفاده می شود A-Za-z0-9!?%+=
: uses the Linux kernel’s random number generator and passes the result to the command above.
| head -c $length: طول رشته تصادفی مشخص شده را خروجی می دهد.

ایجاد تابع کاربر

این create_user() تابع ایجاد کاربران و گروه های آنها را مدیریت می کند. دو آرگومان نیاز دارد: نام کاربری و گروه ها.

create_user() {
local username=$1
local groups=$2

if getent passwd “$username” > /dev/null; then
echo “User $username already exists” | tee -a $LOGFILE
else
useradd -m $username
echo “Created user $username” | tee -a $LOGFILE
fi

# Add user to specified groupsgroup
groups_array=($(echo $groups | tr “,” “\n”))

for group in “${groups_array[@]}”; do
if ! getent group “$group” >/dev/null; then
groupadd “$group”
echo “Created group $group” | tee -a $LOGFILE
fi
usermod -aG “$group” “$username”
echo “Added user $username to group $group” | tee -a $LOGFILE
done

# Set up home directory permissions
chmod 700 /home/$username
chown $username:$username /home/$username
echo “Set up home directory for user $username” | tee -a $LOGFILE

# Generate a random password
password=$(generate_random_password 12)
echo “$username:$password” | chpasswd
echo “$username,$password” >> $PASSWORD_FILE
echo “Set password for user $username” | tee -a $LOGFILE
}

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

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

بشکنیمش…..

بررسی اینکه آیا کاربر از قبل وجود دارد یا خیر

if id “$username” > /dev/null; then
echo “User $username already exists” | tee -a $LOGFILE
else
useradd -m $username
echo “Created user $username” | tee -a $LOGFILE
fi

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

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

اگر کاربری وجود داشته باشد، اسکریپت ما آن را ثبت می‌کند و به سمت دیگری حرکت می‌کند، کاربر ایجاد می‌شود و سپس وارد سیستم می‌شود.

توجه داشته باشید: > /dev/null در حال ارسال پاسخ به null است تا با لاگ های ما تداخل نداشته باشد.

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

افزودن کاربر به گروه های مشخص شده

سپس به اضافه کردن کاربران به گروه های مختلف آنها ادامه می دهیم

groups_array=($(echo $groups | tr “,” “\n”))
for group in “${groups_array[@]}”; do
if ! getent group “$group” > /dev/null; then
groupadd “$group”
echo “Created group $group” | tee -a $LOGFILE
fi
usermod -aG “$group” “$username”
echo “Added user $username to group $group” | tee -a $LOGFILE
done

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

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

قطعه کد رشته های گروه ها را با کاما تقسیم می کند و آنها را در یک متغیر group_array ذخیره می کند. سپس از طریق هر گروه حلقه می زند و کاربر را به آن اضافه می کند، همچنین مطمئن شوید که اگر گروه وجود نداشته باشد، ایجاد کنید:

راه اندازی مجوزهای فهرست خانه

chmod 700 /home/$username
chown $username:$username /home/$username
echo “Set up home directory for user $username” | tee -a $LOGFILE

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

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

chmod 700 /home/$username:: مجوزهای دایرکتوری خانگی را تنظیم می کند تا فقط کاربر دسترسی کامل (خواندن، نوشتن، اجرا) داشته باشد.

chown $username:$username /home/$username: مالکیت فهرست اصلی را به کاربر مشخص شده و گروه آنها تغییر می دهد.

echo “Set up home directory for user $username” | tee -a $LOGFILE: پیامی را ثبت می کند که تنظیم دایرکتوری خانه را در یک فایل گزارش مشخص شده نشان می دهد.

اختصاص یک رمز عبور تصادفی برای هر کاربر

password=$(generate_random_password 12)
echo “$username:$password” | chpasswd
echo “$username,$password” >> $PASSWORD_FILE
echo “Set password for user $username” | tee -a $LOGFILE

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

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

این قطعه از تابعی که قبلاً نوشتیم برای ایجاد رمز عبور استفاده می کند، رمز عبور کاربر را به رمز عبور تولید شده به روز می کند، نام کاربری و رمز عبور مربوطه را در رمز عبور ذخیره می کند. $PASSWORD_FILE و در نهایت پیامی را ثبت می کند که نشان می دهد با موفقیت تغییر کرده است.

خواندن فایل ورودی

اسکریپت فایل ورودی را خط به خط می خواند و با را فراخوانی می کند create_user() تابع برای هر خط و ارسال $username و $groups به عنوان آرگومان:

while IFS=’;’ read -r username groups; do
create_user “$username” “$groups”
done

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

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

حالا همه چیز را کنار هم بگذار…

#!/bin/bash

# Log file location
LOGFILE=”/var/log/user_management.log”
PASSWORD_FILE=”/var/secure/user_passwords.csv”

# Check if the input file is provided
if [ -z “$1” ]; then
echo “Error: No file was provided”
echo “Usage: $0 ”
exit 1
fi

# Create log and password files
mkdir -p /var/secure
touch $LOGFILE $PASSWORD_FILE
chmod 600 $PASSWORD_FILE

generate_random_password() {
local length=${1:-10} # Default length is 10 if no argument is provided
LC_ALL=C tr -dc ‘A-Za-z0-9!?%+=’ /dev/null; then
echo “User $username already exists” | tee -a $LOGFILE
else
useradd -m $username
echo “Created user $username” | tee -a $LOGFILE
fi

# Add user to specified groupsgroup
groups_array=($(echo $groups | tr “,” “\n”))

for group in “${groups_array[@]}”; do
if ! getent group “$group” >/dev/null; then
groupadd “$group”
echo “Created group $group” | tee -a $LOGFILE
fi
usermod -aG “$group” “$username”
echo “Added user $username to group $group” | tee -a $LOGFILE
done

# Set up home directory permissions
chmod 700 /home/$username
chown $username:$username /home/$username
echo “Set up home directory for user $username” | tee -a $LOGFILE

# Generate a random password
password=$(generate_random_password 12)
echo “$username:$password” | chpasswd
echo “$username,$password” >> $PASSWORD_FILE
echo “Set password for user $username” | tee -a $LOGFILE
}

# Read the input file and create users
while IFS=’;’ read -r username groups; do
create_user “$username” “$groups”
done

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

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

نتیجه

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

برای کسب اطلاعات بیشتر و شروع سفر برنامه نویسی خود می توانید از:https://hng.tech/internship یا https://hng.tech/premium

در صورت تمایل با سوالات یا پیشنهادات برای بهبود تماس بگیرید. خودکارسازی مبارک!

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

اهداف

  • کاربران و گروه های شخصی آنها را ایجاد کنید.
    کاربران را به گروه های مشخص اضافه کنید.

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

  • همه اقدامات را برای اهداف حسابرسی ثبت کنید.

الزامات

  • فایل ورودی: یک فایل متنی حاوی نام‌های کاربری و گروه‌هایی که به‌عنوان نام کاربری، گروه 1، گروه 2 فرمت شده است.
  • Log File: یک فایل گزارش برای ثبت تمام اقدامات.
  • فایل رمز عبور: فایلی برای ذخیره ایمن رمزهای عبور ایجاد شده.

شروع کنیم

اول از همه، در ابتدای هر اسکریپت پوسته ای که می نویسیم، خط اول را با خطی به نام یک شروع می کنیم. “شبنگ”، جذاب به نظر می رسد درست است؟

#!/bin/bash
وارد حالت تمام صفحه شوید

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

حضور الف شبنگ نشان می دهد که یک فایل قابل اجرا است.

اکنون که از راه خارج شده است، می توانیم به جزئیات آبدار برویم.

مقداردهی اولیه اسکریپت

اسکریپت با تعیین مکان های فایل log و فایل رمز عبور شروع می شود (شما می توانید نام این فایل ها را هر چه بخواهید، نام گذاری کنید):

LOGFILE="/var/log/user_management.log"
PASSWORD_FILE="/var/secure/user_passwords.csv"
وارد حالت تمام صفحه شوید

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

ورودی فایل را بررسی کنید

اسکریپت بررسی می کند که آیا یک فایل ورودی به عنوان آرگومان ارائه شده است:

if [ -z "$1" ]; then
  echo "Usage: $0 "
  exit 1
fi
وارد حالت تمام صفحه شوید

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

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

فایل های لاگ و رمز عبور ایجاد کنید

این قطعه کد دایرکتوری ها و فایل های لازم را ایجاد می کند و مجوزهای مناسب را تنظیم می کند:

mkdir -p /var/secure
touch $LOGFILE $PASSWORD_FILE
chmod 600 $PASSWORD_FILE
وارد حالت تمام صفحه شوید

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

ما یک دایرکتوری به نام “/var/secure/” ایجاد می کنیم که رمزهای عبور ما را حفظ می کند. پس از آن دو فایلی که در بالا برای لاگ و ذخیره رمز عبور تعریف شده بود ایجاد می کنیم. در حال تغییر $PASSWORD_FILE ما با chmod 600 اطمینان حاصل می کند که فقط کاربر با مجوزهای مناسب می تواند آن را مشاهده کند (که اتفاقاً کاربر فعلی است که ما به عنوان وارد شده ایم).

ایجاد تابع رمز عبور تصادفی

ما یک تابع برای ایجاد چند کلمه عبور تصادفی و امن برای کاربران مختلف خود خواهیم نوشت.

generate_random_password() {
    local length=${1:-10} # Default length is 10 if no argument is provided
    LC_ALL=C tr -dc 'A-Za-z0-9!?%+=' 
وارد حالت تمام صفحه شوید

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

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

  • LC_ALL=C: محلی سیستم را روی POSIX تنظیم می کند

  • tr -dc 'A-Za-z0-9!?%+=': این دستور برای ترجمه و حذف کاراکترهایی که در regex نیستند استفاده می شود A-Za-z0-9!?%+=

  • : uses the Linux kernel's random number generator and passes the result to the command above.

  • | head -c $length: طول رشته تصادفی مشخص شده را خروجی می دهد.

ایجاد تابع کاربر

این create_user() تابع ایجاد کاربران و گروه های آنها را مدیریت می کند. دو آرگومان نیاز دارد: نام کاربری و گروه ها.

create_user() {
  local username=$1
  local groups=$2

  if getent passwd "$username" > /dev/null; then
    echo "User $username already exists" | tee -a $LOGFILE
  else
    useradd -m $username
    echo "Created user $username" | tee -a $LOGFILE
  fi

  # Add user to specified groupsgroup
  groups_array=($(echo $groups | tr "," "\n"))

  for group in "${groups_array[@]}"; do
    if ! getent group "$group" >/dev/null; then
      groupadd "$group"
      echo "Created group $group" | tee -a $LOGFILE      
    fi
    usermod -aG "$group" "$username"
    echo "Added user $username to group $group" | tee -a $LOGFILE
  done

  # Set up home directory permissions
  chmod 700 /home/$username
  chown $username:$username /home/$username
  echo "Set up home directory for user $username" | tee -a $LOGFILE

  # Generate a random password
  password=$(generate_random_password 12) 
  echo "$username:$password" | chpasswd
  echo "$username,$password" >> $PASSWORD_FILE
  echo "Set password for user $username" | tee -a $LOGFILE
}
وارد حالت تمام صفحه شوید

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

بشکنیمش…..

  • بررسی اینکه آیا کاربر از قبل وجود دارد یا خیر
if id "$username" > /dev/null; then
  echo "User $username already exists" | tee -a $LOGFILE
else
  useradd -m $username
  echo "Created user $username" | tee -a $LOGFILE
fi
وارد حالت تمام صفحه شوید

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

اگر کاربری وجود داشته باشد، اسکریپت ما آن را ثبت می‌کند و به سمت دیگری حرکت می‌کند، کاربر ایجاد می‌شود و سپس وارد سیستم می‌شود.

توجه داشته باشید: > /dev/null در حال ارسال پاسخ به null است تا با لاگ های ما تداخل نداشته باشد.

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

  • افزودن کاربر به گروه های مشخص شده

سپس به اضافه کردن کاربران به گروه های مختلف آنها ادامه می دهیم

groups_array=($(echo $groups | tr "," "\n"))
for group in "${groups_array[@]}"; do
  if ! getent group "$group" > /dev/null; then
    groupadd "$group"
    echo "Created group $group" | tee -a $LOGFILE
  fi
  usermod -aG "$group" "$username"
  echo "Added user $username to group $group" | tee -a $LOGFILE
done
وارد حالت تمام صفحه شوید

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

قطعه کد رشته های گروه ها را با کاما تقسیم می کند و آنها را در یک متغیر group_array ذخیره می کند. سپس از طریق هر گروه حلقه می زند و کاربر را به آن اضافه می کند، همچنین مطمئن شوید که اگر گروه وجود نداشته باشد، ایجاد کنید:

  • راه اندازی مجوزهای فهرست خانه
chmod 700 /home/$username
chown $username:$username /home/$username
echo "Set up home directory for user $username" | tee -a $LOGFILE
وارد حالت تمام صفحه شوید

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

chmod 700 /home/$username:: مجوزهای دایرکتوری خانگی را تنظیم می کند تا فقط کاربر دسترسی کامل (خواندن، نوشتن، اجرا) داشته باشد.

chown $username:$username /home/$username: مالکیت فهرست اصلی را به کاربر مشخص شده و گروه آنها تغییر می دهد.

echo "Set up home directory for user $username" | tee -a $LOGFILE: پیامی را ثبت می کند که تنظیم دایرکتوری خانه را در یک فایل گزارش مشخص شده نشان می دهد.

  • اختصاص یک رمز عبور تصادفی برای هر کاربر
password=$(generate_random_password 12) 
echo "$username:$password" | chpasswd
echo "$username,$password" >> $PASSWORD_FILE
echo "Set password for user $username" | tee -a $LOGFILE
وارد حالت تمام صفحه شوید

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

این قطعه از تابعی که قبلاً نوشتیم برای ایجاد رمز عبور استفاده می کند، رمز عبور کاربر را به رمز عبور تولید شده به روز می کند، نام کاربری و رمز عبور مربوطه را در رمز عبور ذخیره می کند. $PASSWORD_FILE و در نهایت پیامی را ثبت می کند که نشان می دهد با موفقیت تغییر کرده است.

خواندن فایل ورودی

اسکریپت فایل ورودی را خط به خط می خواند و با را فراخوانی می کند create_user() تابع برای هر خط و ارسال $username و $groups به عنوان آرگومان:

while IFS=';' read -r username groups; do
  create_user "$username" "$groups"
done 
وارد حالت تمام صفحه شوید

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

حالا همه چیز را کنار هم بگذار…

#!/bin/bash

# Log file location
LOGFILE="/var/log/user_management.log"
PASSWORD_FILE="/var/secure/user_passwords.csv"

# Check if the input file is provided
if [ -z "$1" ]; then
  echo "Error: No file was provided"
  echo "Usage: $0 "
  exit 1
fi

# Create log and password files
mkdir -p /var/secure
touch $LOGFILE $PASSWORD_FILE
chmod 600 $PASSWORD_FILE

generate_random_password() {
    local length=${1:-10} # Default length is 10 if no argument is provided
    LC_ALL=C tr -dc 'A-Za-z0-9!?%+='  /dev/null; then
    echo "User $username already exists" | tee -a $LOGFILE
  else
    useradd -m $username
    echo "Created user $username" | tee -a $LOGFILE
  fi

  # Add user to specified groupsgroup
  groups_array=($(echo $groups | tr "," "\n"))

  for group in "${groups_array[@]}"; do
    if ! getent group "$group" >/dev/null; then
      groupadd "$group"
      echo "Created group $group" | tee -a $LOGFILE      
    fi
    usermod -aG "$group" "$username"
    echo "Added user $username to group $group" | tee -a $LOGFILE
  done

  # Set up home directory permissions
  chmod 700 /home/$username
  chown $username:$username /home/$username
  echo "Set up home directory for user $username" | tee -a $LOGFILE

  # Generate a random password
  password=$(generate_random_password 12) 
  echo "$username:$password" | chpasswd
  echo "$username,$password" >> $PASSWORD_FILE
  echo "Set password for user $username" | tee -a $LOGFILE
}

# Read the input file and create users
while IFS=';' read -r username groups; do
  create_user "$username" "$groups"
done 
وارد حالت تمام صفحه شوید

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

نتیجه

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

برای کسب اطلاعات بیشتر و شروع سفر برنامه نویسی خود می توانید از:
https://hng.tech/internship یا https://hng.tech/premium

در صورت تمایل با سوالات یا پیشنهادات برای بهبود تماس بگیرید. خودکارسازی مبارک!

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

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

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

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