Khả năng thiết lập trên tập lệnh sẽ không hiệu quả. Đó là tình huống tương tự như không hoạt động setuid
trên kịch bản. Tương tự như trong trường hợp sau, đó là cách thực hiện cách execve
xử lý shebang và lý do bảo mật đằng sau nó (để biết chi tiết, xem: Cho phép setuid trên các tập lệnh shell ).
Tôi nghĩ bạn có những lựa chọn này
thiết lập các khả năng trên chính trình thông dịch (thực ra là một bản sao của nó)
- bạn có một vấn đề ở đây là bất kỳ ai có khả năng thực thi nó đều sẽ chạy với các khả năng nâng cao đó (có thể thực thi một số tập lệnh tùy ý hoặc khởi động nó một cách tương tác)
viết một trình bao bọc thực thi sẽ có logic mã hóa cứng để thực thi tập lệnh của bạn và đặt các khả năng mong muốn trên tệp thực thi này
- đảm bảo rằng không ai có thể sửa đổi cũng như xóa / thay thế tập lệnh
- vẫn bằng cách làm
chroot
người ta có thể bỏ lỡ bao bọc như vậy
Trong cả hai trường hợp, bạn sẽ phải đảm bảo bộ khả năng sẽ tồn tại execve
bằng cách đặt inheritable
cờ. Bạn cũng có thể sử dụng pam_cap
phân phối libcap
thường, để thực sự kích hoạt các khả năng mong muốn chỉ bằng cấu hình cho người dùng đã chọn.
Và nói chung, bạn muốn đảm bảo không ai có thể sửa đổi hành vi của trình thông dịch của bạn bằng cách thay đổi môi trường, vd. PYTHON_PATH
hoặc một cái gì đó tương tự.