Chạy setuid nhị phân tạm thời không có setuid?


7

Hiện đang thiết lập xpra, muốn chạy một cá thể X là không root bằng trình điều khiển giả, nhưng hệ thống nhị phân Xorg của hệ thống là SUID. Vì hệ thống tự động cập nhật, tôi không muốn tạo và duy trì bản sao nhị phân không SUID. Tôi cũng đang cố gắng tránh sử dụng một hack như copy-exec-xóa, ví dụ như trong thư mục tmp (muốn làm cho nó trở thành một lớp lót sạch, mà theo bản năng tôi tin là có thể, mặc dù có thể có một số lỗ hổng bảo mật tinh vi khả năng này sẽ mở). Symlinks sẽ được chấp nhận, mặc dù AFAIK họ không cung cấp khả năng che dấu bit cho phép.

Giải pháp tốt nhất hiện tại của tôi là gắn kết nosuid trên thư mục bin, có vẻ như là một mánh khóe, nhưng như trên tôi vẫn thích một giải pháp không để lại lỗi trong cây hệ thống / fstab của tôi (ví dụ: một số biến môi trường ma thuật vô hiệu hóa suid giống như cách mà nosuid mount thực hiện hoặc một số dòng lệnh thực thi jutsu bỏ qua cơ chế suid).

Có suy nghĩ gì không?


tạo một bản sao và chmodnó hoặc một cái gì đó.
mikeerv

Câu trả lời:


3

Nếu Xđược liên kết động, bạn có thể gọi trình liên kết động như:

/lib/ld.so /path/to/X

(thích ứng ld.sovới hệ thống của bạn (như /lib/ld-linux.so.2).

Thí dụ:

$ /lib64/ld-linux-x86-64.so.2 /bin/ping localhost
ping: icmp open socket: Operation not permitted

2

Nếu bạn có strace, và được không setuid để root, sau đó

strace -e '! all' program_name [ argument (s) ]

nên làm việc.  strace (1) nói (theo BUGS):

Các chương trình sử dụng bit setuid không có đặc quyền ID người dùng hiệu quả trong khi được theo dõi.

bởi vì nó sẽ là một vấn đề bảo mật nếu người dùng không có đặc quyền có thể theo dõi chương trình setuid (vì theo dõi cho phép bạn kiểm tra và sửa đổi bộ nhớ của quy trình). Nhưng ngoài ra, trong một phần đặc biệt có tên là SETUID INSTALLATION, nó đã bảo vệ phần trên một chút:

Nếu straceđược cài đặt setuid thành root, thì ... chương trình setuid và setgid sẽ được thực thi và truy tìm các đặc quyền hiệu quả chính xác. ... chỉ những người dùng đáng tin cậy với quyền root hoàn toàn mới được phép thực hiện những việc này, ...

Vì vậy, nếu straceđược cài đặt setuid vào root, thì thủ thuật trên sẽ không hoạt động. Nhưng điều này thường không phải là trường hợp. Và, ngay cả khi nó là, bạn có thể làm việc xung quanh nó bằng cách tạo một bản sao riêng tư, không SUID strace. (Tôi nghĩ rằng, ngay cả khi /bin/straceđược cập nhật tự động, bạn không cần cập nhật bản sao riêng tư của mình.)

Đối với các lệnh, -enói stracee lỗ thông hơi để theo dõi.  -e allsẽ có nghĩa là "theo dõi tất cả các sự kiện" (là mặc định), vì vậy -e '!all'có nghĩa là không theo dõi. 1   Điều này sẽ gây ra stracehiệu quả để không làm gì ngoài việc chờ và xem chương trình của bạn (chương trình X) chạy. Nếu nó tạo ra đầu ra không mong muốn nào, chuyển hướng đầu ra đến /dev/null. (Điều này giả định rằng bạn không cần phải xem đầu ra của bàn điều khiển từ máy chủ X.)
______________
1 Bạn có thể sẽ cần trích dẫn !all để ngăn vỏ không coi !là tham chiếu lịch sử.

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.