📄 محتوای کامل
حذف یک اکانت هاست، همانقدری که ساده به نظر میرسد، میتواند یکی از پرریسکترین کارهای مدیریتی روی سرور باشد؛ یک اشتباه تایپی در rm -rf و بدون بکاپ، یعنی از دست رفتن دائمی فایلهای یک سایت واقعی. در این آموزش حذف اکانت هاست از طریق SSH را گامبهگام و با اسکرینشات واقعی از یک سرور Ubuntu ۲۴.۰۴ انجام میدهیم: از اتصال به سرور و شناسایی اکانتها تا بکاپگیری با tar، حذف اکانت با userdel و تأیید نهایی. اگر با SSH آشنایی کامل ندارید، پیشنهاد میکنیم اول آموزش کار با SSH در لینوکس را بخوانید و بعد برگردید.
🎯 در این آموزش یاد میگیرید:
- چطور با SSH به سرور متصل شوید و اکانتهای هاست را شناسایی کنید
- قبل از حذف، یک بکاپ کامل و قابل بازیابی از اکانت بگیرید (دستور tar)
- اکانت را با userdel حذف و حذفشدنش را تأیید کنید
- روی سرورهای cPanel با killacct و روی DirectAdmin چه کار کنید
- چه اشتباهاتی هنگام حذف اکانت، سایتهای همسایه را نابود میکند
⚡ پاسخ کوتاه — حذف اکانت هاست با SSH: با دستور ssh root@IP-سرور وارد سرور شوید، با ls -la /home اکانتها را ببینید، با tar -czf /root/backup-$(date +%y%m%d).tar.gz -C /home ناماکانت بکاپ بگیرید و سپس با userdel -r ناماکانت اکانت را حذف کنید. روی سرور cPanel معادل این کار، اجرای /scripts/killacct است. تأیید نهایی هم با id ناماکانت انجام میشود.
چرا حذف اکانت هاست از SSH، وقتی پنل هم داریم؟
سؤال بجایی است؛ WHM، DirectAdmin و پنلهای مشابه دکمهٔ «Terminate Account» دارند. اما در عمل چهار موقعیت هست که حذف از SSH تنها راه منطقی است:
- پنل کار نمیکند: اگر لایسنس cPanel منقضی شده، سرویس WHM Down است یا پنل به خاطر یک خطای دیتابیسی بالا نمیآید، ترمینال همچنان در دسترس شماست.
- حذف انبوه یا خودکار: وقتی میخواهید ۴۰ اکانت امانی سرور را یکشبه پاک کنید، نوشتن یک حلقهٔ ساده در بش سریعتر و قابلمستندسازیتر از ۴۰ بار کلیک در پنل است.
- اکانت نصفهساخته: گاهی اکانتی در پنل ثبت نشده ولی فایلها و کاربر لینوکسش روی سرور ماندهاند؛ پنل چنین اکانتی را «نمیبیند» و فقط از SSH میشود پاکش کرد.
- سرورهای بدون پنل: روی سرور اختصاصی و سرور مجازی بدون کنترلپنل، مدیریت مستقیم کاربرها از ترمینال روش استاندارد است.
نکتهٔ مهم این آموزش آن است که تمام مراحل را واقعاً روی یک سرور Ubuntu ۲۴.۰۴ اجرا کردهایم؛ تصویرهایی که میبینید عکسهای واقعی ترمینالاند، نه شبیهسازی. برای همین در خروجی هر دستور، دقیقاً همان چیزی را میبینید که خودتان قرار است ببینید.
پیشنیازها؛ قبل از دست زدن به سرور
هیچکدام از این مراحل بدون این سه شرط معنا ندارد:
| پیشنیاز | توضیح | راهنما |
|---|---|---|
| دسترسی root | حذف کاربر روی لینوکس فقط با دسترسی مدیران سیستم ممکن است. | تغییر پسورد root در لینوکس |
| کلاینت SSH | در ویندوز PowerShell و در مک/لینوکس ترمینال، از پیش SSH دارند. | آموزش SSH در لینوکس |
| فضای دیسک برای بکاپ | حداقل بهاندازهٔ حجم اکانت، فضای آزاد روی سرور یا مکان خارجی. | با df -h فضای آزاد را چک کنید |
و یک قانون طلایی که در کل این آموزش بالای سرتان باشد: هیچ اکانتی را بدون بکاپ حذف نکنید — حتی اگر مشتری صد بار گفت «دیگه نیازی نیست». تجربه نشان داده چند هفته بعد، همان مشتری برای «برگرداندن سایتش» زنگ میزند.
گام ۱ — اتصال به سرور با SSH
ترمینال خودتان را باز کنید (در ویندوز ۱۰/۱۱ و ۱۱ PowerShell کافی است) و بهجای IP-سرور، آدرس یا IP سرور خودتان را بگذارید:
ssh [email protected] دفعهٔ اول که به یک سرور وصل میشوید، SSH از شما دربارهٔ اثر انگشت کلید (Host Key Fingerprint) سؤال میکند. این پیام کاملاً طبیعی است؛ SSH میخواهد مطمئن شود سروری که الان به آن وصل میشوید، همان سروری است که فکر میکنید:
همانطور که در تصویر میبینید، بعد از تأیید yes و وارد کردن پسورد (که موقع تایپ نمایش داده نمیشود)، بنر خوشآمد Ubuntu ظاهر میشود. عبارت root@web-server:~# یعنی شما الان مدیر کامل سرور هستید — از این لحظه، هر دستوری مستقیماً اجرا میشود؛ بدون سؤال تأیید و بدون سطل بازیافت.
گام ۲ — شناسایی اکانتهای هاست روی سرور
روی سرورهای هاستینگ، هر اکانت معمولاً یک کاربر لینوکس با یک پوشهٔ خانگی در /home است. بگذارید اول ببینیم روی چه سروری کار میکنیم و چه اکانتی داریم:
hostname
cat /etc/os-release | head -2
ls -la /home/ خروجی ls -la /home/ در تصویر، اکانت demo-site را نشان میدهد — همین اکانت را در ادامه بکاپ میگیریم و حذف میکنیم. اگر چند اکانت دارید، نام دقیق را از همین لیست بردارید و در دفترچهتان یادداشت کنید؛ اکثر فاجعهها از اشتباه در همین نام شروع میشود.
گام ۳ — بررسی محتوای اکانت قبل از حذف
قبل از هر چیز مطمئن شوید همان چیزی است که فکر میکنید. یک نگاه به ساختار فایلها و حجم اکانت بیندازید:
ls -la /home/demo-site/public_html/
du -sh /home/demo-site دستور du -sh حجم اکانت را نشان میدهد؛ این عدد را یادداشت کنید چون موقع بکاپگیری همانقدر فضا لازم دارید. اگر فایلهایی دیدید که نباید آنجا باشند (مثلاً بکاپهای قدیمی چند گیگابایتی)، بهتر است قبل از بکاپ، آنها را جدا کنید تا بکاپ سبکتر بماند.
گام ۴ — بکاپگیری از اکانت با tar (قانون طلایی)
حالا بکاپ کامل اکانت را در پوشهٔ /root سرور میگیریم. الگوی نامگذاری با تاریخ روز، بعداً پیدا کردن بکاپ درست را آسان میکند:
tar -czf /root/backup-demo-site-$(date +%y%m%d).tar.gz -C /home demo-site
ls -lh /root/backup-demo-site-*.tar.gz
tar -tzf /root/backup-demo-site-*.tar.gz | head -5 توضیح سوئیچها: -c یعنی ساخت آرشیو، -z فشردهسازی با gzip، -f مسیر خروجی و -C /home باعث میشود مسیرها داخل آرشیو نسبت به پوشهٔ home ذخیره شوند (یعنی موقع استخراج، پوشهٔ demo-site کامل بازسازی میشود). دستور سوم — tar -tzf — فقط لیست محتوای آرشیو را نشان میدهد؛ این «تست سلامت» ساده، مطمئنتان میکند بکاپ واقعاً سالم است، نه فایل صفربایتی.
نکتهٔ حرفهای: اگر بکاپ را فقط روی خود سرور نگه دارید، موقع فاجعه (مثلاً خرابی دیسک) همراه سرور از بین میرود. بعد از این مرحله، فایل را با scp یا rsync به یک مکان خارجی منتقل کنید — در مقالهٔ انتقال وردپرس به سرور روش انتقال فایل بین سرورها را گامبهگام توضیح دادهایم.
گام ۵ — حذف اکانت هاست با userdel و تأیید نهایی
حالا که بکاپ سالم داریم، خود حذف سادهترین بخش ماجراست. دو دستور اصلی داریم:
# حذف کاربر لینوکس (اکانت)
userdel demo-site
# حذف کامل فایلهای اکانت
rm -rf /home/demo-site
# تأیید نهایی
id demo-site
ls -la /home/ سه خط تأیید در تصویر مهماند: id: 'demo-site': no such user یعنی اکانت از سیستم کاربران لینوکس حذف شده، و در خروجی ls -la /home/ دیگر خبری از demo-site نیست. اگر هر دو را دیدید، حذف کامل و موفق بوده.
فرق userdel و userdel -r چیست؟
دستور userdel demo-site فقط کاربر را از فایلهای /etc/passwd، /etc/shadow و /etc/group حذف میکند و به فایلها دست نمیزند. اگر سوئیچ -r را اضافه کنید (userdel -r demo-site)، لینوکس تلاش میکند پوشهٔ خانگی و صندوق ایمیل کاربر را هم همزمان پاک کند.
پس چرا ما دو مرحلهای کار کردیم؟ چون userdel -r یک رفتار محتاطانه دارد: اگر مالکیت فایلهای پوشهٔ خانگی با خود کاربر نخواند (که روی سرورهای قدیمی یا اکانتهای جابهجاشده زیاد پیش میآید)، از حذف پوشه صرفنظر میکند و فقط اکانت را حذف میکند — بدون هیچ خطایی! یعنی ممکن است فکر کنید «همهچیز پاک شد» ولی چند صد مگابایت فایل بیصاحب روی دیسک مانده باشد. حذف صریح پوشه با rm -rf و تأیید با ls، این حالت را از بین میبرد.
حذف اکانتهای cPanel از SSH؛ دستور استاندارد killacct
روی سرورهایی که cPanel/WHM دارند، حذف اکانت با روش بالا ناقص است؛ چون cPanel حسابهایش را در دیتابیس داخلی و فایلهای کانفیگ آپاچی هم ثبت میکند. اگر فقط کاربر لینوکس را پاک کنید، WHM هنوز اکانت را «زنده» میبیند و رکوردهای زامبی میمانند. راه استاندارد، اسکریپت رسمی cPanel است:
/scripts/killacct demo-site این اسکریپت با یک تأیید ساده (y) تمام کار را یکجا انجام میدهد: حذف کاربر لینوکس، پاکسازی دیتابیسهای cPanel، حذف دامنهها از آپاچی، پاککردن رکوردهای DNS و ایمیلها. برای حذف بدون سؤال (در اسکریپتهای خودکار) سوئیچ --force را اضافه کنید. روش API معادل آن هم این است:
whmapi1 removeacct username=demo-site اگر مدیریت سرور cPanel برایتان تازه است، مقالهٔ کار با فایلهای مخفی و htaccess در cPanel دید خوبی به ساختار فایلهای این کنترلپنل میدهد.
حذف اکانت در DirectAdmin
در سرورهای DirectAdmin هم وضعیت مشابه است: حذف کاربر لینوکس بهتنهایی کافی نیست و اکانت در پنل زنده میماند. روش درست، حذف از پنل سطح ادمین یا ریسلر است (Show All Users ← Delete)، یا اگر به خط فرمان علاقه دارید، اکانت را از API خود DirectAdmin حذف کنید:
/usr/local/directadmin/directadmin --user demo-site --delete-account حذف چند اکانت بهصورت انبوه (برای مدیران سرور)
اگر قرار است چند اکانت را پشتسرهم حذف کنید، نامها را در یک فایل بریزید و حلقهٔ زیر را اجرا کنید — با بکاپ خودکار برای هر اکانت:
#!/bin/bash
for user in $(cat users-to-delete.txt); do
tar -czf /root/backup-${user}-$(date +%y%m%d).tar.gz -C /home "$user"
userdel "$user"
rm -rf /home/"$user"
echo "DONE: $user"
done فایل users-to-delete.txt را با دقت بسازید و قبل از اجرای حلقه، یکبار خروجی cat users-to-delete.txt را با چشم مرور کنید. روی سرورهای cPanel بهجای userdel و rm، همان /scripts/killacct --force را داخل حلقه بگذارید.
۵ اشتباه رایج که سایتهای همسایه را نابود میکند
| اشتباه | عاقبت | روش درست |
|---|---|---|
اجرای rm -rf /home/demo-site با فاصلهٔ اشتباه (مثل rm -rf / home/demo-site) | حذف کل پوشهٔ home و همهٔ اکانتها! | دستور را در ویرایشگر تایپ و مرور کنید؛ هرگز مستقیم در ترمینال تایپ نکنید |
| حذف بدون بکاپ چون «مشتری گفت دیگر لازم نیست» | درخواست بازیابی چند هفته بعد، بدون هیچ راهی | بکاپ بگیرید و حداقل ۳۰ روز نگه دارید |
| حذف کاربر لینوکس روی سرور cPanel با userdel | اکانت زامبی در WHM، خطای دیتابیس در پنل | فقط با /scripts/killacct حذف کنید |
| حذف اکانت اشتباهی (نامهای مشابه مثل demo-site و demo-site2) | قطع شدن سایت مشتری دیگر | قبل از هر دستور، مسیر را با ls تأیید کنید |
| نگهداشتن بکاپها روی همان دیسک سرور | خرابی دیسک = حذف سرور و بکاپها با هم | انتقال منظم به سرور یا فضای ابری دیگر |
بحث اشتباههای انسانی در سرور تا این حد است که اگر بهطور جدی به امنیت سرور فکر میکنید، حتماً مقالهٔ امنیت و هاردینگ سرورهای لینوکسی را هم بخوانید؛ آنجا دربارهٔ محدودکردن دسترسیها و کار با کاربرهای غیر root با جزئیات صحبت کردهایم.
جدول خلاصهٔ دستورها
| کار | دستور |
|---|---|
| اتصال به سرور | ssh root@IP-سرور |
| مشاهدهٔ اکانتها | ls -la /home/ |
| حجم اکانت | du -sh /home/ناماکانت |
| بکاپ اکانت | tar -czf /root/backup-اکانت-$(date +%y%m%d).tar.gz -C /home ناماکانت |
| تست سلامت بکاپ | tar -tzf /root/backup-اکانت-*.tar.gz | head -۵ |
| حذف اکانت (لینوکس) | userdel ناماکانت |
| حذف فایلهای اکانت | rm -rf /home/ناماکانت |
| حذف اکانت cPanel | /scripts/killacct ناماکانت |
| تأیید حذف | id ناماکانت && ls -la /home/ |
سوالات متداول حذف اکانت هاست از طریق SSH
آیا بعد از userdel میشود اکانت را برگرداند؟
خیر؛ برخلاف پنلها که معمولاً «Suspend» دارند، حذف با userdel دائمی است. تنها راه برگشت، بازگردانی از بکاپ است: tar -xzf backup-demo-site-*.tar.gz -C /home و بعد ساخت مجدد کاربر با useradd demo-site. به همین دلیل بکاپگیری در گام ۴، اختیاری نیست.
تفاوت userdel و deluser چیست؟
هر دو یک کار را میکنند؛ userdel دستور اصلی پکیج shadow است و روی همهٔ توزیعها هست. deluser اسکریپت همراهی دارد که روی دبیان/اوبونتو موجود است و جلوی حذفهای خطرناک (مثل حذف root) را میگیرد. روی سرور اوبونتو هر دو قابل استفادهاند.
اگر هنگام userdel خطای «user is currently used by process» گرفتم چه کنم؟
یعنی هنوز پروسهای در حال اجرا با آن کاربر است (معمولاً PHP-FPM، Cron یا یک سشن باز SSH). اول پروسهها را ببینید و ببندید: ps -u demo-site و بعد pkill -KILL -u demo-site؛ سپس دوباره userdel را اجرا کنید.
روی سرور cPanel بعد از killacct هم فایلهایی از اکانت مانده؛ چرا؟
killacct پوشهٔ اصلی را حذف میکند اما بکاپهای سیستمی cPmove یا فایلهای موقت مربوط به آن اکانت ممکن است در مسیرهای دیگر مانده باشند. با find / -user demo-site 2>/dev/null همهٔ فایلهای مالِ آن کاربر را پیدا و پاک کنید — البته فقط بعد از اینکه مطمئن شدید کاربر واقعاً حذف شده.
قبل از حذف اکانت، ایمیلهایش را چطور بکاپ بگیرم؟
ایمیلهای cPanel در /home/ناماکانت/mail و پوشهٔ etc ذخیره میشوند؛ همان بکاپ tar از کل پوشهٔ اکانت (مثل گام ۴) هر دو را پوشش میدهد. در DirectAdmin هم بکاپ کامل از پنل، ایمیلها را شامل میشود.
جمعبندی
حذف اکانت هاست از طریق SSH در سه جمله خلاصه میشود: وصل شو، بکاپ بگیر، با دقت حذف کن و تأیید کن. ابزارها سادهاند — ls برای شناسایی، tar برای بکاپ، userdel و rm برای حذف و id برای تأیید — اما چون خروجی هیچکدام قابل برگشت نیست، ارزش دارد هر دستور را قبل از اینتر، یکبار دیگر بخوانید. روی سرورهای cPanel و DirectAdmin همیشه از روش رسمی خود پنل (killacct یا API) استفاده کنید تا اکانتهای زامبی برایتان دردسر نسازند.
اگر سروری میخواهید که این آزمایشها و کارهای مدیریتی را رویش آزادانه انجام دهید — بدون ترس از خرابکردن سرور اصلیتان — یک سرور مجازی یا سرور اختصاصی با دسترسی کامل root از نگارنوین تهیه کنید؛ تحویل آنی داریم و روی همهٔ پلنها دسترسی کامل ریشه در اختیارتان است. سؤالی دربارهٔ حذف اکانت یا مدیریت سرور دارید؟ در کامنتها بپرسید تا با جزئیات جواب بدهیم.