کامل بازسازی /etc/virtual در DirectAdmin: تعمیر فایل‌ها، ریست پرمیشن‌ها و جلوگیری از خطاهای useradd

این مقاله یک راهنمای جامع برای بازسازی کامل ساختار ایمیل در DirectAdmin است. شامل بازسازی /etc/virtual، تولید مجدد فایل‌های domains و domainowners، تعمیر فولدرهای دامنه، ریست پرمیشن‌های سیستم، و جلوگیری از مشکلات قفل شدن useradd هنگام ری‌استورهای موازی. تمام اسکریپت‌ها و دستورات لازم برای بازیابی امن و دقیق ارائه شده‌اند.

DirectAdmin virtual directoryrebuild /etc/virtualdomainowners repair

~4 دقیقه مطالعه · آخرین به‌روزرسانی ۱۰ اسفند ۱۴۰۴

1. بازسازی کامل دایرکتوری /etc/virtual


اگر دایرکتوری /etc/virtual خراب شده یا فایل‌های مهم آن حذف شده‌اند، می‌توانید با مراحل زیر آن را از صفر بازسازی کنید.


1.1 بک‌آپ گرفتن از نسخه فعلی


cd /etc
cp -Rp virtual virtual.backup

1.2 ایجاد دایرکتوری جدید با پرمیشن صحیح


mkdir -p /etc/virtual
chmod 755 /etc/virtual
chown mail:mail /etc/virtual

1.3 ساخت اسکریپت بازسازی


فایل /root/fix.sh را ایجاد کنید و محتوای زیر را داخل آن قرار دهید:


#!/bin/sh

echo -n '' > /etc/virtual/domains
echo -n '' > /etc/virtual/domainowners

mkdir -p /etc/virtual/`hostname`
chown mail:mail /etc/virtual/`hostname`
chmod 711 /etc/virtual/`hostname`
echo `hostname` >> /etc/virtual/domains

