IIS AppPoolIdentity và quyền truy cập ghi hệ thống tệp


395

Đây là một vấn đề với IIS 7.5 và ASP.NET mà tôi đã nghiên cứu và không tìm thấy. Mọi sự trợ giúp sẽ rất được trân trọng.

Câu hỏi của tôi là: sử dụng ASP.NET trong IIS 7.5, làm thế nào IIS và / hoặc hệ điều hành cho phép ứng dụng web ghi vào một thư mục như C:\dumpkhi chạy dưới sự tin tưởng hoàn toàn? Làm thế nào mà tôi không phải thêm quyền truy cập ghi cho người dùng nhóm ứng dụng (trong trường hợp này ApplicationPoolIdentity)?

Điều này nhiều tôi biết:

  • Trong IIS 7.5, Danh tính mặc định cho Nhóm ứng dụng là ApplicationPoolIdentity.
  • ApplicationPoolIdentity đại diện cho tài khoản người dùng Windows có tên "IIS APPPOOL \ AppPoolName", được tạo khi Nhóm ứng dụng được tạo, trong đó AppPoolName là tên của Nhóm ứng dụng.
  • Người dùng "IIS APPPOOL \ AppPoolName" theo mặc định là thành viên của IIS_IUSRSnhóm.
  • Nếu bạn đang chạy theo Full Trust, ứng dụng web của bạn có thể viết thư cho nhiều lĩnh vực của hệ thống tập tin (không bao gồm các thư mục thích C:\Users, C:\Windows, vv). Ví dụ, ứng dụng của bạn sẽ có quyền truy cập để ghi vào một số thư mục, như , C:\dump.
  • Theo mặc định, IIS_IUSRSnhóm không được cấp quyền truy cập đọc hoặc ghi C:\dump(ít nhất là không truy cập được hiển thị thông qua tab "Bảo mật" trong Windows Explorer).
  • Nếu bạn từ chối quyền truy cập ghi vào IIS_IUSRS, bạn sẽ nhận được SecurityException khi cố gắng ghi vào thư mục (như mong đợi).

Vì vậy, tính tất cả những điều đó vào tài khoản, quyền truy cập ghi được cấp cho người dùng "IIS APPPOOL \ AppPoolName" như thế nào? Quá trình w3wp.exe chạy như người dùng này, vậy điều gì cho phép người dùng này ghi vào thư mục mà nó dường như không có quyền truy cập rõ ràng?

Xin lưu ý rằng tôi hiểu điều này có thể được thực hiện vì mục đích thuận tiện, vì sẽ rất khó để cấp cho người dùng quyền truy cập vào mọi thư mục cần ghi nếu bạn đang chạy trong Full Trust. Nếu bạn muốn giới hạn quyền truy cập này, bạn luôn có thể chạy ứng dụng trong Medium Trust. Tôi quan tâm đến việc tìm hiểu về cách hệ điều hành và / hoặc IIS cho phép các ghi này diễn ra, mặc dù dường như không có quyền truy cập hệ thống tệp rõ ràng nào được cấp.

Câu trả lời:


403

Các ApplicationPoolIdentitythành viên được chỉ định của Usersnhóm cũng như IIS_IUSRSnhóm. Thoạt nhìn điều này có vẻ hơi đáng lo ngại, tuy nhiên Usersnhóm có phần hạn chế quyền NTFS.

Ví dụ: nếu bạn thử và tạo một thư mục trong C:\Windowsthư mục thì bạn sẽ thấy rằng bạn không thể. Các ApplicationPoolIdentityvẫn cần phải có khả năng đọc các file từ các thư mục hệ thống cửa sổ (nếu không làm thế nào khác sẽ quá trình lao động có thể tự động tải thiết yếu DLL).

Liên quan đến các quan sát của bạn về việc có thể ghi vào c:\dumpthư mục của bạn . Nếu bạn xem các quyền trong Cài đặt bảo mật nâng cao, bạn sẽ thấy như sau:

nhập mô tả hình ảnh ở đây

Xem sự cho phép đặc biệt được kế thừa từ c:\:

nhập mô tả hình ảnh ở đây

Đó là lý do trang web của bạn ApplicationPoolIdentitycó thể đọc và ghi vào thư mục đó. Quyền đó đang được kế thừa từ c:\ổ đĩa.

