Ich habe eine ReadyNAS-Box mit dem Namen "Speicher", von der ich glaube, dass sie auf Debian basiert. Ich kann als root hinein ssh. Ich versuche, den Webserver neu zu konfigurieren, stoße jedoch auf ein Dateiberechtigungsproblem, das ich einfach nicht verstehe. Ich kann /etc/frontview/apache/apache.pem
auch mit root nichts anfangen! Es scheint keine besonderen Berechtigungen im Vergleich zu anderen Dateien im selben Verzeichnis zu haben, und ich kann damit arbeiten.
storage:~# whoami
root
storage:~# cd /etc/frontview/apache/
storage:/etc/frontview/apache# ls -lah apache.pem*
-rw------- 1 admin admin 4.0k Jul 10 2013 apache.pem
-rw------- 1 admin admin 4.0k Jun 9 05:57 apache.pem.2017-02-04
-rw------- 1 admin admin 1.5k Jun 9 05:57 apache.pem.orig
storage:/etc/frontview/apache# touch apache.pem
touch: creating `apache.pem': Permission denied
storage:/etc/frontview/apache# touch apache.pem.2017-02-04
storage:/etc/frontview/apache# rm -f apache.pem
rm: cannot unlink `apache.pem': Operation not permitted
Was ist das Besondere an dieser Datei, dass sie nicht berührt werden kann? Ich kann es nicht löschen. Ich kann die Berechtigungen dafür nicht ändern. Ich kann den Besitzer nicht ändern.
Das Verzeichnis scheint in Ordnung zu sein. Es hat noch Platz, es ist nicht schreibgeschützt. Tatsächlich kann ich andere Dateien im selben Verzeichnis bearbeiten.
# ls -ld /etc/frontview/apache
drwxr-xr-x 8 admin admin 4096 Jun 9 05:44 /etc/frontview/apache
# df /etc/frontview/apache
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hdc1 2015824 504944 1510880 26% /
quelle
ls -ld /etc/frontview/apache
unddf /etc/frontview/apache
. Möglicherweise befindet sich der Ordner auf einem bereitgestellten Speicherplatzro
?# mount
:/dev/hdc1 on / type ext3 (rw,noatime)
Antworten:
Ich habe gerade das Problem gefunden. Das Attribut "unveränderlich" wurde für diese Datei festgelegt.
ls
zeigt es nicht. Sie benötigen einen anderen Befehl, um ihn anzuzeigen:Sobald ich das unveränderliche Bit entfernt habe, kann ich diese Datei bearbeiten:
quelle
ls
keine Option zum Auflisten von Attributen hat. Ich vergesse, aber vielleicht ist sogar der Systemaufruf zum Abfragen nicht portierbar, sodass es wahrscheinlich einfacher war, sie nur in einem separaten Dienstprogramm zu implementieren.)ls
das Bit angezeigt würde oder wenn einer der anderen Befehle, die ich verwendet habe, hilfreichere (und spezifischere) Fehlermeldungen darüber enthält, warum die Berechtigungen verweigert wurden.touch
weiß ist, dass der Systemaufruf, mit dem versucht wurde (open("apache.pem", O_WRONLY|O_CREAT|..., 0666)
), fehlgeschlagen istEACCESS
. (Verwenden Siestrace -efile touch apache.pem
diese Option , um die dateibezogenen Systemaufrufe anzuzeigen.) Wie in der Manpage für diesen Systemaufruf angegeben , gibt es viele mögliche Gründe für EACCESS, und viele davon betreffen übergeordnete Verzeichnisse und nicht die Datei selbst. Das Schreiben von Code, um genau zu bestimmen, warum ein Systemaufruf den Fehler zurückgegeben hat, wäre extrem schwierig, da verschiedene Dateisysteme und Betriebssysteme unterschiedlich sind ...errno
) und drucken diese aus. (Verwenden der C-Standardbibliotheksfunktionperror
oder einer gleichwertigen Funktion). Dies ist einer der seltenen Fälle, in denen dies nicht immer als Hinweis für den Benutzer ausreicht, um das Problem schnell zu finden, aber meistens funktioniert es sehr gut. (Insbesondere in Kombination mit,strace
falls Zweifel darüber bestehen, welche Operation den Fehler verursacht hat.) Es ist nicht perfekt, aber es könnte viel schlimmer sein (vgl. MS Windows, wo Sie bestenfalls einen Fehlercode für Google erhalten.)chattr +i
und bemerkte, dassrm foo
(ohne-f
) Eingabeaufforderungen :rm: remove write-protected regular file ‘foo’
. Weilfaccessat(AT_FDCWD, "/var/tmp/foo", W_OK) = -1 EACCES (Permission denied)
. POSIX mussrm
standardmäßig aufgefordert werden, bevor schreibgeschützte Dateien entfernt werden. Aus diesem Grund wird es zuerst überprüft. Sie hätten also schneller einen großen Hinweis bekommen, wenn Sie nicht verwendet hättenrm -f
. : /access(3)
fordert den Kernel auf, die Berechtigungen so zu überprüfen, als ob er wirklich zum Schreiben geöffnet wäre, sodass ACLs und Attribute erfasst werden.