Hạn chế truy cập tệp để chỉ nối thêm


11

Tôi có một thư mục chứa các tệp nhật ký và tôi đang đặt nhật ký từ tập lệnh do người dùng khởi chạy vào chúng. Đăng nhập bằng syslog dường như không thể trong trường hợp này. (rsync không phải daemon)

Tôi muốn người dùng chỉ có quyền ghi trên các tệp nhật ký. Vấn đề là, quyền ghi đó phải được hạn chế hơn nữa, để người dùng (tập lệnh) chỉ có thể nối thêm vào các tệp đó. Hệ thống tập tin cơ bản là XFS.

Sau đây không hoạt động:

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

Có giải pháp nào khác cho việc này không? Cảm ơn bạn đã gợi ý của bạn.


Bạn có chắc là XFS không? chattr +alàm việc cho tôi ở đây (3.2 kernel). Lưu ý rằng bạn cần phải root để sử dụng chattr(một $lời nhắc gợi ý không phải siêu người dùng), mặc dù bạn sẽ nhận được một thông báo lỗi khác nếu chattr +ađược hỗ trợ và bạn không root.
Stéphane Chazelas


Các tùy chọn gắn kết trên phân vùng là gì? Nó có thể lưu trữ nó bằng xattr, có thể cần tùy chọn gắn kết có liên quan? (Việc chia sẻ cho XFS cũng không đề cập nhiều về điều đó ...)
Gert van den Berg

Điều này đã đóng trên SF, vì vậy tôi sẽ để nó mở ở đây
Michael Mrozek

Câu trả lời:


8

Các chattrtiện ích được viết cho ext2 / ext3 / ext4 hệ thống tập tin. Nó phát ra ioctls trên các tệp, do đó, tùy thuộc vào hệ thống tệp cơ bản để quyết định phải làm gì với chúng. Trình điều khiển XFS trong các nhân Linux mới hơn hỗ trợ FS_IOC_SETFLAGSioctl tương tự như ext [234] để kiểm soát các cờ như chỉ chắp thêm, nhưng bạn có thể đang chạy kernel cũ hơn ở nơi không có (CentOS?). Hãy thử sử dụng xfs_iotiện ích thay thế:

echo chattr +a | xfs_io test.log

Lưu ý rằng, đối với XFS như cho ext [234], chỉ root mới có thể thay đổi cờ chỉ chắp thêm (chính xác hơn là bạn cần CAP_LINUX_IMMUTABLEkhả năng này).


1

Bạn có quyền để làm điều đó? Từ man 1 chattr:

Một tập tin với tập thuộc tính `a 'chỉ có thể được mở trong chế độ chắp thêm để ghi. Chỉ có siêu người dùng hoặc một quá trình sở hữu khả năng CAP_LINUX_IMMUTABLE mới có thể đặt hoặc xóa thuộc tính này.


0

Ngoài ra, bạn có thể đạt được điều tương tự bằng cách sử dụng SELinux , rất có thể nó được bật và chạy nếu bạn đang sử dụng bản phân phối tương thích Red Hat. Điều này hoạt động trên mọi hệ thống tập tin, SELinux ngăn chặn các quá trình thực hiện các hoạt động không được phép.

Thật không may, bạn cần phải viết một chính sách cho ứng dụng của mình để cho phép truy cập tất cả các tài nguyên hệ thống, ngoại trừ việc thêm vào (các) tệp cụ thể. Điều này có thể là một thách thức một chút nếu bạn làm điều này trong thời gian đầu, nhưng có một lợi thế cho lớp bảo mật được thêm vào này.

Tôi có một ví dụ về cách viết quy tắc tệp chỉ chắp thêm trong bài nói chuyện này: https://www.youtube.com/watch?v=zQcYXJkwTns

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.