Trong một môi trường được chia sẻ, nơi bạn có thể có hàng trăm trang web, mỗi trang có nhóm ứng dụng riêng và Danh tính nhóm ứng dụng của riêng họ, bạn sẽ lưu trữ các thư mục trang web trong một thư mục hoặc ổ đĩa đã Usersxóa nhóm và các quyền được đặt sao cho chỉ Quản trị viên và Tài khoản HỆ THỐNG có quyền truy cập (có tính kế thừa).

Sau đó, bạn sẽ chỉ định các quyền cần thiết mà mỗi IIS AppPool\[name]yêu cầu trên thư mục gốc của trang.

Bạn cũng nên đảm bảo rằng bất kỳ thư mục nào bạn tạo nơi bạn lưu trữ các tệp hoặc dữ liệu có khả năng nhạy cảm đều phải Usersxóa nhóm. Bạn cũng nên đảm bảo rằng mọi ứng dụng bạn cài đặt sẽ không lưu trữ dữ liệu nhạy cảm trong các c:\program files\[app name]thư mục của chúng và thay vào đó chúng sử dụng các thư mục hồ sơ người dùng.

Vì vậy, có, thoạt nhìn có vẻ như ApplicationPoolIdentitycó nhiều quyền hơn mức cần thiết, nhưng thực tế nó không có nhiều quyền hơn so với quy định thành viên nhóm.

