Intereting Posts
Запись веб-камеры с использованием ffmpeg Запуск удаленной команды с ssh с получением «bash: / dev / fd / 63: Нет такого файла или каталога» Как включить и подключиться к GUI / Desktop на удаленном сервере RHEL 6 из Windows? Как ограничить helo для соответствия ip / domain клиента Философия Unix была оставлена ​​в дизайне веб-приложений? Создание точных немасштабированных буклетов с pdfbook автоматически Неожиданное завершение работы Arch Linux Как добавить строку к нескольким файлам в древовидной структуре каталога? Как подождать подпроцесс, используемый для перенаправления ввода-вывода? Как НЕ загружать драйверы Solaris SPARC при загрузке как я могу подавить unedsary вывод seds при использовании опции -e? Как получить строки, чей n-й столбец содержит m-й столбец Безопасно ли изменять размер раздела на /? Как можно запретить печать полного пути к подкаталогам при использовании CDPATH = «.: / Some / path»? Как разрешить предупреждение о небезопасности в Swapon?

SELinux: Можно ли отключить копирование определенных файлов?

Пожалуйста, извините меня, если это слишком основательно, и у вас возникает желание бросить RTFM. Я хочу, чтобы пользователи не копировали определенные файлы, предоставляя им доступ для чтения к тем же файлам. Я думал, что это невозможно, пока я не наткнулся на этот пример в SELinux Wiki:

allow firefox_t user_home_t : file { read write }; 

Поэтому я думал: возможно ли предоставить файлы, о которых идет речь, например, режим 0700 и использовать SELinux для предоставления доступа для чтения только к приложению, которое пользователи обычно будут использовать для чтения файлов?

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

Итак, в основном, мой вопрос в том, есть ли способ сделать это в SELinux или я трачу свое время на такую ​​альтернативу?

PS Я знаю, что предоставление доступа для чтения может позволить пользователям, которые действительно намерены копировать файлы для копирования и вставки их из приложения, которое они будут читать; Я просто ищу первую линию обороны.


РЕДАКТИРОВАТЬ

Чтобы лучше объяснить мой случай использования:

  • Эти файлы представляют собой смесь текста и двоичных файлов.
  • Они должны быть прочитаны проприетарным коммерческим программным обеспечением: они являются имитационными моделями программного обеспечения для моделирования электроники.
  • Эти модели сами по себе являются собственностью, и мы не хотим, чтобы пользователи имитировали с ними утечку их для несанкционированного использования.
  • Программное обеспечение должно только читать модели и запускать несколько скриптов из этих файлов; он не будет записывать их содержимое в любом месте.
  • Короче говоря, я хочу, чтобы только программное обеспечение для моделирования имело возможность читать и выполнять доступ к этим файлам, одновременно предотвращая доступ для чтения для пользователей.

