Mit fedora 21 kann ein Benutzer eine Datei überschreiben, auf die er keinen Zugriff hat

410
Emmanuel Touzery

Ich habe dieses Problem auf zwei Fedora 21-Maschinen reproduziert.

Ich möchte das sqlite3die ~/.sqlite_historydatei nicht schreibt . Ich konnte keine Option finden, sagte aber, egal, ich mache es so, dass es nicht schreiben kann.

Es kann jedoch immer noch schreiben und ich verstehe es nicht.

~$ which sqlite3 /usr/bin/sqlite3 ~$ ls -l /usr/bin/sqlite3 -rwxr-xr-x. 1 root root 69456 Nov 25 12:00 /usr/bin/sqlite3 ~$ ls -l .sqlite_history ls: cannot access .sqlite_history: No such file or directory ~$ touch .sqlite_history ~$ sudo chown root .sqlite_history [sudo] password for emmanuel: ~$ sudo chmod 600 .sqlite_history ~$ sudo chgrp root .sqlite_history ~$ ls -l .sqlite_history -rw------- 1 root root 0 Jan 7 08:45 .sqlite_history ~$ whoami emmanuel ~$ groups emmanuel wheel ~$ echo test > .sqlite_history  bash: .sqlite_history: Permission denied ~$ sqlite3 test.db SQLite version 3.8.7.2 2014-11-18 20:57:56 Enter ".help" for usage hints. sqlite> select * from server; Error: no such table: server sqlite> ~$ cat .sqlite_history select * from server; ~$ ls -l .sqlite_history -rw------- 1 emmanuel emmanuel 22 Jan 7 08:45 .sqlite_history $ mount | grep home /dev/sda7 on /home type ext4 (rw,relatime,data=ordered) 

Ich habe auch einen symbolischen Link ausprobiert /dev/nullund auch in diesem Fall sqlite3 einfach die Datei überschrieben? Was ist los? Wie kommt es, dass sqlite diese Datei überschreibt?

Ich habe das lson auf dem sqlite3Binary gemacht, um zu überprüfen, ob es tatsächlich nicht suid root ist und nicht. Ich verstehe es nicht

0

2 Antworten auf die Frage

2
TomH

Es kann nicht in diese Datei schreiben, aber unter der Voraussetzung, dass es in das Verzeichnis schreiben kann, kann es einfach die Datei löschen und eine neue erstellen.

Sie müssen nicht in der Lage sein, in eine Datei zu schreiben, um sie unter dem Linux-Privilegienmodell zu löschen, da das Löschen einer Datei sie nicht ändert, sondern das Verzeichnis, in dem sich die Datei befindet. Es ist also das Verzeichnis, in das Sie schreiben müssen, um eine Datei zu löschen.

wow, vielen dank! Ich habe das niemals gewusst. Irgendein Hinweis, wie könnte ich umgehen und verhindern, dass sqlite3 diese Protokolldatei erstellt, wie ich es mir erhofft hatte? Emmanuel Touzery vor 9 Jahren 0
Eine Problemumgehung wäre, Ihr Home-Verzeichnis so zu schützen, dass Sie nicht schreiben können, indem Sie chmod uw "$ HOME" `verwenden. (Dies ändert den Schutz von 700 auf 500 oder von 711 auf 511 oder von 755 auf 555 ....) Theoretisch könnte sqlite3 dies durch chmoding des Verzeichnisses überwinden, ist aber wahrscheinlich nicht dafür programmiert . Dies verhindert natürlich auch, dass _you_ in Ihr Home-Verzeichnis schreibt. G-Man vor 9 Jahren 0
1
Jacob Margason

Versuchen Sie es mit "sudo chattr + i /.sqlite_history". Dadurch wird verhindert, dass irgendetwas (auch root) die Zieldatei ändert. Das i steht für "unveränderlich" und wird regelmäßig verwendet, um zu verhindern, dass DHCP /etc/resolv.conf überschreibt

Dies sollte den Trick für Sie tun. Für weitere Informationen: "man chattr". Es ist ein Werkzeug, mit dem Sie alle möglichen wunderbaren Dateiattribute einstellen können!

Viel Glück

wow, toller Vorschlag, es funktioniert super! Danke vielmals! Ich lasse TomH die Antwort, während er die ursprüngliche Frage beantwortete. Ich wünschte, ich könnte dich +10 :-) Emmanuel Touzery vor 9 Jahren 0