ApplicationPoolIdentitycách thành viên nhóm của một người có thể được kiểm tra bằng công cụ SysIternals Process Explorer . Tìm quy trình công nhân đang chạy với Danh tính nhóm ứng dụng mà bạn quan tâm (bạn sẽ phải thêm User Namecột vào danh sách các cột sẽ hiển thị:

nhập mô tả hình ảnh ở đây

Ví dụ: tôi có một nhóm ở đây có tên là 900300Nhận dạng nhóm ứng dụng IIS APPPOOL\900300. Nhấp chuột phải vào các thuộc tính cho quy trình và chọn tab Bảo mật mà chúng ta thấy:

nhập mô tả hình ảnh ở đây

Như chúng ta có thể thấy IIS APPPOOL\900300là một thành viên của Usersnhóm.


@Kev [+1] Tôi đã đăng một câu hỏi tương tự liên quan đến quyền NTFS cho danh tính nhóm ứng dụng tại đây: stackoverflow.com/questions/11232675/ trên - Tôi sẽ rất biết ơn nếu bạn có một cái nhìn.
one.beat.consumer

@ one.beat.consumer - Xin lỗi, tôi chưa bao giờ thấy bình luận của bạn. Bạn vẫn bế tắc với câu hỏi đó?
Kev

@Kev - vâng, nó đã trở thành một vấn đề ít hơn khi tôi bị kéo sang một bên tào lao khác, nhưng nó vẫn chưa được giải quyết. có suy nghĩ gì không?
one.beat.consumer

7
Hãy bỏ phiếu để có phần này trong MSDN. Không bao giờ dành thời gian để tìm hiểu điều này, vì vậy đây là một sự trợ giúp tuyệt vời (và tôi xấu hổ tôi không bao giờ biết).
Nỗi sợ hãi tuyệt vọng

67
Không rõ tại sao tài liệu cốt lõi Microsoft IIS này là trên SO thay vì MSDN.
Amit N Nikol

40
  1. Nhấp chuột phải vào thư mục.

  2. Nhấp vào Thuộc tính

  3. Nhấp vào tab Bảo mật. Bạn sẽ thấy một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

  1. Nhấp vào nút "Chỉnh sửa ..." trong màn hình trên. Bạn sẽ thấy một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

  1. Nhấp vào nút "Thêm ..." trong màn hình trên. Bạn sẽ thấy một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

  1. Nhấp vào nút "Vị trí ..." trong màn hình trên. Bạn sẽ thấy một cái gì đó như thế này. Bây giờ, đi đến phần trên cùng của cấu trúc cây này và chọn tên máy tính của bạn, sau đó nhấp vào OK.

nhập mô tả hình ảnh ở đây

  1. Bây giờ, gõ "iis apppool \ your_apppool_name" và nhấp vào nút "Kiểm tra tên". Nếu apppool tồn tại, bạn sẽ thấy tên apppool của bạn trong hộp văn bản có gạch chân trong đó. Nhấn nút OK.

nhập mô tả hình ảnh ở đây

  1. Kiểm tra / bỏ chọn bất kỳ quyền truy cập nào bạn cần để cấp cho tài khoản

  2. Nhấp vào nút Áp dụng và sau đó OK.


0

Mỗi nhóm ứng dụng trong IIs tạo thư mục người dùng an toàn của riêng mình với quyền đọc / ghi FULL theo mặc định trong c: \ users. Mở thư mục Người dùng của bạn và xem thư mục nhóm ứng dụng nào ở đó, nhấp chuột phải và kiểm tra quyền của họ đối với tài khoản ảo nhóm ứng dụng được chỉ định. Bạn sẽ thấy tài khoản nhóm ứng dụng của mình đã được thêm với quyền truy cập đọc / ghi được gán cho thư mục gốc và thư mục con của nó.

Vì vậy, kiểu truy cập lưu trữ tệp đó được thực hiện tự động và bạn sẽ có thể viết bất cứ điều gì bạn muốn có trong thư mục tài khoản người dùng mà không thay đổi bất cứ điều gì. Đó là lý do tại sao tài khoản người dùng ảo cho mỗi nhóm ứng dụng được tạo.


Điều này chỉ xảy ra nếu "Tải hồ sơ người dùng" được đặt thành True.
JamesQMurphy

Đúng vậy, điều đó có nghĩa là thư mục của AppPool sẽ không được tạo nếu nó không đúng phải không? Đây là lý do tại sao họ xây dựng nó theo cách này ..... để ngăn các II truy cập và lưu trữ rác trong windows / temp và trên tất cả các ổ đĩa cứng thay vì một thư mục bảo mật được quản lý chỉ dành cho tài khoản đó.
Stokely

0

Tôi đã thử cách này để khắc phục các sự cố truy cập vào trang web IIS, biểu hiện này giống như sau trong Nhật ký sự kiện → Windows → Ứng dụng:

Tên đăng nhập: Ứng dụng
Nguồn: ASP.NET 4.0.30319.0
Ngày: 1/5/2012 4:12:33 PM
ID sự kiện: 1314
Nhiệm vụ: Sự kiện Web
Cấp độ: Thông tin
Từ khóa: Cổ điển
Người dùng: Không có
Máy tính: SALTIIS01

Sự miêu tả:
Mã sự kiện: 4008 
Thông báo sự kiện: Ủy quyền tệp không thành công cho yêu cầu. 
Thời gian sự kiện: 1/5/2012 4:12:33 PM 
Thời gian sự kiện (UTC): 1/6/2012 12:12:33 AM 
ID sự kiện: 349fcb2ec3c24b16a862f6eb9b23dd6c 
Chuỗi sự kiện: 7 
Sự kiện xảy ra: 3 
Mã chi tiết sự kiện: 0 

Thông tin ứng dụng: 
    Miền ứng dụng: / LM / W3SVC / 2 / ROOT / Ứng dụng / SNCDW-19-129702818025409890 
    Mức độ tin cậy: Đầy đủ 
    Đường dẫn ảo ứng dụng: / Ứng dụng / SNCDW 
    Đường dẫn ứng dụng: D: \ Trang web \ WCF \ Ứng dụng \ SNCDW \ 
    Tên máy: SALTIIS01 

Thông tin quy trình: 
    ID quy trình: 1896 
    Tên quy trình: w3wp.exe 
    Tên tài khoản: iisservice 

Yêu cầu thông tin: 
    URL yêu cầu: http: //webservicest/Application/SNCDW/PC.svc 
    Đường dẫn yêu cầu: / Ứng dụng / SNCDW / PC.svc 
    Địa chỉ máy chủ người dùng: 10.60.16.79 
    Người dùng: js3228 
    Được xác thực: Đúng 
    Loại xác thực: Đàm phán 
    Tên tài khoản chủ đề: iisservice 

Cuối cùng, tôi phải cấp cho Everyonenhóm Windows quyền truy cập vào thư mục đó để làm cho nó hoạt động bình thường.

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.