for u in `ls /usr/local/directadmin/data/users`; do
{
    for d in `cat /usr/local/directadmin/data/users/$u/domains.list`; do
    {
        echo "$d: $u" >> /etc/virtual/domainowners
        echo "$d" >> /etc/virtual/domains

        DMN=/etc/virtual/$d

        mkdir -p $DMN
        chmod 711 $DMN
        chown mail:mail $DMN

        touch $DMN/aliases
        if [ ! -s $DMN/aliases ]; then
            echo "$u: $u" > $DMN/aliases
        fi
        touch $DMN/autoresponder.conf
        touch $DMN/filter
        touch $DMN/filter.conf
        touch $DMN/passwd
        touch $DMN/quota
        touch $DMN/vacation.conf
        chown mail:mail $DMN/*

        mkdir -p $DMN/majordomo
        chmod 751 $DMN/majordomo
        chown majordomo:daemon $DMN/majordomo

        mkdir -p $DMN/reply
        chmod 700 $DMN/reply
        chown mail:mail $DMN/reply

        for p in `cat /usr/local/directadmin/data/users/$u/domains/$d.pointers | cut -d= -f1 2>/dev/null`; do
        {
            echo "$p: $u"  >> /etc/virtual/domainowners
            echo "$p" >> /etc/virtual/domains
            ln -s $d /etc/virtual/$p
        };
        done;
    }
    done;
}
done;

chown mail:mail /etc/virtual/domains
chown mail:mail /etc/virtual/domainowners
chmod 644 /etc/virtual/domainowners
chmod 644 /etc/virtual/domains

1.4 اجرای اسکریپت


chmod 755 /root/fix.sh
/root/fix.sh

1.5 بازسازی Majordomo


da build majordomo

---

2. بازسازی فایل /etc/virtual/domains در صورت حذف شدن


اسکریپت زیر را ایجاد کنید:


/etc/virtual/fix_domains.sh

محتوا:


#!/bin/sh

echo `hostname`

for u in `ls /usr/local/directadmin/data/users`; do
{
    for d in `cat /usr/local/directadmin/data/users/$u/domains.list`; do
    {
        echo "$d"

        for p in `cat /usr/local/directadmin/data/users/$u/domains/$d.pointers 2>/dev/null | cut -d= -f1`; do
        {
            echo "$p"
        }
        done;
    }
    done;
}
done;

اجرای اسکریپت و تنظیم پرمیشن


cd /etc/virtual
chmod 755 fix_domains.sh
./fix_domains.sh > domains
chmod 644 domains
chown mail:mail domains

---

3. بازسازی فایل /etc/virtual/domainowners در صورت حذف شدن


اسکریپت زیر را ایجاد کنید:


/etc/virtual/fix_domainowners.sh

محتوا:


#!/bin/sh

for u in `ls /usr/local/directadmin/data/users`; do
{
    for d in `cat /usr/local/directadmin/data/users/$u/domains.list`; do
    {
        echo "$d: $u"

        for p in `cat /usr/local/directadmin/data/users/$u/domains/$d.pointers | cut -d= -f1 2>/dev/null`; do
        {
            echo "$p: $u"
        }
        done;
    }
    done;
}
done;

اجرای اسکریپت و تنظیم پرمیشن


cd /etc/virtual
chmod 755 fix_domainowners.sh
./fix_domainowners.sh > domainowners
chmod 644 domainowners
chown mail:mail domainowners

---

4. بازسازی فولدر یک دامنه خاص


اگر فقط فولدر یک دامنه خالی شده، می‌توانید آن را دستی بازسازی کنید:


cd /etc/virtual/domain.com

echo "fred: fred" > aliases
touch autoresponder.conf
touch filter
touch filter.conf
touch passwd
touch quota
touch vacation.conf
echo "*: :fail:" >> aliases
chown mail:mail *

mkdir -p majordomo
chmod 751 majordomo
chown majordomo:daemon majordomo

mkdir -p reply
chmod 700 reply
chown mail:mail reply

chown mail:mail .

برای مشاهده لیست ایمیل‌ها:


ls -la /home/fred/imap/domain.com

---

5. ریست پرمیشن‌ها و مالکیت فایل‌های سیستمی DirectAdmin


اگر داده‌ها را به دیسک جدید منتقل کرده‌اید و پرمیشن‌ها اشتباه هستند:


cd /usr/local/directadmin/scripts
./set_permissions.sh all

برای ریست پرمیشن‌های یک دامنه خاص:


./set_permissions.sh domaindir domain.com

---

6. جلوگیری از خطای useradd هنگام ری‌استورهای موازی


اگر چند ری‌استور همزمان انجام دهید، ممکن است /etc/passwd قفل شود. برای جلوگیری، اسکریپت قفل‌گذاری بسازید.


6.1 اسکریپت pre-create


/usr/local/directadmin/scripts/custom/user_create_pre/lock.sh

محتوا:


#!/bin/bash
LOCK=/etc/passwd.da_lock
ATTEMPTS=100
set -C
while [ $ATTEMPTS -gt 0 ]; do
    ATTEMPTS=$(( ATTEMPTS-1 ))
    2>/dev/null >$LOCK
    RET=$?
    if [ "$RET" = "0" ]; then
        break
    fi
    sleep 0.2
done

if [ $ATTEMPTS -eq 0 ]; then
    if [ -e /etc/passwd.lock ]; then
        echo "Unable to get lock on $LOCK and /etc/passwd.lock still exists. User $username not created"
        exit 1
    fi

    echo "Unable to get lock on $LOCK but /etc/passwd.lock does not exist. Proceeding anyway"
    rm -f $LOCK
fi

exit 0

6.2 اسکریپت post-create


/usr/local/directadmin/scripts/custom/user_create_post/lock.sh

محتوا:


#!/bin/bash
LOCK=/etc/passwd.da_lock
rm -f $LOCK
exit 0

6.3 اعمال دسترسی


chmod 755 /usr/local/directadmin/scripts/custom/user_create_pre/lock.sh
chmod 755 /usr/local/directadmin/scripts/custom/user_create_post/lock.sh

این کار تضمین می‌کند که فقط یک فرآیند useradd در هر لحظه اجرا شود.


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

راهنمای کامل پیکربندی کلاینت‌های ایمیل، هشدارهای quota در Dovecot و بررسی آخرین لاگین‌ها در DirectAdmin

این مقاله یک مرجع جامع برای کاربران و مدیران DirectAdmin است. در این راهنما یاد می‌گیرید چگونه ایمیل را روی iPhone، Thunderbird و Gmail تنظیم کنید، هشدارهای پر شدن quota را در Dovecot فعال کنید و با یک اسکریپت ساده، آخرین زمان لاگین تمام حساب‌های ایمیل را مشاهده کنید.

ادامه

عیب‌یابی Dovecot در DirectAdmin – رفع خطاهای IMAP، مشکلات احراز هویت و بررسی گواهی SSL

Dovecot سرویس اصلی IMAP/POP3 در DirectAdmin است. گاهی کاربران هنگام ورود به وب‌میل یا کلاینت ایمیل با خطاهایی مثل "Connection dropped" یا "unknown user" مواجه می‌شوند. این مقاله یک راهنمای کامل برای رفع خطاهای رایج Dovecot، پاک‌سازی ایندکس‌ها، بررسی دیتابیس‌های احراز هویت و تست گواهی SSL روی پورت‌های 143 و 993 است.

ادامه

عیب‌یابی DNS در DirectAdmin – وقتی named اجرا می‌شود اما دامنه resolve نمی‌شود

گاهی سرویس named (BIND) روی سرور اجرا می‌شود اما دامنه‌ها resolve نمی‌شوند یا از بیرون پاسخ DNS دریافت نمی‌شود. این مقاله یک راهنمای کامل برای بررسی listen، فایروال، تنظیمات named.conf، propagation، رکوردهای اشتباه، مشکلات ساب‌دامین، resolv.conf و خطاهای رایج DNS در DirectAdmin است.

ادامه

مدیریت رکوردهای DNS در DirectAdmin – راهنمای کامل، کاربردی و حرفه‌ای

DirectAdmin ابزارهای قدرتمندی برای مدیریت DNS ارائه می‌دهد: از کاهش TTL برای جلوگیری از downtime، تا ساخت رکوردهای SRV، فعال‌سازی DNSSEC، مدیریت delegation ساب‌دامین‌ها، افزودن خودکار TLSA برای DANE و حتی تغییرات گروهی (Mass Update) روی همه دامنه‌ها. این مقاله یک مرجع کامل برای مدیریت حرفه‌ای DNS در DirectAdmin است.

ادامه

DNS و Nameserverها در DirectAdmin – راهنمای کامل، کاربردی و حرفه‌ای

DNS ستون فقرات اینترنت است و وظیفه دارد نام دامنه را به IP تبدیل کند. در DirectAdmin می‌توان Nameserverهای اختصاصی ساخت، DNS را مدیریت کرد، DNS Clustering راه‌اندازی کرد و حتی از DNS خارجی استفاده نمود. این مقاله یک راهنمای جامع برای درک DNS، ساخت ns1/ns2، تنظیم Glue Record، رفع خطاها و مدیریت حرفه‌ای DNS در DirectAdmin است.

ادامه

CustomBuild در DirectAdmin – راهنمای کامل نصب، به‌روزرسانی، پیکربندی و سفارشی‌سازی پیشرفته

CustomBuild ابزار اصلی DirectAdmin برای مدیریت سرویس‌ها و نرم‌افزارهای سرور است. این ابزار وب‌سرور، PHP، دیتابیس، ایمیل، FTP و بسیاری از کامپوننت‌های دیگر را نصب، به‌روزرسانی و پیکربندی می‌کند. به دلیل کامپایل از سورس، CustomBuild انعطاف‌پذیری بسیار بالا، سرعت دسترسی به نسخه‌های جدید و مصرف منابع بهینه را فراهم می‌کند.

ادامه