Как позволить пользователям передавать файлы другим пользователям на Linux

Я любил использовать выставление счета zoho.com, и я абсолютно ЛЮБЛЮ Урожай за отслеживание времени. Я не уверен приложения zoho, все говорят друг с другом, но это стоит исследовать.

9
задан 18 June 2012 в 18:47
5 ответов

Если эмиттер действительно хочет отдать файл, вы можете использовать двоичный код SUID, который перемещает файл в каталог, доступный для записи всем и имеющий липкий бит (например, / tmp ), затем переходит к новому владельцу. chown (3) уже позаботится об удалении битов set-user-ID и set-group-ID за вас. Таким образом, новый владелец может делать с файлом все, что он хочет, в том числе перемещать его.

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

Электронная почта поможет. Еще одним решением для Unixy было бы / etc / profile , в котором перечислены ваши недавно доставленные файлы. Дополнительный бонус, если вы предлагаете эту функцию с pam_echo ( например, с file = / tmp / delivery /% u , см. pam_echo (8) ]). Как и во всем, что связано с PAM, вам нужно сначала проверить, все ли ваши реализации предлагают такой модуль.

1
ответ дан 2 December 2019 в 22:38

Вы можете использовать систему с общим каталогом (возможно, без разрешения на выполнение), где вещи для данного пользователя архивируются с определенной структурой имени файла ( to- $ username_from - $ username.tar , например). Give создает файл и передает его целевому пользователю; take извлекает файл и удаляет его.

Если вы хотите сделать это как фактическое перемещение (IE, изменение местоположения файла и разрешений; без копирования из-за гигантского размера файла), вам может сойти с рук переход на общий каталог с -x perms (чтобы никто не мог перечислить там файлы) и тот же метод chown . mv , chown / mv .

0
ответ дан 2 December 2019 в 22:38

Как говорит xryl669, вы можете использовать каталог для фактического совместного использования файлов. Это должно выглядеть так:

$ ls -ld shared
drwxrws--- 2 root usergroup 4096 somedate shared
$ ls -l shared
drwx-wx--- 2 user1 usergroup 4096 somedate user1
drwx-wx--- 2 user2 usergroup 4096 somedate user2
drwx-wx--- 2 user3 usergroup 4096 somedate user3
drwx-wx--- 2 user4 usergroup 4096 somedate user4

Команда give становится

#!/bin/sh
#Use a random suffix to prevent guessing
RANDOM=$(dd if=/dev/urandom count=4 2> /dev/null | sha512sum | cut -d' ' -f1)
NEWNAME=/path/to/shared/$2/$1$RANDOM
#Move the file
mv $1 $NEWNAME
#Make it readable
chmod 440 $NEWNAME

Команда take выглядит примерно так:

$ cd /path/to/shared/user
$ ls
...
$ mv somefile ~
0
ответ дан 2 December 2019 в 22:38

Я бы посоветовал переписать приложение, чтобы оно действительно имитировало «отдавать» и «брать», а скорее «выталкивать» и «извлекать» его из защищенного каталога. Ваш каталог может быть доступен только для приложения push / pull, которое обрабатывает перемещение файлов. В качестве альтернативы ваше приложение / сценарий может создать случайный временный каталог с разрешениями, установленными только для отправителя и получателя.

Хотите повысить безопасность? Вы можете PGP зашифровать / подписать файл (используя открытый ключ получателя).

С точки зрения переделки его с «точки зрения безопасности и функциональности», я настоятельно рекомендую не создавать программы SUID. Если вы не откажетесь от привилегий должным образом, вы получите практически доступ к любому файлу в системе. Если ваша программа глючит (переполнение буфера и т. Д.)

0
ответ дан 2 December 2019 в 22:38

Это, вероятно, бесполезно для вас, но для справки cp --reflink source target делает тонкие копии файлов с помощью копирования при записи.

Это означает, что вы можно было скопировать файл напрямую, и на самом деле будут скопированы только измененные блоки. В отличие от жесткой ссылки, новый файл имеет собственный индексный дескриптор и метаданные, что означает, что вы можете затем предоставить копию файла новому пользователю, используя стандартные материалы chown.

Насколько мне известно, эта функция доступна только на OCFS2 и btrfs в настоящее время. Я предполагаю, что это решит вашу проблему, но, поскольку доступность этого не является широко распространенной, вероятно, бесполезно.

0
ответ дан 2 December 2019 в 22:38

Теги

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