ჟურნალი იზრდება, მაგრამ ხელახლა ვერ იქმნება: შეამოწმეთ დირექტორიის ACL
ფაილში დამატებას მის დირექტორიაში ახალი სახელი არ სჭირდება; შექმნას კი სჭირდება. სანამ რამეს გააფართოებთ, შეადარეთ წვდომის ACL მემკვიდრეობით ნაგულისხმევ მნიშვნელობებს.
ჟურნალი, რომელიც განუწყვეტლივ იზრდება, წყვეტს ზრდას იმ წამს, როცა რაღაც მას ხელახლა ქმნის, და შეცდომა ამბობს, რომ ნებართვა უარყოფილია. მაცდური დასკვნაა, რომ თავად ჟურნალის ფაილს მეტი ნებართვა სჭირდება, თუმცა ფაილი შეიძლება უკვე იყოს ჩაწერადი იმავე ანგარიშისთვის. არსებულ სახელზე დამატება და ახალი სახელის შექმნა ორი განსხვავებული შემოწმებაა, და მხოლოდ მეორე მიმართავს დირექტორიას.
დამატება და შექმნა განსხვავებული შემოწმებებია
არსებული ფაილის დასამატებლად გახსნას სჭირდება ჩაწერის უფლება ამ ფაილზე და ძიების უფლება მისი ბილიკის ყველა დირექტორიაზე. ფაილის შექმნას სჭირდება ჩაწერა და ძიება მის შემცველ დირექტორიაზე, რადგან ოპერაცია მას სახელს უმატებს. ფაილის გადარქმევით ჩანაცვლება ორივე დირექტორიას და მათ sticky-bit წესებსაც ეხება.
| Operation | What must permit it | Typical failure message |
|---|---|---|
| Append to an existing log | File write access, path traversal | Permission denied on the file |
| Create a missing log | Directory write and search access | Permission denied on the path |
| Rename a replacement into place | Both directories, plus sticky restrictions | Permission denied or operation not permitted |
უკვე გახსნილი დესკრიპტორი მეოთხე შემთხვევას ამატებს. პროცესს შეუძლია შეინარჩუნოს ჩაწერის სახელური, რომელიც გაიხსნა პრივილეგიების დატოვებამდე, და მაინც ვერ შეძლოს იმავე ბილიკის ხელახლა გახსნა მისი გვიანდელი იდენტობით. წარმატებული დამატებები და წარუმატებელი შექმნა შეიძლება ორივე ჭეშმარიტი იყოს, იმავე წამს, იმავე პროცესისთვის.
ნაგულისხმევი ACL-ები მემკვიდრეობით მოდის, ისინი არ ანიჭებენ
ნაგულისხმევი პრეფიქსით დაწყებული ჩანაწერი აღწერს, თუ რას მემკვიდრეობით იღებენ ახალი ობიექტები დირექტორიისგან. ის არაფერს ანიჭებს თავად დირექტორიას და არ არემონტებს უკვე არსებული ფაილის ACL-ს.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
წვდომის ჩანაწერები ცალკე წაიკითხეთ ნაგულისხმევებისგან, და წაიკითხეთ ნიღაბი. დასახელებული ჩანაწერი, რომელიც სრულ უფლებებს ჩამოთვლის, მაინც შეიძლება შეიზღუდოს ნიღბით, ამიტომ effective კომენტარს უფრო მეტი მნიშვნელობა აქვს, ვიდრე პირველი ხაზის ასოებს.
გამოიყენეთ გადაწყვეტილი ბილიკი და არა კონფიგურაციაში არსებული ბილიკი. სიმბმული, მონტირების წერტილი ან მობრუნებული დირექტორია შეიძლება რეალური ფაილი მოათავსოს იქ, სადაც თქვენ მიერ მინიჭებული ნებართვა არასდროს აღწევს. ჯერ სახელის ხელსაწყოთი გაიარეთ ბილიკი, შემდეგ შეადარეთ ყოველი დონე შესაბამის ანგარიშს. ზედა დონის დირექტორიის გამოცნობა ზუსტად ისაა, რის გამოც შესწორება ერთი დონით მაღლა ხვდება.
დაადგინეთ, ვინ წერს იმ წამს
სანამ რამეს შეცვლით, შეამოწმეთ სერვისის ერთეული, მისი drop-in-ები და თავად დემონის ანგარიშის პარამეტრები. დამატებითი პროცესი და ხელახლა შემქმნელი პროცესი შეიძლება განსხვავებული იყოს: როტაციის დამხმარე, სტატუსის მწერალი და ვებ-მკითხველი იშვიათად იზიარებენ იდენტობას.
root გარსიდან გაშვებული ტესტი არ ამრავლებს შეზღუდულ სერვისს, და ის წარმატებით დასრულდება, სანამ სერვისი კვლავ ვერ მუშაობს. გაამრავლეთ წარუმატებელი ოპერაცია იმავე ერთეულის ქვეშ, იმავე ანგარიშით და იმავე sandbox პარამეტრებით. თუ არ შეგიძლიათ, გაუშვით ერთეული დროებითი გარსით და შეამოწმეთ, რა იდენტობას აცხადებს ის. ყველაფერი სხვა თქვენს ტერმინალს ზომავს და არა სერვისს.
თუ შექმნა ნამდვილად საჭიროა, მიეცით მწერალს წვდომა გამოყოფილ ჟურნალის დირექტორიაზე, ხოლო მომხმარებლებისთვის კითხვის წვდომა ცალკე შეინარჩუნეთ. საერთო ანგარიშის ან მთელი აპლიკაციის ხის ჩაწერადობა ერთი logging გამოძახების დასაკმაყოფილებლად პატარა პრობლემას დიდზე ცვლის.
მოაბრუნეთ ხელახლა შემოტანის გარეშე
ვინც ფაილს ხელახლა ქმნის, ის წყვეტს მის მფლობელსა და რეჟიმს შემდეგი ციკლისთვის, ამიტომ შეათანხმეთ შესწორება როტაციის კონფიგურაციასთან. სხვა ანგარიშით ან ახალი ACL-ით შექმნილი ჩამნაცვლებელი წარმატებული შესწორების შემდეგ კვლავ აბრუნებს ხარვეზს.
რეჟიმი და ჯგუფი დააყენეთ შექმნისას და არა შემდეგ, და გადაამოწმეთ შემდეგი როტაცია და არა შემდეგი დამატება. დამატება მხოლოდ იმეორებს უკვე გავლილ ტესტს. თუ როტაციის ხელსაწყო გთავაზობთ შექმნის რეჟიმის პარამეტრს, გამოიყენეთ ის შექმნის შემდეგ chmod-ის ნაცვლად. შექმნასა და chmod-ს შორის შუალედი ზუსტად ის არის, როცა შემდეგი ჩაწერა შეიძლება ჩავარდეს.
როცა მოკვეთა მაინც არ გამოდის, შეწყვიტეთ ნებართვების დამატება
ფაილის მოკვეთის წარუმატებლობა, რომელშიც თქვენ შეგიძლიათ ჩაწერა, არ აიხსნება დირექტორიის ნებართვებით, და მათი მეტის დამატება არ დაგეხმარებათ. ნაცვლად ამისა შეხედეთ ატრიბუტებსა და შეზღუდვას: append-only ატრიბუტი ჩაწერას მხოლოდ დამატების რეჟიმში უშვებს, ხოლო მხოლოდ-კითხვადი მონტაჟი ან სერვისის sandbox შეიძლება უარყოს ოპერაცია, რომელსაც ACL უშვებს.
შეამოწმეთ ერთეულის ფაილური სისტემის შეზღუდვები და ბილიკის მონტაჟის პარამეტრები, შემდეგ გაამრავლეთ ზუსტად ის ოპერაცია, რომელიც ჩავარდა. იმ ნებართვის გაფართოება, რომელსაც არასდროს ჰკითხეს, მხოლოდ მალავს, რომელი შეზღუდვა იყო რეალური. მოაშორეთ ერთი შეზღუდვა ერთდროულად გასაყრელ ერთეულში, და დააბრუნეთ იგი სანამ რაიმე მუდმივს შეცვლიდეთ.