2009-03-16 32 views
6

Để hiểu những gì tôi đang yêu cầu, điều quan trọng là phải phân biệt giữa một số cách sử dụng SUID trong Unix.Tôi có những lựa chọn nào trên các nền tảng MS Windows cho tương đương SUID từ các nền tảng dựa trên Unix?

Tôi có một dự án sử dụng tệp thi hành trong PATH của người dùng thuộc sở hữu của dự án và có bộ bit SUID. Bằng cách này, khi nó chạy, nó chạy trong bối cảnh chủ sở hữu của tập tin, chứ không phải người dùng đang gọi. Bằng cách này, nó có quyền truy cập vào những thứ mà người dùng không làm, và do đó những điều này được bảo vệ khỏi người dùng bằng cách bảo vệ hệ thống tập tin bình thường. Điều này hoạt động khá tốt. Kế hoạch là để di chuyển dự án đến một kiến ​​trúc máy khách-khách hàng nhưng điều đó sẽ mất một thời gian. Trong thời gian đó, làm thế nào tôi có thể tái tạo kiểu hành vi này trên các hệ thống Windows? Lưu ý rằng các tập tin thực thi của dự án không gọi hàm gọi thư viện SETUID, thẳng thắn, đó sẽ là một tính năng tuyệt vời để thêm vào, theo ý kiến ​​của tôi, cho dự án thực hiện những gì. Dự án không cần đặc quyền root của hệ thống. Đó là mối quan tâm bảo mật đầu tiên là nó cần bảo vệ các tệp riêng của mình khỏi người dùng (đơn giản là bất kỳ người dùng nào khác ngoài chủ sở hữu tệp) và nó sẽ rất tuyệt nếu nó có khả năng chuyển sang "ngữ cảnh người dùng" để truy cập tệp hệ thống như thể đó là người dùng đang gọi. (Bằng cách này, nó có thể dễ dàng xác định những gì là OK cho dự án để liên lạc và những gì không.)

Dự án được viết bằng sự kết hợp của C và Java - một chương trình C với SUID đặt mã Java ...

tôi muốn biết tất cả các cơ chế như vậy, và tôi đặc biệt tập trung vào những người đó là:

  1. Thích hợp cho C và Java, và;
  2. Dễ triển khai cho người lập trình không phải Windows và;
  3. Yêu cầu mã hóa tối thiểu duy nhất cho Windows.

Nếu một số giải pháp vượt trội, hãy chia sẻ suy nghĩ của bạn về bất kỳ điều gì bạn biết về vấn đề này.

GHI CHÚ:

  1. LogonUser: Yêu cầu một mật khẩu trong văn bản đơn giản. Làm thế nào có thể đó là một câu trả lời?
  2. RunAs: Yêu cầu nhập mật khẩu tại PROMPT! ... Như với LogonUser chỉ tồi tệ hơn; Tôi không thấy đây là câu trả lời.
+0

Giải pháp thích hợp là cài đặt dịch vụ. –

Trả lời

3

Tôi không nghĩ rằng có một SETUID tương đương trong Windows, nhưng bạn có thể khởi chạy quy trình với tư cách người dùng khác. Nếu bạn đang sử dụng C, có thực sự chỉ có hai chức năng chính cụ Windows bạn sẽ cần phải nhìn vào:

LogonUser

CreateProcessAsUser

Các tài liệu cho những chức năng này khá tốt, vì vậy nó shouldn' Đó là một thách thức lớn. Về cơ bản, bạn sẽ sử dụng LogonUser để mạo danh người dùng, sau đó CreateProcessAsUser để khởi chạy JVM với tư cách người dùng đó.

Bạn cũng có thể xem lệnh RUNAS, nhưng tôi không chắc liệu điều đó có đáp ứng nhu cầu của bạn hay không.

+0

Cảm ơn, nhìn vào chúng ... RT –

4

Cygwin có một cuộc thảo luận xuất sắc về cách họ làm điều này mà không cần mật khẩu người dùng ở đây: Using Windows security in Cygwin

Về cơ bản họ cài đặt một gói phần mềm xác thực tùy chỉnh LSA cung cấp thẻ an ninh mà không cần mật khẩu. Là một dự phòng, khi gói xác thực không được cài đặt, họ sử dụng API NtCreateToken không có giấy tờ.

Ứng dụng muốn mạo danh có thể thực hiện cuộc gọi thiết lập cygwin trước khi gọi java.

+0

Vâng, hóa ra chính xác những gì chúng ta đã làm từ giữa naughts. Tuy nhiên, nó đòi hỏi người dùng phải cài đặt Cygwin - một phần thưởng trong tâm trí của tôi, nhưng người dùng không vui khi phải cài đặt quá nhiều gói, đặc biệt là khi họ không hiểu/cảm nhận giá trị cho họ. Nó xuất hiện, mặc dù, (do thiếu các trả lời khác) rằng đây là cách duy nhất khác. –

+0

Ouch. Thật là một cơn ác mộng từ quan điểm bảo mật. Một lý do nữa để tránh xa Cygwin, IMO! –

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