ოპერატორი როლი არ არის. ეს სრული კონტროლია - სერვერის გაჩერება, სამყაროს რედაქტირება, ოპერატორობის სხვისთვის მიცემა - და მისი დარიგება იმიტომ, რომ მეგობარს დღის დროის შეცვლა სჭირდებოდა, სწორედ ის გზაა, რომლითაც სერვერებს ისინი ანადგურებენ, ვისაც კარგი განზრახვა ჰქონდა. მუშა კონფიგურაცია სამი რამისგან შედგება: whitelist, რომ უცხოები არ იყვნენ, permissions plugin, რომ ranks ჯგუფები იყოს და არა გამონაკლისების სია, და იმდენი ოპერატორი, რამდენიც სერვერს ნამდვილად სჭირდება, რაც ჩვეულებრივ ერთია.
ეს პოსტი სამივეს ნამდვილი ფაილებითა და ნამდვილი ბრძანებებით ფარავს: whitelist.json და ops.json, ოპერატორის ოთხი დონე და რატომ უგულებელყოფს მათ უმეტესობას Bukkit, LuckPerms დაყენებიდან მუშა ჯგუფების კიბემდე, node-ები, რომლებსაც ყველაზე ხშირად აკრეფ, და როგორ გაიგო, რომელი უფლება აკლია სინამდვილეში, გამოცნობის ნაცვლად.
ოპერატორი უფლებების სისტემა არ არის#
Vanilla-ს ოთხი ოპერატორის დონე აქვს, რომლებიც თითო მოთამაშეზე ops.json-შია დაყენებული:
| დონე | რას ხსნის |
|---|---|
| 1 | Spawn-ის დაცვის გვერდის ავლა. სხვა არაფერი |
| 2 | /gamemode, /give, /tp, /summon, /setblock, /effect, /gamerule, command block-ები |
| 3 | /ban, /kick, /op, /deop, /whitelist, /pardon |
| 4 | /stop, /save-off, /debug - ყველაფერი |
[ { "uuid": "069a79f4-44e9-4726-a5be-fca90e38aaf5", "name": "Notch", "level": 2, "bypassesPlayerLimit": false }]/op <player> ყოველთვის იძლევა დონეს, რომელიც server.properties-ში op-permission-level-ითაა მითითებული და ნაგულისხმევად 4-ია. ვინმესთვის მე-2 დონის მისაცემად ფაილს რედაქტირებ. function-permission-level (ნაგულისხმევი 2) არის ცალკე დონე, რომლითაც function-ები და datapack-ები მუშაობს, ხოლო bypassesPlayerLimit ამ მოთამაშეს ავსებულ სერვერზე შესვლის საშუალებას აძლევს.
აი ნაწილი, რომელიც დონეების მთელ სისტემას რეალურ სერვერზე თითქმის უსარგებლოს ხდის: Bukkit, Spigot და Paper plugin-ების უფლებებზე დონეებს არ ითვალისწინებს. თითქმის ყველა plugin თავის უფლებებს ნაგულისხმევით op-ზე აცხადებს, რაც ნიშნავს, რომ ნებისმიერ ოპერატორს ყველა მათგანი აქვს იმისგან დამოუკიდებლად, პირველი დონეა თუ მეოთხე. გაუფრთხილებლობით ახალ მოდერატორს მე-2 დონეზე op მისცემ და ამით მას WorldEdit-ს, EssentialsX-ის ყველა ბრძანებასა და CoreProtect-ით სამყაროს უკან დაბრუნების უფლებასაც აძლევ.
ამიტომ წესი მარტივია და მისი მკაცრად დაცვა ღირს. ოპერატორები იმ ადამიანისთვისაა, ვინც მანქანას ადმინისტრირებს. ყველა დანარჩენი - მოდერატორები, ბილდერები, donor-ები, სანდო რეგულარები - permissions plugin-ის ჯგუფს იღებს და ოპერატორის სტატუსს საერთოდ არა. როცა რამე ერთხელ უნდა გაუშვა, გაუშვი პანელის კონსოლიდან: კონსოლი ყოველთვის მე-4 დონეზეა და ყველა უფლება აქვს, ამიტომ ერთი ბრძანებისთვის საკუთარი თავის op-ად გადაქცევა არასოდეს გჭირდება. კონსოლის კითხვა ამბობს, კიდევ რაში გამოდგება, ხოლო სერვერის ბრძანებების cheatsheet თავად ბრძანებებს შეიცავს.
Whitelist, ზუსტად#
whitelist-ით დაცულ სერვერს grief-ის პრობლემა არ აქვს, რადგან უცხოები არ ჰყავს. მეგობრებისთვის გაშვებულ სერვერზე ეს ერთი პარამეტრი ცვლის plugin-ების უმეტესობას, რომლებსაც ხალხი მის ნაცვლად აყენებს. ეს ყველაზე იაფი მოდერაციაა.
white-list=trueenforce-whitelist=trueonline-mode=truewhite-list მას რთავს. enforce-whitelist ის არის, რომელსაც ხალხი ივიწყებს: false-ზე whitelist-ის ჩართვა ან გადატვირთვა უკვე დაკავშირებულ არავის არ აშორებს, ამიტომ მოთამაშე, რომელიც ახლახან სიიდან ამოიღე, სანამ არ გავა, რჩება. დააყენე true და reload სიაში არმყოფ ყველას მაშინვე აგდებს.
| ბრძანება | რას აკეთებს |
|---|---|
whitelist on / whitelist off | რთავს/თიშავს აღსრულებას და white-list-ს properties ფაილში უკან წერს |
whitelist add <name> | ეძებს სახელს, პოულობს UUID-ს, whitelist.json-ს ამატებს |
whitelist remove <name> | ჩანაწერს შლის |
whitelist list | ბეჭდავს მიმდინარე სახელებს |
whitelist reload | ხელით რედაქტირების შემდეგ whitelist.json-ს დისკიდან თავიდან კითხულობს |
თავად ფაილი პატარაა:
[ { "uuid": "069a79f4-44e9-4726-a5be-fca90e38aaf5", "name": "Notch" }]ორი ქცევა ცოდნას იმსახურებს. ოპერატორები whitelist-ს მთლიანად უვლიან გვერდს, რაც მოსახერხებელია და ასევე ნიშნავს, რომ ძველი ოპერატორის ჩანაწერი შესასვლელია, რომელსაც whitelist ვერ დახურავს - whitelist-ის აუდიტისას ops.json-იც შეამოწმე. და whitelist off სიას არ ასუფთავებს, ამიტომ ხელახლა ჩართვისას ზუსტად იგივე ადამიანები აღდგება; ღონისძიებისთვის სერვერის გახსნისას ჩანაწერების წაშლის მიზეზი არ არსებობს.
UUID-ები, offline mode და whitelist, რომელიც არ მუშაობს
whitelist add იმ მოთამაშეზეც მუშაობს, რომელიც არასოდეს შემოსულა, რადგან სერვერი Mojang-ს სახელის უკან მდგომ UUID-ს ეკითხება. ამ მოძებნას სჭირდება, რომ სერვერი ინტერნეტს წვდებოდეს და სახელი არსებობდეს. "That player does not exist" თითქმის ყოველთვის ბეჭდვის შეცდომაა, შეცვლილი სახელი, ან Bedrock-ის gamertag, რომელიც Java სერვერზე აკრიფეს.
online-mode=false-ზე არაფერი მოწმდება. UUID-ები Mojang-ის გაცემის ნაცვლად მომხმარებლის სახელიდან გენერირდება, ამიტომ whitelist-ის ჩანაწერი, რომელიც online-mode-ის ჩართულობისას ჩაიწერა, იმავე მოთამაშეს ვერ დაემთხვევა მისი გამორთვის შემდეგ, ხოლო ნებისმიერს შეუძლია დაუკავშირდეს სიაში არსებული ნებისმიერი სახელით. Offline mode proxy-ს უკან, სწორი forwarding-ით უნდა იყოს და სხვაგან არსად. თუ ერთს უშვებ, წაიკითხე რას აკეთებს reverse proxy და forwarding-ის საიდუმლო სწორად დააყენე, სანამ online-mode-ს შეეხები.
Bedrock-ის მოთამაშეები, რომლებიც Geyser-ისა და Floodgate-ის გავლით შემოდიან, მესამე შემთხვევაა: მათ გენერირებული UUID და პრეფიქსიანი მომხმარებლის სახელი აქვთ, ამიტომ მათი gamertag-ის whitelist.json-ში ხელით ჩასმა არ დაემთხვევა. Floodgate ზუსტად ამ მიზეზით საკუთარ whitelist ბრძანებას მოიცავს - Geyser და Bedrock-ის crossplay დაყენებას აღწერს.
LuckPerms: ჯგუფები, შემდეგ უფლებები, შემდეგ ადამიანები#
LuckPerms არის permissions plugin. დაყენება არის jar plugins/-ში და გადატვირთვა; ის მუშაობს Paper-ზე, Velocity-ზე, Fabric-ზე, Forge-სა და NeoForge-ზე და მონაცემებს ნაგულისხმევად plugins/LuckPerms/-ის ქვეშ H2 ფაილში ინახავს. ერთი სერვერისთვის ეს ნაგულისხმევი კარგია. თუ რამდენიმეს უშვებ, რომლებიც ranks უნდა იზიარებდნენ, შეცვალე storage-method plugins/LuckPerms/config.yml-ში SQL backend-ზე და მიუთითე პანელის მონაცემთა ბაზის სლოტის მონაცემებზე; ერთი გაზიარებული საცავი ფაილების სერვერებს შორის კოპირებას ყოველთვის სჯობს.
მოდელი სამი ფენაა და მათი განცალკევება მთელი ხრიკია:
- ჯგუფი უფლებებს ინახავს.
- ჯგუფს შეუძლია სხვა ჯგუფის მემკვიდრეობა, ამიტომ სიის გამეორების ნაცვლად განსხვავებას აღწერ.
- მომხმარებელი ჯგუფში ჩაისმება და პირდაპირ არაფერს იღებს.
განსაზღვრე მცირე რაოდენობის ჯგუფი, თითოეულს მისცე კონკრეტული ბრძანებები, რაც სჭირდება, და ადამიანები ჯგუფებში ჩააყენე. ერთხელ ოცი წუთი სჭირდება და ექვსი თვის შემდეგ ინდივიდუალური გამონაკლისების სიას გიცავს, რომელსაც ვერავინ შეამოწმებს. როცა დაინახავ, რომ node-ს ერთ ადამიანს აძლევ, საკუთარ თავს ჰკითხე, რომელ ჯგუფშია ეს ადამიანი სინამდვილეში.
lp creategroup trustedlp creategroup moderatorlp creategroup adminlp group trusted parent add defaultlp group moderator parent add trustedlp group admin parent add moderatorlp group trusted setweight 10lp group moderator setweight 50lp group admin setweight 100lp user Alex parent set moderatordefault ჯგუფია, რომელშიც ყველა არის და რომლის წაშლაც არ შეიძლება. Weight წყვეტს, რომელი ჯგუფის prefix და suffix იმარჯვებს, როცა ვინმე რამდენიმეშია; მას არაფერი აქვს საერთო იმასთან, რომელი უფლებები მოქმედებს - ეს მემკვიდრეობით და აშკარა false node-ებით წყდება, რომლებიც მემკვიდრეობით მიღებულ true-ს სჯობს.
/lp editor ჩვენი ყურადღების ღირსია, სანამ ორმოცდაათ permission set ბრძანებას აკრეფ. ის შენს მიმდინარე კონფიგურაციას ერთჯერად ვებ გვერდზე ტვირთავს, ცხრილში უფლებებს გადაათრევ და კოდს /lp applyedits <code>-ით უკან ჩასვამ. არაფერი საჯარო არ არის და რედაქტირების გარდა არაფერი ინახება. სრული ტური LuckPerms-ის გზამკვლევშია.
ჯგუფების კიბე, რომელიც მუშაობს#
ოთხი ჯგუფი თითქმის ყველა თემს ფარავს. მეტი მაშინ დაამატე, როცა ვინმე ისეთ კონკრეტულ უფლებას დაასახელებს, რომელიც ახალ ჯგუფს აქვს და ქვემოთ მყოფს - არა.
| ჯგუფი | ვინ | რა შეუძლია |
|---|---|---|
default | ყველა | თამაში. ჩატი, /spawn, ერთი home |
trusted | რეგულარები, გარკვეული დროის შემდეგ | კომფორტის ბრძანებები, მეტი home, kit-ები |
moderator | თანამშრომლები | Kick, mute, tempban, ნახვა ვინ რა გააკეთა |
admin | შენ და, შესაძლოა, კიდევ ერთი | ყველაფერი, პანელის ანგარიშის გარდა |
lp group default permission set essentials.spawn truelp group default permission set essentials.home truelp group default permission set essentials.sethome truelp group trusted permission set essentials.sethome.multiple.trusted truelp group trusted permission set essentials.tpa truelp group trusted permission set essentials.back truelp group moderator permission set essentials.kick truelp group moderator permission set essentials.mute truelp group moderator permission set essentials.vanish truelp group moderator permission set coreprotect.inspect truelp group moderator permission set coreprotect.lookup truelp group admin permission set coreprotect.rollback truelp group admin permission set worldedit.* trueამ სიაში სამი შეგნებული არჩევანია. მოდერატორებს ბლოკების ლოგის დათვალიერება შეუძლიათ, მაგრამ დაბრუნება - არა, რადგან არასწორი რადიუსით rollback იმ grief-ზე უარესია, რომლის გასწორებაც უნდოდათ. Admin-ზე დაბლა არავის აქვს WorldEdit, რადგან WorldEdit სამყაროს რედაქტორია და //set-ით უბედური შემთხვევა მუდმივია. და essentials.gamemode არცერთ სიაში არ არის - creative რეჟიმი survival სერვერზე ყოველთვის admin-ის გადაწყვეტილებაა და არა კომფორტი.
Permission node-ები, რომლებსაც ნამდვილად აკრეფ#
Node-ები plugin-ზეა დამოკიდებული, ამიტომ ავტორიტეტული სია ყოველთვის plugin-ის საკუთარი გვერდია. აი ისინი, რომლებიც განუწყვეტლივ ჩნდება:
| Node | რას იძლევა |
|---|---|
minecraft.command.<name> | Vanilla ბრძანება Paper-ზე, მაგ. minecraft.command.gamemode |
essentials.tp, essentials.tphere | მოთამაშეებთან ტელეპორტი და მათი მოხმობა |
essentials.home, essentials.sethome.multiple.<group> | Home-ები და რამდენი |
essentials.kit.<name> | ერთი დასახელებული kit |
essentials.kick, essentials.ban, essentials.mute | მოდერაციის სამეული |
essentials.vanish | შესვლა შეტყობინების გარეშე |
coreprotect.inspect, coreprotect.lookup | ბლოკების ლოგის კითხვა |
coreprotect.rollback, coreprotect.restore | სამყაროს შეცვლა მისი მეშვეობით |
worldedit.* | WorldEdit მთლიანად |
luckperms.* | უფლებების მართვა, საკუთარის ჩათვლით |
ორი ხრიკი დროს დაზოგავს. false-ზე დაყენებული node მემკვიდრეობით მიღებულ იმავე true node-ს სჯობს, ამიტომ moderator შეგიძლია trusted-ზე ააგო და შემდეგ ერთი რამ უკან წაართვა:
lp group moderator permission set essentials.tphere falseდა მთელი plugin შეიძლება ჯგუფისთვის ერთ ხაზში გამოირთოს მისი wildcard-ის უარყოფით, შემდეგ კი ცალკეული ბრძანებები ისევ ჩაირთოს. ეს ჩვეულებრივ ოცდაათი node-ის ჩამოთვლაზე სუფთაა.
Context-ები, track-ები და დროებითი წვდომა#
Context-ები უფლებას პირობასთან აკავშირებს - სამყარო, სერვერი proxy ქსელში, თამაშის რეჟიმი. ისინი საშუალებას იძლევა, ერთი LuckPerms კონფიგურაცია survival და creative სამყაროს ორი ჯგუფების ნაკრების გარეშე ემსახურებოდეს:
lp group builder permission set worldedit.* true world=creativelp group default permission set essentials.fly true world=creativeTrack-ები ჯგუფების დალაგებული სიაა, რაც დაწინაურებას ერთ ბრძანებად აქცევს და კიბეს ხილულს ხდის:
lp createtrack memberslp track members append defaultlp track members append trustedlp track members append moderatorlp user Sam promote membersდროებითი უფლებები დაუფასებელი ფუნქციაა. სტუმარი ბილდერი შაბათ-კვირისთვის, მოდერატორი, რომელიც შენს არყოფნაში ცვლის, donor rank ერთი თვის ვადით - ყველა თავისით იწურება, რაც ნიშნავს, რომ მათი მოცილება არ უნდა გახსოვდეს:
lp user Sam parent addtemp moderator 14dlp user Guest permission settemp worldedit.* true 48hეს იგივე ჩვევაა, რომელიც ჰოსტინგის ანგარიშზეც ღირს, სადაც წვდომა იმდენ ხანს უნდა გაიცეს, რამდენსაც სამუშაო გრძელდება, და არა მეტს. Subuser-ები და უმცირესი პრივილეგია იმავე არგუმენტს პანელზე აყენებს.
როცა ვინმე ამბობს, რომ უფლება არ აქვს#
Node-ს ნუ გამოიცნობ. LuckPerms გეტყვის, რომელი შემოწმდა:
lp verbose onმოთამაშეს გაუშვებინე ბრძანება, რომელიც ვარდება, შემდეგ:
lp verbose pasteმიიღებ ბმულს, რომელიც ჩამოთვლის ყველა უფლების შემოწმებას, ვისთვის იყო, node-ს და რა დაბრუნდა - true თუ false. ჩავარდნილი node იქაა, სწორად დაწერილი, მათ შორის ისეთებიც, რომლებშიც სახელი ან რიცხვია ჩაშენებული, მაგალითად essentials.sethome.multiple.5. შემდეგ გამორთე lp verbose off-ით, რადგან ის ბევრს ლაპარაკობს.
სხვა შემოწმებები, იმ თანმიმდევრობით, რომლითაც ჩვეულებრივ ამართლებს:
lp user <name> infoაჩვენებს მათ ჯგუფებს, weight-ს, prefix-ს და ნებისმიერ დროებით ჩანაწერს უკუთვლით.lp group <group> permission infoჩამოთვლის, რას ინახავს ამ ჯგუფი სინამდვილეში, მემკვიდრეობით მიღებული node-ების ჩათვლით.lp user <name> permission check <node>პირდაპირ კითხვას პასუხობს.
ამ ტიკეტების უმეტესობის ოთხი მიზეზი: მოთამაშე ოპერატორია, ამიტომ plugin-ის ნაგულისხმევები მას ყველაფერს აძლევს და შენი ჯგუფები არაფერს აკეთებს; დაყენებულია მეორე permissions plugin და ორივე ერთმანეთს ეჯიბრება - აირჩიე ერთი; node გაცემულია context-ში, რომელიც სამყაროს, სადაც ის დგას, არ ემთხვევა; ან Vault აკლია, ამიტომ ჩატის plugin prefix-ს ვერ კითხულობს, მიუხედავად იმისა, რომ უფლებები სწორია.
პანელზე წვდომა სხვა კითხვაა#
თამაშში rank და ჰოსტინგზე წვდომა ორი ცალკე სისტემაა და მათი აღრევა რეალური რისკია. მოდერატორს ადამიანების mute-ი სჭირდება. მას არ სჭირდება სერვერის წაშლა, billing გვერდის წაკითხვა ან სამყაროს ჩამოტვირთვა.
RE:NODE-ზე ეს განცალკევება ჩაშენებულია. როლი უფლებებს ინახავს - მხოლოდ კონსოლი, მხოლოდ ფაილები, billing-ის გარეშე - გუნდი ადამიანებს ინახავს, grant კი გუნდს სერვერს აკავშირებს. წვდომა შეიძლება დროში შეიზღუდოს, მოწვევები ბმულით, join კოდით ან ელფოსტით იგზავნება, და ყოველ სერვერს საკუთარი აქტივობის ლოგი აქვს, ამიტომ "ვინ გადატვირთა ის ღამის 2 საათზე" პასუხს იღებს. ბილდერს ფაილების მენეჯერი მიეცი და სხვა არაფერი; თანამფლობელს - კონსოლი და backup-ები; billing შენთვის დატოვე. დაამატე ორფაქტორიანი ავთენტიფიკაცია ანგარიშზე და უარესი შემთხვევა კატასტროფული აღარ არის.
იგივე ლოგიკა RCON-ზეც მოქმედებს. თუ Discord ბოტს ბრძანებების გაშვება სჭირდება, ის იღებს RCON პაროლს შეზღუდულ პორტზე და არა ოპერატორის ანგარიშს - RCON-ის უსაფრთხოდ გამოყენება აღწერს, რა გიჯდება, თუ ამას არასწორად გააკეთებ. და სანამ სერვერს უცხოებს გახსნი, სიის დანარჩენი SMP-ის გაშვების ჩეკლისტსა და grief-დაცვასა და anti-cheat-ში არის.
FAQ#
მჭირდება permissions plugin, თუ მხოლოდ მეგობრებთან ვთამაშობ?
თუ ყველა სანდოა და არავის ბრძანებები არ სჭირდება, არა - whitelist და ერთი ოპერატორი სრული კონფიგურაციაა. LuckPerms დააყენე პირველად, როცა გინდა, რომ ვინმეს /tp ჰქონდეს /stop-ის გარეშე, რაც ჯგუფების უმეტესობისთვის დაახლოებით ერთი თვის შემდეგ ხდება.
აჩერებს whitelist ადამიანებს, რომლებიც უკვე შემოვიდნენ?
მხოლოდ enforce-whitelist=true-ით. გამორთულზე whitelist შესვლისას მოწმდება, ამიტომ ვინც ამჟამად დაკავშირებულია, გათიშვამდე რჩება. ჩართე და whitelist reload მათ იმ წამს აშორებს, როცა ამას ბრძანებ.
როგორ დავამატო whitelist-ში ვინმე, ვინც ჩემს სერვერზე არასოდეს უთამაშია?
whitelist add <name> საკმარისია. სერვერი UUID-ს თავად პოულობს სახელიდან, ამიტომ მათ ჯერ შესვლა არ სჭირდებათ. ის მხოლოდ მაშინ ვარდება, თუ სახელი არასწორადაა დაწერილი, ანგარიში არ არსებობს, ან სერვერს ინტერნეტთან წვდომა არ აქვს.
შეიძლება მოთამაშე ოპერატორიც იყოს და LuckPerms-ითაც შეზღუდული?
ისე, რომ ეს ენდო, არა. ოპერატორის სტატუსი აკმაყოფილებს op ნაგულისხმევს, რომელსაც plugin-ის უფლებების უმეტესობა იყენებს, ამიტომ op თითქმის ყველა შემოწმებას გადის, სანამ შენი ჯგუფები გადამოწმდება. თანამშრომლებს op ჩამოართვი და ჯგუფი მიეცი.
რა ემართება უფლებებს სერვერის გადატვირთვისას?
ისინი რჩება - LuckPerms საკუთარ საცავში მაშინვე წერს და არა გამორთვისას. ფაილები, რომლებიც გამორთვისას თავიდან იწერება, vanilla-ს ფაილებია: ops.json, whitelist.json და ban სიები. მათ ბრძანებებით ან გაჩერებულ სერვერზე დაარედაქტირე.
უნდა შეეძლოთ მოდერატორებს სამყაროს უკან დაბრუნება?
მიეცი მათ lookup და inspect უფლებები, rollback კი admin-ებს დაუტოვე. ლოგის კითხვა არის გზა, რომლითაც გაიგებ, რა მოხდა; rollback ისეთი დამანგრეველი რედაქტირებაა რადიუსითა და დროის ფანჯრით, და რომელიმეს არასწორად დაყენება grief-თან ერთად კანონიერ მშენებლობასაც აუქმებს.




კომენტარები
სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.