gul_tech: (gul)
[personal profile] gul_tech
Если вам в shell command line нужно создать файл, к которому никто, кроме вас, не должен иметь доступ на чтение, как вы это делаете?
Я обычно делал так:
touch filename
chmod 600 filename
после чего писал туда всё, что мне было нужно.

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

А как это делаете вы?
Я сейчас знаю несколько правильных способов.

Первый способ, самый очевидный и, наверное, самый правильный:
umask 077
после чего можно создавать и редактировать файл безопасно.

Второй способ подольше, но тоже вполне чистый:
touch filename.tmp
chmod 600 filename.tmp
cp -p filename.tmp filename
rm filename.tmp

Можно применить более полноценный интерпретируемый язык, чем /bin/sh:
perl -MFcntl -e 'sysopen($fh, shift, O_RDWR|O_CREAT|O_EXCL, 0600) or die $!' filename

Как ещё?

И, кстати, тут опять были бы полезны функции открытия временного файла (inode без имени) и придания имени безымянному открытому inode (что-то вроде "flink(int fd, const char *name)"). Я по-прежнему удивляюсь, почему их нет. Сишная функция tmpfile(), как и перловый "open($fh, '>+', undef)" сначала создаёт/открывает временный файл с именем, а потом удаляет его, без всякой атомарности.

Date: 2014-12-13 02:10 pm (UTC)
From: [identity profile] gul-kiev.livejournal.com
О том и речь, что такой способ даёт возможность злоумышленнику прочитать содержимое файла.

Date: 2014-12-13 02:21 pm (UTC)
From: [identity profile] click0.livejournal.com
Какой именно?
Все зависит от типа файловой системы и группы легитимного пользователя и злоумышленника.
Потом еще можно присоединиться к процессу, созданного легитимным пользователем :)

ACL и security - очень больная тема для многих OS.

Date: 2014-12-13 02:56 pm (UTC)
From: [identity profile] gul-kiev.livejournal.com
Если пользователю хватило прав открыть файл на чтение после touch (до chmod), то он сможет прочитать всё то, что будет в этот файл записано уже после chmod.

Date: 2014-12-13 05:15 pm (UTC)
From: [identity profile] click0.livejournal.com
Тогда выставите права предварительно у текущей директории, а потом уже touch :)

Date: 2014-12-13 08:04 pm (UTC)
From: [identity profile] gul-kiev.livejournal.com
Да, это один из способов, но, кажется, не самый лучший, т.к. иногда доступ к директории должен быть открыт. Кроме того (наверное, вы знаете), запрет на чтение директории не запрещает читать файлы внутри этой директории.

Date: 2014-12-13 09:15 pm (UTC)
From: [identity profile] click0.livejournal.com
Да, но теперь тут требуется знать имя файла.

Profile

gul_tech: (Default)
gul_tech

December 2020

S M T W T F S
  12345
6789101112
13141516171819
202122 23242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 16th, 2026 10:48 am
Powered by Dreamwidth Studios