Ich bin als Benutzer xyz bei meiner Remote-VM (der die ausgeht ESXi
) angemeldet. Ich wollte meine ändern, /etc/hosts
um einige Netzwerknamen hinzuzufügen, die standardmäßig nicht sichtbar waren.
Ich habe zuerst versucht zu rennen
sudo vi /etc/hosts
aber als ich reinkam vi
, wurde mir immer noch angezeigt, dass die Datei schreibgeschützt sei. Hier sind die Berechtigungen:
>ls -l /etc/hosts
-rw-r--r-- 1 root root 416 2013-06-19 08:08 /etc/hosts
Mir ist auch aufgefallen, dass fast jede andere Datei in ein von /etc
hat , nur hat . Beispiel:lsattr
-----------------e-
hosts
----i------------e-
>lsattr /etc
...
-----------------e- ./python
----i------------e- ./hosts
...
Dann habe ich es versucht chmod
und hier ist das Ergebnis:
>sudo chmod +w /etc/hosts
chmod: changing permissions of `/etc/hosts': Operation not permitted
Ich fand das komisch, weil root (zu dem ich wechsle, wenn ich sudo
) eigentlich alles machen können sollte. Meine sudoers
Datei sieht ganz normal aus:
1 # /etc/sudoers
2 #
3 # This file MUST be edited with the 'visudo' command as root.
4 #
5 # See the man page for details on how to write a sudoers file.
6 #
7
8 Defaults env_reset
9
10 # Host alias specification
11
12 # User alias specification
13
14 # Cmnd alias specification
15
16 # User privilege specification
17 root ALL=(ALL) ALL
18
19 # Allow members of group sudo to execute any command after they have
20 # provided their password
21 # (Note that later entries override this, so you might need to move
22 # it further down)
23 %sudo ALL=(ALL) ALL
24 #
25 #includedir /etc/sudoers.d
26
27 # Members of the admin group may gain root privileges
28 %admin ALL=(ALL) ALL
Ich suche nach einer Erklärung, warum dies passiert und wie man es umgehen kann.
Antwort1
Das Besondere an dieser Ausgabe ist i
, dassunveränderlichAttribut.
Die Datei wurde markiertunveränderlich.
Dies bedeutet, dass es von keinem Benutzer, auch nicht von Root, geändert werden kann. Root kann die Attribute weiterhin ändern und das unveränderliche Attribut entfernen, muss dies jedoch tun, bevor Änderungen an der Datei vorgenommen werden, im Gegensatz zu Standardberechtigungen für das Nichtschreiben einer Datei, die Root einfach ignorieren kann.
Diese Attribute sind, soweit ich weiß, nur auf ext[234]-Dateisysteme anwendbar.
Sie können die Manpage für chattr sehen,
$man chattr
um eine vollständige Liste und Beschreibung der verfügbaren Attribute anzuzeigen.
Das einzige, das ich jemals tatsächlich verwendet habe, ist i. Aber einige der anderen sind:
A: atime remains unmodified when accessed
a: can only be opened for writing in append-only mode
c: compressed automatically
j: all data is written to the journal before being written to the file
s: blocks are zeros when file is deleted
u: contents of file are saved when file is deleted for later undelete
Es gibt noch weitere Attribute, diese sind jedoch eher esoterisch und viele weitere Informationen dazu finden Sie auf der Manpage von chattr.
Antwort2
Ich habe die erweiterten Attribute geändert, um sie loszuwerden, i
und dann war alles in Ordnung:
>sudo chattr -i /etc/hosts
Ich hätte aber trotzdem gerne eine Erklärung, wie die lsattrs
Ausgabe gelesen wird, einschließlich des Attributs, das ich geändert habe.