Vraag Hoe te voorkomen dat gebruikers bestanden verwijderen die al in gebruik zijn?


Overweeg dit scenario:

Gebruiker voert een commando uit in een bestand. Dit bestand wordt nu 'in gebruik'.

$ tail -f somefile.log

In een andere shell verwijdert de gebruiker het bestand.

$ rm somefile.log

Dit bestand is nu 'verwijderd'. Dit betekent dat de enige hardlink naar de inode van het bestand verdwenen is. Als u de volgende opdracht uitvoert, kunt u nog steeds het bestand zien, aangeduid als 'verwijderd'.

$ lsof | grep somefile.log

Schijfruimte gebruikt door somefile.log wordt pas vrijgegeven als de gebruiker het onderbreekt tail commando in dit geval.

Mijn vraag is, is het mogelijk om te voorkomen dat gebruikers bestanden verwijderen die in gebruik zijn op het moment van verwijdering (vergelijkbaar met Windows)? Is het mogelijk om PAM hiervoor te gebruiken?


4
2018-03-10 14:20


oorsprong




antwoorden:


Het is niet mogelijk om bestanden te 'blokkeren' of om te voorkomen dat ze worden gewijzigd door gebruikers die daarvoor toestemming hebben.

Zolang de gebruiker bestandssysteemrechten heeft (write permissies, om precies te zijn) om een ​​bestand te verwijderen, dan kunnen ze het verwijderen. U moet gebruikers en bestandsrechten gebruiken om te voorkomen dat iemand bestanden verwijdert.

Concreet zou ik kijken naar de volgende opdrachten:

chmod
chown
chgrp
adduser
passwd

0
2018-03-10 14:47



Echt het recht om een ​​bestand te verwijderen is afhankelijk van de toestemming die de gebruiker heeft op de directory het bevatten. Proberen "sudo touch file_owned_by_root; rm file_owned_by_root"in je huisadres Je wordt om bevestiging gevraagd, maar je kunt het verwijderen. Onthoud dat in Unix een bestand verwijderd wordt door simpelweg de harde link te verwijderen --- echte verwijdering gebeurt alleen als de laatste hardlink verwijderd is. - Rmano


In Windows wanneer u een bestand opent, wordt het vergrendeld door een proces en kan het niet worden verwijderd of bewerkt totdat het proces het vrijgeeft, dat een primaire reden is voor het opnieuw opstarten na elke update in Windows.

Linux heeft nog een ander mechanisme dat het mogelijk maakt om een ​​bestand te verwijderen terwijl het wordt uitgevoerd, en je kunt het nog steeds gebruiken totdat alle processen die het gebruiken worden beëindigd. Dus hier is het voordeel wanneer u een upgrade uitvoert, het is niet nodig om opnieuw op te starten.

Wanneer u het bestand in Linux verwijdert, wordt het verwijderd wanneer alle verwijzingen naar dit bestand worden verwijderd. Als u de verwijdering wilt oplossen, moet u hardlinks voor dit bestand maken of werken met machtigingen van de gebruiker voor dit bestand.


0
2018-03-10 14:53



Ik begrijp het voordeel van dit gedrag. Ik stel deze vraag als onderdeel van mijn onderzoeksinteresse. In praktische World, soms verwijderen grote bestanden en dan later verrast om te zien dat schijfruimte niet wordt vrijgegeven. En ontdek uiteindelijk dat een daemon nog steeds naar het bestand schrijft. - Shaakunthala
heb je mijn antwoord goed gelezen? - nux
Sorry, ik heb het laatste deel gemist. Maar toch, voorkomt zowel hardlinks als toestemmingen dat het bestand wordt verwijderd, zelfs als de gebruiker het zou moeten verwijderen. Ik vroeg me af of er een regelgebaseerd besturingselement is dat kijkt naar het gebruik van het bestand dat wordt aangegeven onder /proc/<pid>/fd/. - Shaakunthala