Я воспроизвел эту проблему на двух машинах 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 и это не так. Я не понимаю

2 ответа2

2

Он не может записать в этот файл, но при условии, что он может записать в каталог, он может просто удалить файл и создать новый.

Вам не нужно иметь возможность записи в файл, чтобы удалить его в соответствии с моделью привилегий linux, поскольку удаление файла никак не меняет его - оно меняет каталог, в котором находится файл. Так что это каталог, в который вы должны быть в состоянии записать, чтобы удалить файл.

1

Попробуйте использовать «sudo chattr +i /.sqlite_history». Это предотвратит изменение целевым файлом чего-либо (даже root). "I" означает "неизменяемый" и регулярно используется для предотвращения перезаписи DHCP /etc/resolv.conf.

Это должно помочь вам. Для получения дополнительной информации: "man chattr". Это инструмент, который позволяет вам устанавливать всевозможные замечательные атрибуты файлов!

Удачи

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .