fedora 21 позволяет пользователю перезаписать файл, к которому у него нет доступа

324
Emmanuel Touzery

Я воспроизвел эту проблему на двух машинах fedora 21.

Я бы хотел, чтобы файл sqlite3не записывался ~/.sqlite_history. Я не мог найти вариант, но сказал, что я сделаю так, что он не может написать.

Однако, это все еще может написать, и я не понимаю.

~$ 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) 

Я также пробовал символическую ссылку на, /dev/nullи в этом случае sqlite3 просто перезаписывает файл ?? Что здесь происходит? Почему sqlite удается перезаписать этот файл?

Я сделал lsна sqlite3двоичный файл, чтобы проверить, что это действительно не suid root, и это не так. Я не понимаю

0

2 ответа на вопрос

2
TomH

It can't write to that file, but assuming it can write to the directory it can just delete the file and create a new one.

You don't need to be able to write to a file in order to delete it under the linux privilege model because deleting a file doesn't change it in any way - it changes the directory that contains the file. So it is the directory you need to be able to write to in order to delete a file.

вау, спасибо большое! Я никогда не знал этого. Может быть, есть какой-нибудь намек, как мне обойтись и помешать sqlite3 создать файл истории, как я и надеялся? Emmanuel Touzery 9 лет назад 0
Обходным путем будет защита вашего домашнего каталога, чтобы вы не могли писать в него, с помощью `chmod uw" $ HOME "`. (Это изменит защиту от 700 до 500, или с 711 до 511, или с 755 до 555, ....) Теоретически sqlite3 может преодолеть это, выполнив chmoding каталог назад, но, вероятно, он не запрограммирован на это. , Конечно, это также предотвратит запись _you_ в ваш домашний каталог. G-Man 9 лет назад 0
1
Jacob Margason

Try using "sudo chattr +i /.sqlite_history" This will prevent anything (even root) from modifying the target file. The i stands for "immutable" and is used regularly to keep DHCP from overwriting /etc/resolv.conf

This should do the trick for you. For more information: "man chattr". It's a tool that lets you set all sorts of wonderful file attributes!

Good Luck

вау, отличное предложение, отлично работает! Большое спасибо! Я оставлю ответ ТомХу, хотя он ответил на оригинальный вопрос. Хотел бы я +10 тебе хотя бы :-) Emmanuel Touzery 9 лет назад 0

Похожие вопросы