Какие каталоги доступны для записи по умолчанию?


14

В стандартной файловой системе Linux, какие из этих общих каталогов доступны для записи по умолчанию ?

 /tmp 
 /etc
 /var 
 /proc 
 /bin 
 /boot
 /....
 ....

Почему они написаны для всего мира? Это создает угрозу безопасности?

Ответы:


16

Единственные директивы, утвержденные FHS , которые обычно доступны для записи в мире, это /tmpи /var/tmp. В обоих случаях это потому, что они предназначены для хранения временных файлов, которые могут быть созданы кем-либо.

Также /dev/shm, как и tmpfs (файловая система, поддерживаемая ОЗУ), часто используется для быстрого доступа к данным среднего размера, совместно используемым процессами, или просто для создания файлов, которые гарантированно будут уничтожены при перезагрузке.

Также могут быть /var/mailили /var/spool/mail, а иногда и другие каталоги спулера. Они используются для временного хранения почты до ее обработки. Они не всегда доступны для записи в мире, в зависимости от используемых инструментов. Когда они есть, это потому, что файлы могут быть созданы там пользовательскими инструментами для обработки демонами.

Все эти каталоги обычно имеют набор sticky bit ( t), что означает, что только владелец файла или каталога может перемещать или удалять файлы в нем.

Любая программа, работающая от имени любого пользователя, может создавать файлы в этих каталогах, и сама программа-создатель должна делать правильные действия в том, что касается безопасности ее конкретных данных. Нет особой общей проблемы с безопасностью, кроме того, что кто-то потенциально заполняет файловую систему, но есть много возможностей для программы, чтобы она ошиблась.

Там были некоторые шаги в сторону конкретных /tmpкаталогов. Это позволяет избежать некоторых потенциальных ошибок, которые могут возникнуть, поэтому для программы не так важно быть без ошибок в том, как она использует каталог.


Вы можете найти в вашей системе доступные для записи каталоги с помощью:

find / -maxdepth 3 -type d -perm -777

8

/tmp, /var/tmpИ /var/lockвсемирно-записываемые по умолчанию. Могут быть символические ссылки, такие как /usr/tmp/var/tmp, для совместимости со старыми приложениями.

/tmpи /var/tmpдоступны для записи, потому что они предназначены для использования любым пользователем для любого временного хранилища. /var/lockдоступен для записи во всем мире, поэтому любой процесс, работающий от имени любого пользователя, может создавать файлы блокировки в центральном месте.

Есть ли риск безопасности? Нет, но вроде как да.

Разрешения для всех этих каталогов есть 1777, с ведущим, 1являющимся липким битом . Это означает, что, хотя любой пользователь может создать файл в этих каталогах, доступных для записи, только владелец может удалить свои собственные файлы (и, конечно же, пользователь root тоже).

Возможная угроза безопасности может возникнуть из-за небезопасного создания временного файла. Поскольку эти каталоги являются бесплатными для всех, пользователям необходимо принять меры предосторожности, чтобы убедиться, что создаваемые ими файлы действительно являются новыми файлами, вместо того, чтобы открывать существующий файл или символическую ссылку, которые могли быть установлены злонамеренным пользователем. Если файлы создаются с использованием надлежащих методов, таких как open(…, O_EXCL)или mkstemp(3), то такого риска можно избежать.


1
В современных системах одна из этих символических ссылок совместимости: /var/lock/run/lock
camh

2

/tmp

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

Недавний пример дал Стив Кемп. http://blog.steve.org.uk/sometimes_reading_code_makes_you_scream_.html

./mgmt/tools/SysAPI.cc:  tmp = fopen("/tmp/shadow", "w");
./mgmt/tools/SysAPI.cc:    system("/bin/mv -f /tmp/shadow /etc/shadow");

Если вы (атакующий) замените / tmp / shadow перед второй строкой, вы сможете заменить пароль каждого пользователя. (Я предполагаю, что атака требует, чтобы вы создали файл перед первой строкой и сделали файл доступным для записи).

Systemd в linux позволяет смягчить такие уязвимости, изолируя / tmp для многих системных служб. (За исключением тех, которые "неправильно используют / tmp как место для сокетов IPC и других примитивов связи").

В Fedora Linux - http://fedoraproject.org/wiki/Features/ServicesPrivateTmp

Системное объяснение - http://0pointer.de/blog/projects/security.html


«Думаю, атака требует, чтобы вы создали файл до первой строки», - действительно. Если файл еще не существует, первая строка создаст его как работающего пользователя (предположительно root), а другой злонамеренный пользователь не будет иметь прав на его замену до второй строки. Если файл уже существует, fopenон перезаписывает его, но не сбрасывает разрешения, поэтому злоумышленник все еще может вносить изменения. Кроме того, злонамеренный пользователь мог сделать что-то вроде ln -s /bin/bash /tmp/shadowпервой строки, чтобы существенный системный двоичный файл был перезаписан.
'18

2

Чтобы найти всемирно доступные для записи каталоги, вы можете использовать

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Для файлов измените тип на f

Для символических ссылок введите l

Чтобы установить липкий бит:

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print0| xargs -0 chmod +t
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.