RE:NODE

Minecraft12 წუთის საკითხავი

Minecraft-ის whitelist და უფლებები: ops, ჯგუფები და როლები

რატომ არ არის ოპერატორი როლი, როგორ მუშაობს whitelist და ops.json სინამდვილეში და LuckPerms-ის ჯგუფების კიბე, რომელიც მზარდ თემს გაუძლებს.

განახლებულია

0 მკითხველი

ოპერატორი როლი არ არის. ეს სრული კონტროლია - სერვერის გაჩერება, სამყაროს რედაქტირება, ოპერატორობის სხვისთვის მიცემა - და მისი დარიგება იმიტომ, რომ მეგობარს დღის დროის შეცვლა სჭირდებოდა, სწორედ ის გზაა, რომლითაც სერვერებს ისინი ანადგურებენ, ვისაც კარგი განზრახვა ჰქონდა. მუშა კონფიგურაცია სამი რამისგან შედგება: whitelist, რომ უცხოები არ იყვნენ, permissions plugin, რომ ranks ჯგუფები იყოს და არა გამონაკლისების სია, და იმდენი ოპერატორი, რამდენიც სერვერს ნამდვილად სჭირდება, რაც ჩვეულებრივ ერთია.

ეს პოსტი სამივეს ნამდვილი ფაილებითა და ნამდვილი ბრძანებებით ფარავს: whitelist.json და ops.json, ოპერატორის ოთხი დონე და რატომ უგულებელყოფს მათ უმეტესობას Bukkit, LuckPerms დაყენებიდან მუშა ჯგუფების კიბემდე, node-ები, რომლებსაც ყველაზე ხშირად აკრეფ, და როგორ გაიგო, რომელი უფლება აკლია სინამდვილეში, გამოცნობის ნაცვლად.

ოპერატორი უფლებების სისტემა არ არის#

Vanilla-ს ოთხი ოპერატორის დონე აქვს, რომლებიც თითო მოთამაშეზე ops.json-შია დაყენებული:

დონერას ხსნის
1Spawn-ის დაცვის გვერდის ავლა. სხვა არაფერი
2/gamemode, /give, /tp, /summon, /setblock, /effect, /gamerule, command block-ები
3/ban, /kick, /op, /deop, /whitelist, /pardon
4/stop, /save-off, /debug - ყველაფერი
ops.json
[  {    "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-ების უმეტესობას, რომლებსაც ხალხი მის ნაცვლად აყენებს. ეს ყველაზე იაფი მოდერაციაა.

server.properties
white-list=trueenforce-whitelist=trueonline-mode=true

white-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-ს დისკიდან თავიდან კითხულობს

თავად ფაილი პატარაა:

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-ზე და მიუთითე პანელის მონაცემთა ბაზის სლოტის მონაცემებზე; ერთი გაზიარებული საცავი ფაილების სერვერებს შორის კოპირებას ყოველთვის სჯობს.

მოდელი სამი ფენაა და მათი განცალკევება მთელი ხრიკია:

  1. ჯგუფი უფლებებს ინახავს.
  2. ჯგუფს შეუძლია სხვა ჯგუფის მემკვიდრეობა, ამიტომ სიის გამეორების ნაცვლად განსხვავებას აღწერ.
  3. მომხმარებელი ჯგუფში ჩაისმება და პირდაპირ არაფერს იღებს.

განსაზღვრე მცირე რაოდენობის ჯგუფი, თითოეულს მისცე კონკრეტული ბრძანებები, რაც სჭირდება, და ადამიანები ჯგუფებში ჩააყენე. ერთხელ ოცი წუთი სჭირდება და ექვსი თვის შემდეგ ინდივიდუალური გამონაკლისების სიას გიცავს, რომელსაც ვერავინ შეამოწმებს. როცა დაინახავ, რომ 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 moderator

default ჯგუფია, რომელშიც ყველა არის და რომლის წაშლაც არ შეიძლება. 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-ზე ააგო და შემდეგ ერთი რამ უკან წაართვა:

code
lp group moderator permission set essentials.tphere false

და მთელი plugin შეიძლება ჯგუფისთვის ერთ ხაზში გამოირთოს მისი wildcard-ის უარყოფით, შემდეგ კი ცალკეული ბრძანებები ისევ ჩაირთოს. ეს ჩვეულებრივ ოცდაათი node-ის ჩამოთვლაზე სუფთაა.

Context-ები, track-ები და დროებითი წვდომა#

Context-ები უფლებას პირობასთან აკავშირებს - სამყარო, სერვერი proxy ქსელში, თამაშის რეჟიმი. ისინი საშუალებას იძლევა, ერთი LuckPerms კონფიგურაცია survival და creative სამყაროს ორი ჯგუფების ნაკრების გარეშე ემსახურებოდეს:

code
lp group builder permission set worldedit.* true world=creativelp group default permission set essentials.fly true world=creative

Track-ები ჯგუფების დალაგებული სიაა, რაც დაწინაურებას ერთ ბრძანებად აქცევს და კიბეს ხილულს ხდის:

code
lp createtrack memberslp track members append defaultlp track members append trustedlp track members append moderatorlp user Sam promote members

დროებითი უფლებები დაუფასებელი ფუნქციაა. სტუმარი ბილდერი შაბათ-კვირისთვის, მოდერატორი, რომელიც შენს არყოფნაში ცვლის, donor rank ერთი თვის ვადით - ყველა თავისით იწურება, რაც ნიშნავს, რომ მათი მოცილება არ უნდა გახსოვდეს:

code
lp user Sam parent addtemp moderator 14dlp user Guest permission settemp worldedit.* true 48h

ეს იგივე ჩვევაა, რომელიც ჰოსტინგის ანგარიშზეც ღირს, სადაც წვდომა იმდენ ხანს უნდა გაიცეს, რამდენსაც სამუშაო გრძელდება, და არა მეტს. Subuser-ები და უმცირესი პრივილეგია იმავე არგუმენტს პანელზე აყენებს.

როცა ვინმე ამბობს, რომ უფლება არ აქვს#

Node-ს ნუ გამოიცნობ. LuckPerms გეტყვის, რომელი შემოწმდა:

code
lp verbose on

მოთამაშეს გაუშვებინე ბრძანება, რომელიც ვარდება, შემდეგ:

code
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-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.

0/2000