Các khả năng có thể được sử dụng trong các tập lệnh mà không cần cài đặt nhị phân trình thông dịch không?


14

Ngay bây giờ tôi đang sử dụng cap_net_bind_service MY_USERNAMEtrong /etc/security/capability.conf.
Bây giờ tôi chỉ cần cài đặt cap_net_bind_service+itrình thông dịch của ngôn ngữ kịch bản lệnh yêu thích của tôi để có thể thêm CAP_NET_BIND_SERVICEvào bộ hiệu quả thông qua libcap [-ng].

Điều này hoạt động tốt, nhưng tôi tự hỏi liệu có cách nào để đạt được điều tương tự mà không đặt bất kỳ giới hạn nào cho nhị phân thông dịch viên hay không. Mặc dù đó không phải là vấn đề lớn (các tài khoản người dùng khác không có giới hạn nên họ không thể sử dụng ngay cả với bit được đặt trên nhị phân trình thông dịch), điều đó hơi khó chịu vì tôi phải đặt lại cờ mỗi khi trình thông dịch cập nhật.

Câu trả lời:


4

Thông thường, các khả năng được thừa hưởng cho trẻ em. Như đã nêu trong trang web :

Một đứa trẻ được tạo thông qua ngã ba (2) thừa hưởng các bản sao của bộ khả năng của cha mẹ nó.

Vấn đề với các kịch bản là chúng không thể thực thi trực tiếp. Hạt nhân đi qua một danh sách kiểm tra (mã hạt nhân nằm ở fs / binfmt _ *. C). Một trong số đó là "binfmt_script.c", kiểm tra dòng đầu tiên cho một shebang, sau đó gọi trình thông dịch thực sự (một trong shebang) với kịch bản của bạn làm đối số. Như vậy, trình thông dịch chuẩn / chung được gọi và chỉ cần đọc tập lệnh của bạn làm đối số.

Điều này có nghĩa là bạn sẽ phải đặt khả năng cho trình thông dịch, chứ không phải trên tập lệnh. Điều tương tự áp dụng cho suidcác bit và các cờ đặc biệt khác.

Vì vậy, hoặc bạn tạo một bản sao của trình thông dịch, đặt các khả năng bạn muốn trên nó (cũng kiểm tra xem không ai có thể truy cập thông qua chmod / chown) và gọi trình thông dịch sao chép này trong shebang của bạn. Bạn cũng có thể thực hiện logic setcap trong tập lệnh của mình.


Ok, không thấy câu hỏi được hỏi cách đây 2 năm nhưng không bao giờ đóng cửa ... Ngoài ra, có vẻ như là một bản sao của unix.stackexchange.com/questions/87348/...
Adrien M.

nhưng chỉ i(kế thừa), được thực hiện trong quá khứ. Và ikhông có gì riêng, nó chỉ hoạt động nếu tệp có khớp ivà tôi coi ebit (hiệu quả) (trừ khi tập lệnh / tập thực thi đó). Nó thậm chí còn phức tạp hơn setuid, đây không phải là hiệu ứng kịch bản.
ctrl-alt-delor

1
Tôi nghĩ rằng shebang đã được đọc bởi kernel không phải là vỏ? ( stackoverflow.com/questions/3009192/how-does-the-shebang-work/
mẹo

kết đôi bạn đúng. Đó là một cách giải thích sai tôi hiểu sau này. Tôi đã sửa nó với các gợi ý về vị trí mã hạt nhân để thực thi tập lệnh.
Adrien M.
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.