Ограничить доступ к файлу только для добавления

11

У меня есть каталог с файлами журналов, и я помещаю в них логи из скриптов, запускаемых пользователями. Ведение журнала с помощью syslog не представляется возможным в этом случае. (не-демон rsync)

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

Следующее не работает:

# chattr +a test.log
chattr: Inappropriate ioctl for device while reading flags on test.log

Есть ли другое решение для этого? Спасибо за ваши советы.

металлист
источник
Вы уверены, что это XFS? chattr +aу меня тут работает (ядро 3.2). Обратите внимание, что для использования вам нужно быть пользователем root chattr$подсказке предлагается не суперпользователь), хотя вы получите другое сообщение об ошибке, если оно chattr +aподдерживается и вы не являетесь пользователем root.
Стефан Шазелас
Также опубликовано на Serverfault . Не делай этого.
Жиль "ТАК - перестань быть злым"
Какие параметры монтирования на разделе? Возможно, он будет храниться с использованием xattr, для чего может потребоваться соответствующий параметр монтирования? (Сообщество для XFS также не упоминает много об этом ...)
Герт ван ден Берг
Это закрыто на SF, поэтому я оставляю это открытым здесь
Майкл Мрозек

Ответы:

8

chattrУтилита написана для Ext2 / Ext3 / ext4 , файловых систем. Он испускает ioctl для файлов, так что именно файловая система сама решает, что с ними делать. Драйвер XFS в более новых ядрах Linux поддерживает тот же FS_IOC_SETFLAGSioctl, что и ext [234], для управления флагами, такими как только добавление, но вы можете использовать старое ядро ​​там, где его нет (CentOS?). Попробуйте использовать xfs_ioутилиту вместо:

echo chattr +a | xfs_io test.log

Обратите внимание, что для XFS, как для ext [234], только root может изменять флаг добавления только (точнее, вам нужна CAP_LINUX_IMMUTABLEвозможность).

Жиль "ТАК - прекрати быть злым"
источник
1

У вас есть разрешение на это? От man 1 chattr:

Файл с установленным атрибутом `a 'может быть открыт только для записи в режиме добавления. Только суперпользователь или процесс, обладающий возможностью CAP_LINUX_IMMUTABLE, может установить или очистить этот атрибут.

peterph
источник
0

Кроме того, вы можете добиться того же, используя SELinux , скорее всего, он включен и работает, если вы используете Red Hat-совместимый дистрибутив. Это работает на каждой файловой системе, SELinux блокирует процессы от выполнения запрещенных операций.

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

У меня есть пример того, как написать правило файла только для добавления в этом выступлении: https://www.youtube.com/watch?v=zQcYXJkwTns

lzap
источник