Có cách nào để sử dụng checkinstall mà không cần mount / var / tmp như exec không?


1

Tôi đang biên dịch nginx từ nguồn và muốn sử dụng checkinstall để có thể gỡ cài đặt dễ dàng hơn sau này. Vấn đề là checkinstall thực thi các tập lệnh trong / var / tmp mà tôi đã gắn với noexec để ngăn chặn sự leo thang đặc quyền.

tôi đã tìm thấy trang này trong đó khuyến nghị liên kết tạm thời / var / tmp đến một nơi khác để cho phép thực thi tập lệnh trong / var / tmp. Nhưng điều đó không gây ra vấn đề với việc chạy các quy trình sử dụng / var / tmp tại thời điểm đó và khiến tôi dễ bị tổn thương?

Điều này đưa tôi đến câu hỏi là có cách nào để sử dụng checkinstall mà không cần mount / var / tmp như exec không? Có thể sử dụng chroot hoặc unshare?

Câu trả lời:


0

Giải thích

Người ta có thể sử dụng lệnh unshare để tạo một không gian tên dành riêng cho tập lệnh:

unshare --mount /path/to/script # Execute command in dedicated mount namespace

Các tập lệnh sử dụng không gian tên gắn kết riêng của nó. Nó có thể trông như thế này:

mount --make-rslave /            # Prevent this mount namespace
                                 # from changing the real namespace
mount --bind /foo/tmptmp foo/tmp # Do the bind
touch /foo/tmp/tmpFile           # Create tmp files
echo $( ls /foo/tmptmp )
echo $( ls /foo/tmp )
#output:
#tmpFile
#tmpFile

Sau khi tập lệnh được thực thi bằng cách sử dụng unshare, hãy xem những gì xảy ra với hệ thống chính.

ls /foo/tmptmp
#output: tmpFile
ls /foo/tmp
#output: 
#(Note that the file is only present in /foo/tmptmp)
umount /foo/tmptmp
#output: umount: /foo/tmptmp: not mounted
#(Note that the bind did only affect the mount namespace of the script)

Dung dịch

Áp dụng điều này cho vấn đề của câu hỏi mang lại tập lệnh sau cần được gọi thông qua unshare --mount:

mount --make-rslave /
mount --bind /your/tmp/file /var/tmp
checkinstall
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.