برای مدیریت بازیکنان، اجرای دستورات مدیریتی، کنترل Resourceها و استفاده از پنل ادمین در سرور MTA باید یک حساب کاربری ساخته شود و دسترسی مناسب از طریق ACL به آن اختصاص پیدا کند.
ساخت حساب بهتنهایی کاربر را مدیر نمیکند. ابتدا حساب ایجاد میشود و سپس نام همان حساب با ساختار صحیح به گروه Admin، Moderator یا یک گروه سفارشی در فایل acl.xml اضافه میشود.
در این آموزش روش ساخت اکانت ادمین، ورود به حساب، تنظیم ACL، فعالکردن پنل مدیریت، تعیین دسترسی Resourceها و رفع خطای Access Denied را بررسی میکنیم.
ACL در سرور MTA چیست؟
ACL مخفف Access Control List است و مشخص میکند هر کاربر یا Resource اجازه انجام چه کارهایی را دارد.
ACL در MTA برای دو نوع Object اصلی استفاده میشود:
- کاربران و حسابهای ثبتشده با پیشوند user.
- Resourceهای سرور با پیشوند resource.
برای نمونه:
user.MostafaAdmin
resource.admin
resource.webadmin
ACL میتواند اجازه اجرای فرمانهایی مانند Kick، Ban، Start، Stop و Restart را به کاربر بدهد یا دسترسی یک Resource به توابع حساس را محدود کند.
تفاوت Account، Group و ACL
برای تنظیم صحیح دسترسیها باید تفاوت این سه بخش را بدانید:
| بخش | کاربرد | نمونه |
|---|---|---|
| Account | حسابی که کاربر با نام و رمز وارد آن میشود | MostafaAdmin |
| Group | گروهی شامل کاربران یا Resourceها | Admin |
| ACL | فهرستی از دسترسیهای مجاز یا غیرمجاز | Admin، Moderator، Default |
یک Group میتواند یک یا چند ACL را دریافت کند. سپس کاربران و Resourceهایی که داخل آن Group قرار دارند، از دسترسیهای همان ACLها استفاده میکنند.
گروههای پیشفرض ACL در MTA
در نصب معمول MTA چند گروه پیشفرض وجود دارد:
- Everyone
- Moderator
- SuperModerator
- Admin
- Console
- RPC
گروه Admin بیشترین دسترسی مدیریتی را دارد. برای همکار یا پشتیبان محدود بهتر است از Moderator، SuperModerator یا یک گروه اختصاصی استفاده شود.
برای هر کاربر دسترسی کامل Admin ایجاد نکنید. سطح دسترسی باید متناسب با وظایف واقعی او باشد.
مرحله اول: ساخت حساب کاربری ادمین
سرور MTA باید روشن باشد. وارد کنسول اصلی سرور شوید و دستور زیر را اجرا کنید:
addaccount USERNAME PASSWORD
برای نمونه:
addaccount MostafaAdmin A-Strong-Password-1405
بهجای MostafaAdmin نام حساب و بهجای عبارت نمونه، یک رمز قوی و اختصاصی قرار دهید.
پس از اجرای موفق، سرور باید پیامی درباره ساختهشدن حساب نمایش دهد.
نکات انتخاب نام حساب
- از نام کوتاه و قابل تشخیص استفاده کنید.
- نام حساب را با نام نمایشی بازیکن اشتباه نگیرید.
- از فاصله و کاراکترهای پیچیده در نام حساب خودداری کنید.
- حروف بزرگ و کوچک را دقیقاً به خاطر بسپارید.
- برای هر مدیر حساب جداگانه بسازید.
نکات انتخاب رمز عبور
- از رمز متفاوت با حسابهای دیگر استفاده کنید.
- رمز شامل حروف بزرگ، کوچک، عدد و نماد باشد.
- رمز را در فایل Lua یا Resourceها ذخیره نکنید.
- رمز را در چت عمومی سرور ارسال نکنید.
- حساب مشترک میان چند مدیر ایجاد نکنید.
ساخت حساب از داخل بازی
اگر Resource ادمین در حال اجرا باشد، میتوان از کنسول F8 داخل بازی نیز حساب ساخت.
register USERNAME PASSWORD
برای نمونه:
register MostafaAdmin A-Strong-Password-1405
این دستور فقط حساب را ایجاد میکند. برای مدیرشدن، حساب همچنان باید داخل گروه مناسب ACL قرار بگیرد.
مرحله دوم: تهیه بکاپ از ACL
قبل از هر تغییری از فایل زیر یک نسخه پشتیبان تهیه کنید:
mods/deathmatch/acl.xml
برای نمونه یک کپی با نام زیر نگه دارید:
acl-backup-before-admin.xml
خرابشدن ساختار XML یا حذف اشتباه گروهها میتواند دسترسی مدیران و Resourceهای سرور را مختل کند.
مرحله سوم: خاموشکردن صحیح سرور
برای ویرایش دستی acl.xml بهتر است ابتدا سرور را از طریق کنسول خاموش کنید:
shutdown
پس از بستهشدن کامل فرایند MTA، فایل acl.xml را با یک ویرایشگر متن باز کنید.
ویرایش فایل هنگام روشنبودن سرور ممکن است باعث شود تغییرات بهدرستی بارگذاری نشوند یا نسخه موجود در حافظه دوباره روی فایل نوشته شود.
مرحله چهارم: افزودن حساب به گروه Admin
داخل فایل acl.xml عبارت زیر را پیدا کنید:
<group name="Admin">
ساختار این گروه ممکن است شبیه نمونه زیر باشد:
<group name="Admin">
<acl name="Moderator" />
<acl name="SuperModerator" />
<acl name="Admin" />
<acl name="RPC" />
<object name="resource.admin" />
<object name="resource.webadmin" />
</group>
داخل همین گروه و قبل از تگ بستهشدن، حساب ساختهشده را اضافه کنید:
<object name="user.MostafaAdmin" />
نتیجه باید مشابه این باشد:
<group name="Admin">
<acl name="Moderator" />
<acl name="SuperModerator" />
<acl name="Admin" />
<acl name="RPC" />
<object name="resource.admin" />
<object name="resource.webadmin" />
<object name="user.MostafaAdmin" />
</group>
کل گروه Admin را با نمونه بالا جایگزین نکنید. فقط خط مربوط به user.AccountName را داخل گروه موجود اضافه کنید.
ساختار صحیح نام کاربر در ACL
برای حسابهای کاربری همیشه از پیشوند user. استفاده کنید:
<object name="user.MostafaAdmin" />
این نمونه اشتباه است:
<object name="MostafaAdmin" />
این نمونه نیز کاربر را بهعنوان Resource معرفی میکند و اشتباه است:
<object name="resource.MostafaAdmin" />
نام بعد از user. باید دقیقاً با نام حسابی که در دستور addaccount ساخته شده مطابقت داشته باشد.
مرحله پنجم: ذخیره و اجرای دوباره سرور
پس از افزودن حساب:
- ساختار XML را دوباره بررسی کنید.
- فایل acl.xml را ذخیره کنید.
- سرور MTA را اجرا کنید.
- وارد سرور شوید.
- با حساب ساختهشده Login کنید.
ورود به حساب ادمین داخل بازی
پس از اتصال به سرور، کنسول F8 را باز کنید و دستور زیر را وارد کنید:
login USERNAME PASSWORD
برای نمونه:
login MostafaAdmin A-Strong-Password-1405
اگر ورود موفق باشد، حساب کاربر از حالت Guest خارج میشود و دسترسیهای گروه Admin برای او فعال خواهد شد.
بازکردن پنل ادمین MTA
پس از Login، پنل ادمین معمولاً با کلید P باز میشود. همچنین میتوان از دستور زیر استفاده کرد:
admin
برای بازشدن پنل، Resource ادمین باید در حال اجرا باشد و حساب دسترسی general.adminpanel داشته باشد.
برای بررسی وضعیت Resource ادمین در کنسول سرور:
info admin
برای اجرای آن:
start admin
برای راهاندازی مجدد:
restart admin
اجرای خودکار Resource ادمین
برای اجرای خودکار پنل مدیریت، فایل زیر را باز کنید:
mods/deathmatch/mtaserver.conf
در بخش Resourceهای شروع خودکار، وجود خط زیر را بررسی کنید:
<resource src="admin" startup="1" protected="0" />
گزینه startup=”1″ باعث میشود Resource هنگام اجرای سرور شروع شود.
قبل از ویرایش mtaserver.conf از آن بکاپ بگیرید و ساختار XML فایل را تغییر ندهید.
روش ویرایش ACL بدون خاموشکردن سرور
اگر فایل acl.xml را هنگام روشنبودن سرور ویرایش کردهاید، پس از ذخیره میتوانید دستور زیر را در کنسول اجرا کنید:
reloadacl
این دستور فایل ACL را دوباره بارگذاری میکند.
بااینحال برای اولین تنظیم ادمین و تغییرات حساس، خاموشکردن سرور، تهیه بکاپ و سپس ویرایش فایل روش مطمئنتری است.
مدیریت ACL از طریق Webadmin
MTA دارای Resource مدیریت تحت وب با نام webadmin است. در صورت نصب، اجرا و تنظیم صحیح میتوان از طریق HTTP گروهها، کاربران و ACLها را مدیریت کرد.
برای اجرای Resource:
start webadmin
سپس رابط آن معمولاً از طریق HTTP Port سرور در دسترس قرار میگیرد:
http://SERVER-IP:HTTP-PORT/
پورت HTTP پیشفرض در بسیاری از نصبها 22005 است، مگر اینکه در mtaserver.conf تغییر کرده باشد.
برای استفاده از Webadmin ابتدا باید یک حساب ادمین معتبر داشته باشید. همچنین نباید رابط مدیریت را بدون رمز قوی و تنظیمات امنیتی در دسترس عمومی قرار دهید.
افزودن کاربر به گروه Moderator
برای کاربری که فقط باید بخشی از دستورات مدیریتی را داشته باشد، میتوان او را به گروه Moderator اضافه کرد.
ابتدا حساب را بسازید:
addaccount Support01 STRONG-PASSWORD
سپس داخل گروه Moderator در acl.xml خط زیر را اضافه کنید:
<object name="user.Support01" />
نمونه:
<group name="Moderator">
<acl name="Moderator" />
<object name="user.Support01" />
</group>
ساختار واقعی فایل ممکن است شامل Objectها یا ACLهای دیگری باشد. فقط حساب جدید را به گروه موجود اضافه کنید.
ساخت گروه مدیریتی اختصاصی
برای تیم پشتیبانی میتوان یک Group اختصاصی ساخت و یکی از ACLهای موجود را به آن اختصاص داد.
<group name="SupportTeam">
<acl name="Moderator" />
<object name="user.Support01" />
<object name="user.Support02" />
</group>
در این نمونه اعضای SupportTeam دسترسیهایی را دریافت میکنند که در ACL با نام Moderator تعریف شدهاند.
برای تعریف سطح کاملاً اختصاصی باید یک ACL جدید با Rightهای مشخص ساخته شود. قبل از این کار از acl.xml بکاپ تهیه کنید و هر Permission را جداگانه بررسی کنید.
ساخت ACL اختصاصی با دسترسی محدود
نمونه زیر فقط برای توضیح ساختار است. نام دستورات و Permissionها باید متناسب با Resourceها و نیاز واقعی سرور انتخاب شوند.
<group name="LimitedSupport">
<acl name="LimitedSupportACL" />
<object name="user.Support01" />
</group>
<acl name="LimitedSupportACL">
<right name="command.mute" access="true" />
<right name="command.kick" access="true" />
<right name="command.ban" access="false" />
<right name="command.shutdown" access="false" />
</acl>
این نمونه اجازه Mute و Kick را میدهد اما Ban و Shutdown را مسدود میکند.
حقهای سفارشی یا دستورات Resourceهای مختلف ممکن است نام متفاوتی داشته باشند؛ بنابراین قبل از ثبت، مستندات همان Resource را بررسی کنید.
دسترسی ACL برای Resourceها
ACL فقط برای کاربران نیست. بعضی Resourceها برای اجرای توابع حساس به Permission نیاز دارند.
Resource در ACL با پیشوند resource. شناخته میشود:
<object name="resource.admin" />
<object name="resource.webadmin" />
<object name="resource.myscript" />
افزودن Resource ناشناس به گروه Admin میتواند تمام دسترسیهای مدیریتی را در اختیار آن قرار دهد. این روش فقط برای Resourceهای رسمی، قابل اعتماد و واقعاً نیازمند دسترسی گسترده مناسب است.
روش امن درخواست دسترسی با aclrequest
Resource میتواند Permissionهای موردنیاز خود را داخل meta.xml درخواست کند:
<meta>
<aclrequest>
<right name="function.kickPlayer" access="true" />
<right name="function.banPlayer" access="true" />
</aclrequest>
<script src="server.lua" type="server" />
</meta>
برای مشاهده درخواستهای Resource:
aclrequest list resource-name
برای تأیید یک Permission مشخص:
aclrequest allow resource-name function.kickPlayer
برای رد یک Permission:
aclrequest deny resource-name function.banPlayer
برای تأیید همه درخواستهای Resource:
aclrequest allow resource-name all
گزینه all را فقط برای Resource بررسیشده و معتبر استفاده کنید. ابتدا فهرست Permissionها را مشاهده و دلیل نیاز هرکدام را بررسی کنید.
رفع خطای Access Denied
خطای Access Denied معمولاً به این معنی است که کاربر یا Resource اجازه اجرای یک دستور یا تابع را ندارد.
برای عیبیابی این مراحل را انجام دهید:
- نام حساب یا Resource را دقیق بررسی کنید.
- اطمینان پیدا کنید حساب داخل Group مناسب است.
- وجود ACL مربوط به آن Group را بررسی کنید.
- پیام خطا را برای پیداکردن نام Permission بخوانید.
- درخواستهای aclrequest Resource را مشاهده کنید.
- فقط Permission ضروری را فعال کنید.
- دستور reloadacl را اجرا کنید.
- Resource را Restart و دوباره آزمایش کنید.
reloadacl
restart resource-name
چرا پنل ادمین با کلید P باز نمیشود؟
دلایل متداول عبارتاند از:
- کاربر وارد حساب نشده است.
- نام حساب در ACL اشتباه نوشته شده است.
- حساب داخل گروه Admin قرار ندارد.
- Resource ادمین اجرا نشده است.
- ACL پس از تغییر Reload نشده است.
- فایل acl.xml دارای خطای ساختاری است.
- Permission مربوط به adminpanel وجود ندارد.
- کلید P در تنظیمات بازی تغییر کرده است.
ابتدا دوباره Login کنید:
login USERNAME PASSWORD
سپس از کنسول سرور Resource ادمین را بررسی کنید:
info admin
start admin
خطای Account does not exist
این پیام معمولاً زمانی نمایش داده میشود که نام حساب اشتباه وارد شده یا حساب ساخته نشده است.
- نام واردشده در addaccount را بررسی کنید.
- حروف بزرگ و کوچک را یکسان وارد کنید.
- نام نمایشی داخل بازی را با Account Name اشتباه نگیرید.
- حساب را دوباره با addaccount نسازید مگر اینکه مطمئن باشید وجود ندارد.
خطای Invalid password
اگر نام حساب درست است اما رمز پذیرفته نمیشود، از کنسول سرور میتوان رمز حساب را تغییر داد:
chgpass ACCOUNTNAME NEWPASSWORD
برای نمونه:
chgpass MostafaAdmin New-Strong-Password-1405
پس از تغییر رمز، با اطلاعات جدید Login کنید.
حذف حساب مدیریتی
برای حذف یک حساب از کنسول سرور:
delaccount ACCOUNTNAME
برای نمونه:
delaccount Support01
پس از حذف حساب، خط مربوط به آن را نیز از گروههای acl.xml پاک کنید:
<object name="user.Support01" />
سپس ACL را Reload یا سرور را Restart کنید.
تفاوت حذف حساب و حذف از گروه Admin
برای گرفتن دسترسی مدیریت لزوماً نباید حساب را حذف کنید.
- حذف حساب: کاربر دیگر نمیتواند با آن Account وارد شود.
- حذف از Admin: حساب باقی میماند اما دسترسی مدیریتی آن گرفته میشود.
برای گرفتن دسترسی، کافی است خط user.AccountName را از گروه Admin حذف و سپس ACL را Reload کنید.
اشتباهات رایج در تنظیم ACL
- نوشتن نام نمایشی بازیکن بهجای نام Account
- حذف یا جایگزینی کامل گروه Admin
- فراموشکردن پیشوند user.
- استفاده از resource. برای حساب کاربری
- ویرایش فایل اشتباه در مسیر دیگری از سرور
- خرابکردن تگهای XML
- Reload نکردن ACL بعد از تغییر
- اجرانشدن Resource ادمین
- دادن دسترسی Admin به Resource ناشناس
- دادن حساب مشترک به چند مدیر
- استفاده از رمز ساده
- نداشتن بکاپ از acl.xml
نمونه خطای ساختاری در acl.xml
در نمونه زیر تگ object بهدرستی بسته نشده است:
<object name="user.MostafaAdmin">
نسخه صحیح:
<object name="user.MostafaAdmin" />
همچنین هر Group باید در انتها بسته شود:
</group>
چکلیست ساخت ادمین در MTA
- حساب با دستور addaccount ساخته شده است.
- نام و رمز حساب ثبت شدهاند.
- از acl.xml نسخه پشتیبان تهیه شده است.
- سرور پیش از ویرایش دستی خاموش شده است.
- خط user.AccountName داخل گروه Admin قرار دارد.
- پیشوند user. صحیح نوشته شده است.
- ساختار XML فایل سالم است.
- Resource ادمین در حال اجرا است.
- کاربر با دستور login وارد حساب شده است.
- پنل ادمین با P یا دستور admin باز میشود.
- برای همکاران غیرضروری دسترسی کامل ایجاد نشده است.
- Resourceهای ناشناس داخل گروه Admin قرار نگرفتهاند.
نکات امنیتی حساب ادمین
- برای هر مدیر یک حساب جداگانه بسازید.
- رمزهای قدیمی یا افشاشده را تغییر دهید.
- حساب مدیر سابق را سریعاً از ACL خارج کنید.
- دسترسیها را براساس وظیفه هر کاربر محدود کنید.
- از acl.xml و تنظیمات سرور بکاپ دورهای بگیرید.
- Resourceهای ناشناس را قبل از نصب بررسی کنید.
- درخواستهای aclrequest را بدون بررسی تأیید نکنید.
- پنل HTTP مدیریت را بدون حفاظت مناسب عمومی نکنید.
- اطلاعات ورود را در گروهها و کانالهای عمومی ارسال نکنید.
- تغییرات ACL را ثبت و مستندسازی کنید.
ترتیب عملی ساخت ادمین
- سرور را اجرا کنید.
- در کنسول دستور addaccount را وارد کنید.
- پیام ساختهشدن حساب را بررسی کنید.
- سرور را با دستور shutdown متوقف کنید.
- از acl.xml بکاپ بگیرید.
- فایل acl.xml را باز کنید.
- گروه Admin را پیدا کنید.
- خط user.AccountName را داخل گروه اضافه کنید.
- فایل را ذخیره کنید.
- سرور را دوباره اجرا کنید.
- داخل بازی با دستور login وارد شوید.
- پنل ادمین را با P باز کنید.
جدول سریع عیبیابی
| مشکل | علت احتمالی | راهحل |
|---|---|---|
| حساب ساخته نمیشود | نام تکراری یا دستور اشتباه | ساختار addaccount را بررسی کنید |
| Login انجام نمیشود | نام یا رمز اشتباه | اطلاعات حساب و حروف بزرگ و کوچک را بررسی کنید |
| Login موفق است اما ادمین نیست | حساب در گروه Admin نیست | user.AccountName را به Admin اضافه کنید |
| کلید P کاری نمیکند | Resource ادمین خاموش یا Permission ناقص | admin را Start و ACL را بررسی کنید |
| Access Denied نمایش داده میشود | Permission لازم وجود ندارد | ACL یا aclrequest را بررسی کنید |
| تغییر ACL اعمال نشده است | فایل Reload نشده | reloadacl را اجرا یا سرور را Restart کنید |
| سرور پس از تغییر ACL خطا میدهد | ساختار XML خراب شده است | نسخه بکاپ acl.xml را بازگردانید |
| Resource دسترسی بیشازحد دارد | عضویت در گروه Admin | Resource را خارج و Permission محدود ایجاد کنید |
جمعبندی
برای ساخت اکانت ادمین در MTA ابتدا حساب را با دستور addaccount ایجاد کنید. سپس سرور را متوقف کرده و حساب را با ساختار user.AccountName داخل گروه Admin فایل acl.xml قرار دهید.
پس از اجرای دوباره سرور، با دستور login وارد حساب شوید و پنل مدیریت را با کلید P یا دستور admin باز کنید.
ACL باید براساس اصل حداقل دسترسی تنظیم شود. برای کاربران پشتیبان و Resourceها فقط Permissionهایی را فعال کنید که واقعاً موردنیاز هستند.
برای نصب Resource و مدیریت درخواستهای دسترسی، مقاله آموزش نصب Resource در MTA و رفع خطاهای اجرا را مطالعه کنید.
برای نصب کامل زیرساخت نیز راهنمای آموزش ساخت سرور MTA روی VPS لینوکس را ببینید.
برای بررسی و تنظیم دسترسیهای پروژه میتوانید از خدمات پشتیبانی فنی گیمسرور و راهاندازی و کانفیگ سرور MTA استفاده کنید.
پرسشهای متداول
چگونه در MTA اکانت ادمین بسازیم؟
حساب را با دستور addaccount بسازید و سپس خط user.AccountName را داخل گروه Admin فایل acl.xml قرار دهید.
چرا بعد از Login پنل ادمین باز نمیشود؟
احتمالاً حساب داخل گروه Admin نیست، ACL Reload نشده یا Resource ادمین اجرا نمیشود. این سه مورد را بررسی کنید.
دستور ورود به اکانت MTA چیست؟
در کنسول F8 دستور login USERNAME PASSWORD را وارد کنید.
آیا میتوان ACL را بدون خاموشکردن سرور تغییر داد؟
بله؛ پس از ویرایش acl.xml میتوان دستور reloadacl را اجرا کرد. برای تغییرات حساس، خاموشکردن سرور و تهیه بکاپ مطمئنتر است.
چرا Resource خطای Access Denied میدهد؟
Resource اجازه اجرای یک تابع یا دستور محافظتشده را ندارد. درخواستهای aclrequest یا ACL اختصاصی آن را بررسی و فقط Permission ضروری را فعال کنید.
آیا باید Resource را به گروه Admin اضافه کنیم؟
فقط Resourceهای رسمی و کاملاً مورداعتماد که واقعاً به دسترسی گسترده نیاز دارند. برای سایر Resourceها بهتر است Permissionهای محدود و مشخص فعال شوند.
چگونه رمز حساب ادمین را تغییر دهیم؟
در کنسول سرور دستور chgpass ACCOUNTNAME NEWPASSWORD را اجرا کنید.
