วิธีตั้ง Admin Permission ด้วย add_ace และ add_principal FiveM แบบละเอียด
การตั้ง Admin Permission ใน FiveM ด้วย ACE สามารถทำได้โดยใช้สองคำสั่งหลักของ FXServer คือ
add_ace
add_principal
โดยมีแนวคิดง่าย ๆ ว่า
add_ace
→ กำหนดว่า Group มีสิทธิ์ทำอะไร
add_principal
→ กำหนดว่าใครเป็นสมาชิก Group
ตัวอย่างพื้นฐานตาม Vanilla Configuration ของ Cfx.re คือ
add_ace group.admin command allow
add_ace group.admin command.quit deny
add_principal identifier.fivem:123456 group.admin
ความหมายคือ
identifier.fivem:123456
↓
เป็นสมาชิก group.admin
↓
group.admin ได้รับ command allow
↓
แต่ command.quit ถูก deny
วิธีนี้ช่วยให้ผู้ดูแล Server แยก Permission ตาม Admin, Moderator หรือ Resource ได้เป็นระบบมากกว่าการ Hardcode Admin ลงใน Script หลายตัว
① add_ace คืออะไร
add_ace ใช้เพิ่ม Access Control Entry ลงใน ACL ของ FXServer
รูปแบบคือ
add_ace [principal] [object] [allow|deny]
ตัวอย่าง
add_ace group.admin command.kick allow
หมายความว่า group.admin ได้รับอนุญาตกับ Object command.kick ตาม ACL ที่กำหนดไว้
② add_principal คืออะไร
add_principal ใช้สร้างความสัมพันธ์การสืบทอด Permission
รูปแบบคือ
add_principal [child_principal] [parent_principal]
ตัวอย่าง
add_principal identifier.fivem:123456 group.admin
หมายความว่า Identifier ดังกล่าวเป็น Child และสืบทอดสิทธิ์ของ group.admin ซึ่งเป็น Parent
③ จำทิศทาง add_principal ให้ถูก
จุดที่มือใหม่ใส่กลับด้านบ่อยคือ
add_principal CHILD PARENT
ดังนั้นที่ถูกคือ
add_principal identifier.fivem:123456 group.admin
ไม่ใช่
add_principal group.admin identifier.fivem:123456
เพราะเราต้องการให้ผู้เล่นสืบทอด Permission จาก Group
④ ตัวอย่าง Admin ทางการของ FiveM
Vanilla server.cfg ของ Cfx.re ใช้แนวทาง
add_ace group.admin command allow
add_ace group.admin command.quit deny
add_principal identifier.fivem:1 group.admin
โดย identifier.fivem:1 เป็นเพียงตัวอย่าง ต้องเปลี่ยนเป็น Cfx Identifier จริงของ Admin เอง
⑤ ขั้นตอนตั้ง Admin แบบง่ายที่สุด
ทำตามนี้
1. หา Identifier ของ Admin
2. สร้าง ACE ให้ group.admin
3. เพิ่ม Identifier เข้า group.admin
4. Restart/Execute Config
5. ทดสอบ Permission
ตัวอย่าง
add_ace group.admin command allow
add_ace group.admin command.quit deny
add_principal identifier.fivem:123456 group.admin
⑥ identifier.fivem คืออะไร
เป็น Principal ที่อ้างถึง Cfx/FiveM User Identifier
รูปแบบ
identifier.fivem:เลข
เช่น
identifier.fivem:123456
ต้องใช้ค่าของ Admin จริง
⑦ อย่า Copy identifier ตัวอย่าง
ถ้าคู่มือมี
identifier.fivem:1
อย่าใช้ค่านั้นตรง ๆ
ต้องแทนด้วย Identifier ของ Account ที่ต้องการให้เป็น Admin
⑧ ใส่ Admin หลายคนได้ไหม
ได้
ตัวอย่าง
add_ace group.admin command allow
add_ace group.admin command.quit deny
add_principal identifier.fivem:111111 group.admin
add_principal identifier.fivem:222222 group.admin
add_principal identifier.fivem:333333 group.admin
ทุก Identifier จะสืบทอด Permission จาก group.admin
⑨ ทำไมใช้ Group ดีกว่าแจกทีละคน
สมมุติมี Admin 10 คน
ถ้ากำหนด Permission ทีละคนจะต้องเขียน Rule ซ้ำจำนวนมาก
แต่ถ้าใช้
group.admin
กำหนด ACE เพียงครั้งเดียว
แล้วผูก Admin แต่ละคนเข้ากลุ่ม
ดูแลง่ายกว่าอย่างมาก
⑩ group.admin มีสิทธิ์ทุกอย่างอัตโนมัติไหม
ไม่
ชื่อ group.admin ไม่ได้ทำให้มี Permission โดยอัตโนมัติ
สิทธิ์มาจาก Rule เช่น
add_ace group.admin command allow
ถ้าไม่มี ACE ที่เกี่ยวข้อง Group ก็ไม่ได้รับสิทธิ์นั้นเพียงเพราะชื่อมีคำว่า Admin
⑪ command allow หมายถึงอะไร
ตัวอย่าง
add_ace group.admin command allow
เป็นการอนุญาต Object ระดับ command
Vanilla Configuration ใช้วิธีนี้เพื่อให้ Admin ใช้ Commands แล้วกำหนดข้อยกเว้นเพิ่มเติม เช่น
add_ace group.admin command.quit deny
⑫ ทำไมต้อง deny command.quit
คำสั่ง quit เป็นคำสั่งที่ไม่ควรเปิดให้ Admin ทั่วไปใช้ตาม Vanilla Example
จึงมี
add_ace group.admin command.quit deny
เป็นตัวอย่างการอนุญาตสิทธิ์กว้างแล้วปิดบาง Object ที่ไม่ต้องการ
⑬ Production Server ควร allow command ทั้งหมดไหม
ไม่จำเป็น
สำหรับ Server ที่ต้องการ Security สูงกว่า สามารถแจก Permission แบบละเอียดแทน
เช่น
add_ace group.moderator command.kick allow
add_ace group.moderator command.warn allow
ชื่อ Object จริงต้องตรงกับ Command/Resource ที่ Server ใช้
⑭ สร้าง Moderator Group อย่างไร
ตัวอย่าง
add_ace group.moderator command.kick allow
add_principal identifier.fivem:222222 group.moderator
แนวคิดคือ Moderator ไม่จำเป็นต้องได้สิทธิ์ระดับ Admin ทั้งหมด
⑮ แบ่ง Admin กับ Moderator
ตัวอย่าง
# Admin
add_ace group.admin command allow
add_ace group.admin command.quit deny
# Moderator
add_ace group.moderator command.kick allow
# Members
add_principal identifier.fivem:111111 group.admin
add_principal identifier.fivem:222222 group.moderator
ช่วยลดการแจก Permission เกินหน้าที่
⑯ หลัก Least Privilege
ให้ Staff ได้สิทธิ์เท่าที่ต้องใช้จริง
ตัวอย่าง Moderator อาจต้องเพียง
Kick
Warn
Spectate
Teleport
แต่ไม่จำเป็นต้องมี
Server Stop
Config Edit
ACL Management
Console ทุกคำสั่ง
แนวคิดนี้ช่วยลดความเสียหายจาก Human Error และ Account Compromise
⑰ สร้าง Super Admin Group ได้ไหม
สามารถสร้างชื่อ Group เพิ่มเอง เช่น
group.owner
group.admin
group.moderator
แล้วกำหนด ACE ตามสิทธิ์ที่ต้องการ
แต่ควรหลีกเลี่ยงโครงสร้าง Permission ซับซ้อนเกินความจำเป็น
⑱ Group สามารถสืบทอด Group ได้หรือไม่
หลักของ add_principal คือ Principal หนึ่งสามารถสืบทอดอีก Principal ได้
จึงสามารถออกแบบ Hierarchy ได้
ตัวอย่างแนวคิด
add_principal group.admin group.moderator
หมายถึง group.admin สืบทอด ACE ของ group.moderator
แต่ต้องออกแบบอย่างระมัดระวังเพื่อไม่ให้ Permission ซ้อนจนตรวจยาก
⑲ โครงสร้าง Permission ที่เข้าใจง่ายกว่า
เช่น
Owner
→ สิทธิ์สูงสุดที่จำเป็น
Admin
→ จัดการ Server/Player
Moderator
→ จัดการ Player
User
→ สิทธิ์ทั่วไป
อย่าสร้าง 20 Groups ถ้า Server มี Staff เพียงไม่กี่คน
⑳ ACE ใช้กับ Custom Permission ได้
ไม่จำเป็นต้องควบคุมเฉพาะ command.*
สามารถกำหนด Object ของ Resource เอง เช่น
add_ace group.admin myresource.admin allow
แล้ว Resource ตรวจ Permission
myresource.admin
ฝั่ง Server
㉑ Resource ตรวจ ACE อย่างไร
FiveM มีระบบ Native สำหรับตรวจ ACL เช่น
IsPlayerAceAllowed
Resource สามารถถามว่า Player มี Object Permission หรือไม่
แนวคิด
if IsPlayerAceAllowed(source, 'myresource.admin') then
-- admin action
end
เหมาะกับ Resource ที่ต้องการใช้ Built-in ACL
㉒ ทำ Custom Permission ดีกว่า command allow อย่างไร
แทนที่จะเปิด Commands จำนวนมาก
สามารถกำหนด
add_ace group.admin mygarage.admin allow
add_ace group.moderator mygarage.view allow
Resource จึงควบคุม Permission ตาม Function ได้ละเอียดขึ้น
㉓ Resource สามารถได้รับ Principal ได้
Resource เองสามารถถูกอ้างเป็น Principal เช่น
resource.myresource
ตัวอย่างจากแนวทาง ACL ของ Cfx.re มีการให้ Resource ใช้ Command ACL บางตัวโดยเฉพาะ เช่น command.add_principal หรือ command.remove_principal
㉔ ตัวอย่าง Resource Permission
add_ace resource.myframework command.add_principal allow
add_ace resource.myframework command.remove_principal allow
หมายความว่า myframework ได้ใช้ Commands สองตัวนี้ผ่าน ACL
㉕ อย่าให้ Resource command allow ทั้งหมด
ไม่ควรใช้
add_ace resource.myresource command allow
หาก Resource ต้องการเพียงคำสั่งเดียวหรือสองคำสั่ง
ควรใช้
add_ace resource.myresource command.add_principal allow
เฉพาะที่จำเป็น
㉖ add_ace ใส่ใน server.cfg ได้ไหม
ได้
Server Commands สามารถใช้ผ่าน Server Configuration File ได้โดยตรง
ตัวอย่าง
add_ace group.admin command allow
add_ace group.admin command.quit deny
㉗ ควรแยก Permission ออกจาก server.cfg ไหม
ถ้า Server เล็ก ใส่ใน server.cfg ได้
แต่ Server ใหญ่ควรแยกเป็น
permissions.cfg
เพื่อให้จัดการง่าย
㉘ วิธีเรียก permissions.cfg
ใน server.cfg เพิ่ม
exec permissions.cfg
จากนั้นสร้างไฟล์
permissions.cfg
ไว้ในตำแหน่งที่ Config สามารถ Execute ได้
㉙ ตัวอย่าง permissions.cfg
# ==================================
# FiveM ACE Permissions
# ==================================
# Admin
add_ace group.admin command allow
add_ace group.admin command.quit deny
# Moderator
add_ace group.moderator command.kick allow
# Admin users
add_principal identifier.fivem:111111 group.admin
# Moderator users
add_principal identifier.fivem:222222 group.moderator
ช่วยให้ ACE ไม่ปนกับ Resource และ Network Config
㉚ เพิ่ม Admin ใหม่ทำอย่างไร
สมมุติ Admin ใหม่มี Identifier
identifier.fivem:333333
เพิ่ม
add_principal identifier.fivem:333333 group.admin
จากนั้นโหลด Configuration ตามวิธีที่ Server ใช้หรือ Restart Serverอย่างเหมาะสม
㉛ ถอน Admin ทำอย่างไร
ใช้
remove_principal identifier.fivem:333333 group.admin
คำสั่งนี้ลบความสัมพันธ์ Child → Parent ที่กำหนดไว้
ถ้าบรรทัดเดิมยังอยู่ใน Config ต้องลบออกด้วย ไม่เช่นนั้น Restart ครั้งหน้าสิทธิ์อาจถูกเพิ่มกลับมา
㉜ remove_ace ใช้ทำอะไร
ใช้ลบ ACE ที่กำหนดไว้
รูปแบบ
remove_ace [principal] [object] [allow|deny]
ตัวอย่าง
remove_ace group.moderator command.kick allow
ใช้เมื่อต้องการถอน Rule นั้น
㉝ แก้ Config หรือใช้ remove ดี
ถ้า Permission ต้องเปลี่ยนถาวร ควรแก้ Source Configuration ด้วย
เช่นลบ
add_ace group.moderator command.kick allow
ออกจาก permissions.cfg
ไม่เช่นนั้น Restart Server ครั้งถัดไปอาจ Execute Rule เก่ากลับมาอีก
㉞ วิธีทดสอบ ACE
ใช้
test_ace [principal] [object]
ตัวอย่าง
test_ace group.admin command.kick
คำสั่งนี้ใช้ตรวจว่า Principal ถูก Allow หรือ Deny สำหรับ Object นั้น
㉟ ทดสอบ User โดยตรงได้ไหม
ถ้าทราบ Principal สามารถทดสอบกับ Object ที่ต้องการได้
เช่น
test_ace identifier.fivem:111111 command.kick
ช่วยตรวจว่า Inheritance จาก Group ทำงานตามที่คาดหรือไม่
㊱ list_aces คืออะไร
ใช้แสดง ACE ที่มีอยู่
ตัวอย่างผลลัพธ์เชิงแนวคิด
group.admin -> command = ALLOW
group.admin -> command.quit = DENY
ช่วยตรวจว่า Rule ถูกโหลดเข้าระบบแล้วหรือยัง
㊲ list_principals คืออะไร
ใช้ดูความสัมพันธ์ระหว่าง Child และ Parent Principals
ตัวอย่าง
identifier.fivem:111111 <- group.admin
ด้านซ้ายคือ Child และด้านขวาคือ Parent ตามรูปแบบที่เอกสาร Cfx.re แสดง
㊳ se_debug คืออะไร
สามารถใช้
se_debug true
เพื่อเปิด Verbose Logging ของ Security/ACL
ช่วยดูว่าทำไม Principal จึงผ่านหรือไม่ผ่าน Permission Check
เมื่อ Debug เสร็จใช้
se_debug false
ปิด Logging เพิ่มเติม
㊴ Admin ตั้งแล้วแต่ใช้คำสั่งไม่ได้
ตรวจตามลำดับ
Identifier ถูกไหม
↓
add_principal ถูกทิศหรือไม่
↓
Group มี add_ace หรือไม่
↓
Object ตรงกับ Command จริงไหม
↓
Config ถูก Execute หรือไม่
↓
Resource มี Permission System อื่นอีกไหม
จากนั้นใช้
list_aces
list_principals
test_ace
se_debug
ช่วยหาสาเหตุ
㊵ Command Resource อาจไม่ได้ใช้ ACE
สำคัญมาก
ไม่ใช่ทุก Admin Script จะใช้ FXServer ACE
Resource บางตัวอาจใช้
ESX Group
QBCore Permission
Custom Database Role
Discord Role
Own ACL System
ดังนั้นตั้ง group.admin ถูกแล้วไม่ได้แปลว่า Admin Menu ทุกตัวจะเห็นคุณเป็น Admin
㊶ ต้องอ่าน Documentation ของ Resource
ถ้า Resource ระบุว่าใช้ ACE ให้ตั้ง ACE
แต่ถ้าระบุให้เพิ่ม
Framework Group
Discord Role
Database Permission
Config Admin List
ต้องทำตามระบบนั้น
อย่าบังคับใช้ ACE กับ Resource ที่ไม่ได้ตรวจ ACE
㊷ ACE กับ txAdmin เป็นคนละระบบ
จุดนี้ต้องจำให้แม่น
ACE
→ FXServer Access Control
txAdmin Permissions
→ Permission System ของ txAdmin
การเป็น group.admin ไม่ได้หมายความว่าจะได้ txAdmin all_permissions โดยอัตโนมัติ
㊸ txAdmin Permission มีอะไรบ้าง
ตัวอย่าง Permission ปัจจุบัน ได้แก่
all_permissions
manage.admins
console.view
console.write
control.server
commands.resources
server.cfg.editor
players.warn
players.kick
players.ban
players.teleport
และ Permission อื่นตาม Feature ของ txAdmin
㊹ txAdmin เก็บ Admin ที่ไหน
เอกสาร txAdmin ปัจจุบันระบุว่า Permissions ถูกบันทึกใน
txData/admins.json
และจัดการผ่าน Admin Manager ได้โดย Master Admin หรือผู้ที่มี all_permissions หรือ manage.admins
㊺ อย่าแก้ ACE เพื่อแก้ txAdmin Permission
ถ้าคนหนึ่งเข้า txAdmin ได้แต่กด Restart Server ไม่ได้
ควรตรวจ
control.server
ใน txAdmin Permission
ไม่ใช่เพิ่ม
add_ace group.admin command allow
เพราะเป็นคนละระบบ
㊻ Security ที่แนะนำสำหรับ Staff
ตัวอย่างแนวคิด
Owner
→ Server/Config/Admin Management
Admin
→ Player Management + Commands ที่จำเป็น
Moderator
→ Player Moderation
Resource
→ เฉพาะ Commands ที่ Resource ต้อง Execute
อย่าให้ทุกคน Root Permission เพียงเพราะตั้งง่าย
㊼ สิ่งที่ไม่ควรทำ
หลีกเลี่ยง
แจก command allow ให้ Staff ทุกระดับ
แจก all_permissions ทุก txAdmin Account
ใช้ Identifier ตัวอย่างจาก Tutorial
ให้ Resource command allow ทั้งหมด
ใส่ Permission ซ้ำหลายไฟล์
แก้ ACL โดยไม่ทดสอบ
Permission ที่กว้างเกินไปกลายเป็นความเสี่ยงต่อ Production Server ได้
㊽ Checklist ตั้ง Admin Permission
ตรวจ
Identifier ของ Admin ถูก
add_ace ถูก
add_principal Child/Parent ถูก
Group มี Permission จริง
Moderator แยกจาก Admin
Resource ได้สิทธิ์เฉพาะที่ต้องใช้
permissions.cfg ถูก exec
ไม่มี Config ซ้ำ
list_aces เห็น Rule
list_principals เห็น Membership
test_ace ผ่าน
txAdmin Permission แยกตรวจต่างหาก
㊾ ตัวอย่าง Configuration สำหรับ Production
ตัวอย่างเริ่มต้น
# ========================================
# ADMIN GROUP
# ========================================
add_ace group.admin command allow
add_ace group.admin command.quit deny
# ========================================
# MODERATOR GROUP
# ========================================
add_ace group.moderator command.kick allow
# ========================================
# RESOURCE PERMISSIONS
# ========================================
add_ace resource.myframework command.add_principal allow
add_ace resource.myframework command.remove_principal allow
# ========================================
# ADMIN USERS
# ========================================
add_principal identifier.fivem:111111 group.admin
# ========================================
# MODERATOR USERS
# ========================================
add_principal identifier.fivem:222222 group.moderator
ค่าด้านบนเป็นโครงสร้างตัวอย่าง ต้องเปลี่ยน Identifier, Resource Name และ Permission Object ให้ตรงกับ Server จริง
㊿ สรุปวิธีตั้ง Admin Permission ด้วย add_ace และ add_principal FiveM
โครงสร้างที่ต้องจำมีเพียง
add_ace [principal] [object] [allow|deny]
สำหรับกำหนดสิทธิ์
และ
add_principal [child] [parent]
สำหรับกำหนดการสืบทอด Permission
Admin แบบพื้นฐานจึงเป็น
add_ace group.admin command allow
add_ace group.admin command.quit deny
add_principal identifier.fivem:123456 group.admin
แล้วตรวจด้วย
list_aces
list_principals
test_ace
หาก ACL ซับซ้อนสามารถใช้
se_debug true
ช่วยวิเคราะห์ Permission Check
สำหรับ Production Server comsiam แนะนำให้แยก ACL ออกจาก server.cfg เป็น
permissions.cfg
แล้วเรียก
exec permissions.cfg
ทำให้ตรวจสอบและ Backup Permission ง่ายกว่า
และต้องจำว่า
FiveM ACE
≠
txAdmin Permission
≠
Framework Permission
ทั้งสามระบบสามารถอยู่ใน Server เดียวกันได้ แต่ทำหน้าที่คนละส่วน
แนวทางที่ปลอดภัยที่สุดสำหรับ FiveM Server ของ comsiam คือสร้าง Group ตามหน้าที่ ให้สิทธิ์เท่าที่จำเป็น และทดสอบ ACL ก่อนเปิด Production
Flow ที่แนะนำคือ
สร้าง Group
↓
add_ace
↓
add_principal
↓
list_aces
↓
list_principals
↓
test_ace
↓
ทดสอบ Command จริง
↓
ลด Permission ที่ไม่จำเป็น
วิธีนี้ทำให้ระบบ Admin มีโครงสร้างชัดเจน เพิ่มหรือลบ Staff ได้ง่าย และลดความเสี่ยงจากการแจก Permission กว้างเกินไป
Comments
Post a Comment