2011-11-29 27 views
10

Tôi đang chạy script python nhỏ này trên cả Linux và Solaris như một người dùng không có đặc quyền:bit setuid trên kịch bản python: Linux vs Solaris

#!/usr/bin/python 
import os 
print 'uid,euid =',os.getuid(),os.geteuid() 

Trước khi chạy, các bit setuid được thiết lập trên các kịch bản (không phải trên thông dịch viên python):

chown root:myusergrp getuid.py 
chmod 4750 getuid.py 

trên Solaris, uid hiệu quả được thiết lập vì các bit setuid:

uid,euid = 10002 0 

Nhưng không phải trên Linux:

uid,euid = 10002 10002 

Note phiên bản python là 2,6 cho cả Solaris và Linux

Có possibe có Python Linux làm việc như Python Solaris?

Trả lời

21

Hầu hết các bản phân phối Unix thường không cho phép bạn sử dụng setuid trên tệp có sử dụng #! thông dịch viên. Solaris xảy ra là một trong đó cho phép nó do việc sử dụng một thực hiện an toàn hơn so với hầu hết các bản phân phối khác.

Xem FAQ cụm từ này đối với nền thêm về lý do tại sao cơ chế này là rất nguy hiểm: How can I get setuid shell scripts to work?

Xem liên kết này để thảo luận nhiều hơn và làm thế nào để biên dịch một thực thi setuid mà sẽ chạy script của bạn: setuid on shell scripts

Các thích hợp một phần:

int main() 
{ 
    setuid(0); 
    system("/path/to/script.sh"); 

    return 0; 
} 
+0

Solaris dựa trên SVR4, dưới dạng ghi chú liên kết Câu hỏi thường gặp của bạn, sử dụng các cách bảo mật hơn các Unix cũ hơn để xử lý việc khởi động tập lệnh setuid. – alanc

+0

Điểm tuyệt vời. Tôi đã chỉnh sửa câu trả lời để phản ánh điều đó. –

+0

Điều gì sẽ xảy ra nếu tập lệnh python của bạn cần được bắt đầu với tư cách người dùng không phải root, và sau đó suid trong khi thực hiện tại một số điểm? –

2

Tôi chỉ đặt hai và hai ngày hôm nay và đưa ra giải pháp thay thế: cython --embed.

Thực hiện theo các ví dụ tại liên kết ở trên và bạn sẽ nhận được tệp thực thi nhị phân từ Python của mình để bạn có thể chownchmod u+s, hoàn tất vòng kết nối mà không có chương trình trình bao bọc.

Tất nhiên, hãy cẩn thận những rủi ro (của việc này hoặc bất kỳ việc sử dụng khác setuid) —bugs trong tập lệnh của bạn có thể dẫn đến các đặc quyền nâng cao trên hệ thống.

1

Bạn có khả năng sử dụng sudo để đạt được những gì bạn muốn. Công cụ chạy nội dung với tư cách người dùng khác nhau:

sudo -u otheruser command 

Quyền được đặt bằng root bằng visudo. Công cụ setuid/setguid không xuất hiện để áp dụng cho các tập lệnh hoặc trình bao trong linux, chỉ mã được biên dịch.

Các vấn đề liên quan