Я думаю, что важно отметить, что cat не проблема в моем комментарии выше, но перенаправление оболочки. Вы пытаетесь ограничить копирование двоичных файлов или текстовых файлов? Если это двоичные файлы, то я считаю, что вы можете что-то работать с rbash (см. http://blog.bodhizazen.net/linux/how-to-restrict-access-with-rbash/).

Однако, если это текстовые файлы, я не уверен, как вы можете помешать кому-то просто копировать их локальный терминал.

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

Я думаю, что более подробная информация о точных разрешениях, требуемых вашим прецедентом, может быть полезна, извините за неопределенный ответ.


ОБНОВЛЕНИЕ – БОЛЕЕ СПЕЦИФИЧЕСКИЙ ОТВЕТ

Я думаю, что вы можете добиться того, чего хотите, без SELinux, так как это то, как многие вещи обрабатываются (например, обычные пользователи меняют свой пароль в / etc / shadow с помощью команды passwd ):

  • Создайте отдельный пользователь и / или группу для своего коммерческого программного обеспечения (возможно, уже сделано)
  • Дайте файлу доступ только для чтения указанным пользователем и / или группой
  • Убедитесь, что обычные пользователи не имеют доступа к этим файлам
  • Сделайте свой исполняемый setuid или getgid (в зависимости от того, используете ли вы группу или пользователя), например, chmod g+s или chmod u+s
  • Когда пользователи запускают приложение, они теперь будут иметь те же права, что и пользователь или группа приложений, что позволяет читать доступ к этим конкретным файлам в нужном приложении.

UPDATE2 – МНОЖЕСТВЕННЫЕ ПОЛЬЗОВАТЕЛИ И ГРУППЫ Если у вас есть несколько приложений и групп, вы, скорее всего, сможете получить функциональность, которую ищете с помощью sudo . Многие люди знают о его способности разрешать вам запускать команды с корнем, но полезность выходит далеко за рамки этого примера. Я не уверен, что это идеальная настройка, но это один из способов сделать то, что вы пытаетесь.

Вы все равно можете сделать все файлы приложений, принадлежащие приложению, но затем вы можете создавать отдельные группы для каждого набора файлов. Это то, что может выглядеть ваш файл /etc/sudoers или файл в файле /etc/sudoers.d/ :

 User_Alias FILEGROUP1 = user1, user2 User_Alias FILEGROUP2 = user3, user4 Cmnd_Alias MYEDITOR = /usr/local/bin/myeditor, /usr/local/bin/mycompiler FILEGROUP1 ALL=(:fileset1) NOPASSWD: MYEDITOR FILEGROUP2 ALL=(:fileset2) NOPASSWD: MYEDITOR 

Если пользователю1 и user2 нужен доступ к файлам, принадлежащим группе fileset1 а user3 и user4 нужен доступ к файлам, принадлежащим fileset2 группы. Вы также можете использовать группы вместо пользователей.

Пользователи могли получить доступ к своим файлам через редактор, выполнив sudo -g fileset1 /usr/local/bin/myeditor или что-то подобное.

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

Подробнее:

http://www.garron.me/linux/visudo-command-sudoers-file-sudo-default-editor.html

https://serverfault.com/questions/166254/change-primary-group-with-sudo-ug

http://linux.die.net/man/8/sudo

Вы можете достичь этого только краба. Проблема в том, что не существует «syscall» (copy) (copy). Копирование файлов выполняется путем чтения источника и записи / создания цели.

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

Но вы можете использовать двухуровневое решение:

  1. Запретить Firefox писать обращения в определенном каталоге (дереве); это может стать злым, учитывая / tmp. Таким образом, вам, возможно, придется запускать Firefox с $ TMP, указывающим куда-нибудь в своем каталоге конфигурации.
  2. Предотвратите доступ ко всем другим приложениям (которые пользователь может получить) от чтения этого каталога. (С точки зрения AppArmor). Это сводится к запрету доступа к этим каталогам (для всех пользователей) и доступа к Firefox.

Более общий, но косвенный подход: проверьте, какие файлы созданы и сопоставьте их с запрещенными. Это довольно просто, если приложение одновременно открывает оба файла, но это может быть опасным предположением. Конечно, бежать все через strace не делает систему быстрее, конечно. И я не знаю, как FAM / fileschanged масштабируется по всей файловой системе. Эта проблема масштабирования (если она существует) может быть «решена» путем ограничения всех приложений (за исключением файлового менеджера) на запись доступа в один каталог (и их конфигурационный каталог, конечно), так что только этот каталог (и / tmp) должен быть проверен FAM. Вы можете регистрировать доступ на чтение ко всем защищенным файлам для каждого процесса, чтобы ускорить эти проверки. FAM не может этого сделать, но аудит AppArmor может (поэтому я думаю, что SELinux тоже может это сделать).

Очень хорошим решением будет модуль FUSE для записываемого каталога (чтобы избежать условий гонки) для проверки.