ბლოგიVPS & Cloud
SERVER1 Logo Dark Icon
VPS & Cloud

რატომ არ უნდა გაუშვათ ყველაფერი root-ით VPS-ზე

რატომ არის root-ით ყველა პროცესის გაშვება რისკი და როგორ გადავიდეთ least-privilege მოდელზე უსაფრთხოდ, downtime-ის გარეშე.

SERVER1.GE3 წუთი წასაკითხად
რატომ არ უნდა გაუშვათ ყველაფერი root-ით VPS-ზე

VPS-ზე root access აუცილებელია ადმინისტრირებისთვის, მაგრამ ყველაფრის root-ით გაშვება ცუდი პრაქტიკაა. თუ web application, worker, deployment script ან backup process root უფლებებით მუშაობს, ერთი bug ან ერთი კომპრომეტირებული process მთელ სისტემაზე ზედმეტად დიდ კონტროლს იღებს.

რეალური პრობლემა: ერთი შეცდომა, ძალიან დიდი ზიანი

წარმოიდგინეთ Node.js ან PHP process, რომელსაც შემთხვევით აქვს ფაილების წაშლის bug. ჩვეულებრივი service user-ის შემთხვევაში ზიანი იმ directories-ით შემოიფარგლება, რომლებზეც ამ user-ს წვდომა აქვს. root-ის შემთხვევაში ბუნებრივი საზღვარი თითქმის აღარ არსებობს.

სამი როლი, რომლებიც ერთმანეთისგან უნდა გაიმიჯნოს

როლირისთვის გამოიყენებარას უნდა მოერიდოთ
rootOS, packages, firewall, usersაპლიკაციის მუდმივი process
deploy userrelease და controlled deployსისტემის სრული ადმინისტრირება
service userPHP, Node, worker, queueსხვა პროექტების ფაილებზე წვდომა

ჰოსტინგის უსაფრთხოების ფენების მიმოხილვა კარგად აჩვენებს, რატომ არ არსებობს ერთი უნივერსალური დაცვის მექანიზმი. პრაქტიკული server-side კონტროლებისთვის სასარგებლოა სერვერის მართვის ინსტრუმენტების სტატია.

sudo-ს სწორი როლი

საუკეთესო პრაქტიკაა ადმინისტრატორი მუშაობდეს საკუთარი user-ით და მხოლოდ კონკრეტული ბრძანებისთვის გამოიყენოს sudo. გუნდში ყველას საკუთარი SSH key უნდა ჰქონდეს. საერთო root password განსაკუთრებით ცუდია, რადგან აღარ ჩანს ვინ რა შეცვალა.

Deployment-ის დროს

  • კოდის owner იყოს deploy ან service user;
  • secret files-ს ჰქონდეს მინიმალური permissions;
  • web process-ს write access ჰქონდეს მხოლოდ საჭირო directories-ზე;
  • system configuration root/admin ownership-ში დარჩეს.
root უნდა იყოს privilege, რომელსაც საჭიროებისას იყენებთ, და არა default identity, რომლითაც ყველაფერი მუშაობს.

თუ Linux administration თქვენს გუნდს ეკუთვნის, SERVER1 Unmanaged VPS გაძლევთ სრულ კონტროლს. თუ OS-level ოპერაციების გადაბარება გინდათ, შეადარეთ Managed VPS. პასუხისმგებლობების სწორად გაყოფის შესახებ დამატებით ნახეთ სერვერის მართვისა და დროის ეკონომიის სტატია.

როგორ გადავიდეთ „ყველაფერი root-ით“ მოდელიდან უსაფრთხო მოდელზე

არსებულ production server-ზე privilege model-ის შეცვლა ერთჯერადი მასობრივი `chown`-ით არ დაიწყოთ. ჯერ შეადგინეთ dependency map: რომელი process რომელი user-ით მუშაობს, სად წერს ფაილებს, რომელ socket-ს ან secret-ს კითხულობს და რომელი scheduled job შეიძლება root-ზე იყოს დამოკიდებული.

  1. Process inventory: ჩამოწერეთ root-ით გაშვებული long-running services და დაასაბუთეთ, მართლა სჭირდებათ თუ არა UID 0.
  2. File ownership: application code, uploads, cache და logs ერთმანეთისგან გამოყავით. ყველა directory writable არ უნდა იყოს.
  3. Privilege boundary: შექმენით კონკრეტული service accounts და sudo rules მხოლოდ რეალურად საჭირო ადმინისტრაციული ბრძანებებისთვის.
  4. Second-session test: SSH/sudo ცვლილებებისას ძველი session არ დახუროთ, სანამ ახალი access path არ გამოცადეთ.
  5. Observe before cleanup: deployment, cron და backup ერთი სრული ციკლი გაიაროს, სანამ ძველ უფლებებს საბოლოოდ წაშლით.

სწრაფი audit: სად შეიძლება root ზედმეტად გამოიყენებოდეს?

რას ვამოწმებთრას ვეძებთსასურველი მდგომარეობა
Long-running processesUID 0 process-ებიroot მხოლოდ იქ, სადაც ტექნიკურად აუცილებელია
Application filesroot-owned deploy treeცალკე deploy/service ownership
Scheduled jobsყველა cron root-შიjob-ისთვის მინიმალური საჭირო user
sudoersფართო `ALL=(ALL) ALL` წვდომაპერსონალური account-ები და გააზრებული privilege
Secretsყველასთვის readable configმინიმალური read permissions

ეს ცვლილებები განსაკუთრებით ღირებულია მაშინ, როცა ერთ VPS-ზე რამდენიმე application ან კლიენტის პროექტი ცხოვრობს. ერთი პროექტის compromise არ უნდა გადაიქცეს მთელი VM-ის compromise-ად. სწორედ ამიტომ privilege separation უნდა განიხილოთ firewall-ის, updates-ის, backup-ის და monitoring-ის გვერდით და არა მათ ნაცვლად.

რას არ უნდა ველოდოთ least privilege-ისგან

ცალკე service user ვერ გამოასწორებს დაუპაჩავ vulnerability-ს, მოპარულ administrator key-ს ან ცუდად კონფიგურირებულ public database-ს. მისი მიზანია blast radius-ის შემცირება: როცა რაღაც მაინც გაფუჭდება, ზიანის საზღვარი უფრო ვიწრო იყოს.

SERVER1.GE

არ ხარ დარწმუნებული, რომელი ინფრასტრუქტურა ერგება ამ workload-ს?

მოგვწერე რა ტრაფიკს ელოდები და რა ინფრასტრუქტურა გაქვს ახლა - დაგეხმარებით სწორი ვარიანტის შერჩევაში.

კონსულტაცია SERVER1-თან