Назад | Перейти на главную страницу

Разрешения только на чтение для некоторых журналов Linux

Я хотел бы ограничить определенного пользователя (назовем его регистратором), чтобы он мог читать только некоторые (не все) файлы журнала (веб, php framework, radius и т. Д.). Я не уверен, как это сделать "лучшим" способом .

Пока у меня есть chrooted sftp-аккаунт для моего пользователя, и я привязываю mount к его домашнему каталогу (/ home / logger) к необходимым папкам журналов, например:

/ var / log / nginx / home / logger / logs / nginx нет _netdev, привязка, значения по умолчанию 0 0

и вот разрешения lgos dir:

dr-xr - r-- 5 логгер логгер 4096 марс 12 10:09 логи

Однако мне пришлось добавить этого пользователя в определенные группы (www-data, freerad).

регистратор: регистратор www-data freerad sftp

Я не думаю, что это правильный способ сделать это. Более того, пользователь может удалить некоторые файлы (группа www-data имеет права доступа r + w для журналов из приложения Symfony).

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

Не могли бы вы дать мне несколько советов, как бы вы сделали это?

Заранее спасибо.

РЕДАКТИРОВАТЬ: после ответа Арриба я попытался использовать ACL, например:

getfacl radius / radius.log

# file: radius/radius.log
# owner: freerad
# group: freerad
user::r--
group::r--
group:logger:r--
mask::r--
other::---

Пользователь регистратора находится внутри группы регистратора:

регистратор групп

регистратор: регистратор sftp

Я создал радиус-каталог (в / home / logger):

drwxr-xr-x 2 root root 4096 mars 16 14:29 радиус

Затем я использовал символическую ссылку:

lrwxrwxrwx 1 root root 30 mars 16 14:29 radius / radius.log -> /var/log/freeradius/radius.log

Теперь я пытаюсь войти через SFTP с регистратором в его chrooted homedir:

Я могу видеть имена файлов, папок и папок, однако, если я пытаюсь получить файл, у меня появляется ошибка «файл не найден» при попытке получить этот файл radius / radius.log

Я действительно чувствую себя глупо с этой проблемой. : /

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

ls -l

в папке журналов и проверьте, к какой группе принадлежит каждый файл.

В вашем сценарии наиболее правильный способ добиться того, о чем вы просите, - это установить списки ACL, которые являются самым сильным инструментом unix для работы.

Посмотри на «ACL: использование списков контроля доступа в Linux», это большой пост в блоге, но он описывает все шаги идеально и достаточно просто, чтобы почувствовать себя.

Если вам нужно более быстрое и грязное решение (которое я НЕ рекомендую, если вы не находитесь в производственной среде), вы можете просто вывести своего пользователя из каждой группы, а затем установить разрешение «Другие» на r -, (или xx4 для восьмеричного представления chmod).

РЕДАКТИРОВАТЬ: Я проигнорировал тот факт, что вы пытаетесь сделать это в среде chrooted. В этом случае символические ссылки не будут работать с ftp (или sftp в этом отношении) из-за природы самих символических ссылок. Хорошее объяснение лежит Вот, хотя мне кажется, что я обычно ссылаюсь только на большие статьи.

Тем не менее, вы можете добиться того же поведения, используя mount --bind, что сделает каталог журнала доступным внутри домашнего каталога пользователя регистратора:

mount --bind /var/log /home/logger/logs/

И это даст вам logs каталог, содержащий все, что находится внутри /var/log. С этого момента вы можете разрешить logger групповой доступ для чтения только к определенным журналам, которые вы хотите, и ничего больше, так что он не сможет читать, например. /var/log/auth.log и т.д. Не забудьте добавить доступ к соответствующим родительским папкам, потому что в противном случае ваш пользователь сможет получить доступ к журналам, только введя полный путь, что иногда может расстраивать.