Viết quyền truy cập vào MỌI NGƯỜI hoạt động, IUSR, IIS_IUSRS, DefaultAppPool không hoạt động. tại sao?


10

Đồng ý. Ở đây chúng tôi đang cố gắng thiết lập một trang web Classic ASP tại IIS 7.5 trong Windows Server 2008 R2. Có một thư mục có tên dbc dưới gốc của trang web và nó có một tệp được sử dụng để đọc và ghi thông tin nhất định trong khi mọi trang được xử lý.

Vấn đề là, nếu tôi cấp Quyền ghi IUSR và Quyền ghi IIS_IUSRS hoặc Quyền ghi mặc định mặc định, tôi nhận được "Quyền truy cập vào đường dẫn 'E: .. \ websiteroot \ dbc \ filename.txt' bị từ chối"

Nhưng nếu tôi cấp cho MỌI NGƯỜI Viết quyền truy cập vào thư mục dbc đó, thì tôi không gặp bất kỳ lỗi nào, mọi thứ dường như hoàn hảo.

Thông tin thêm: Trang web chạy ở chế độ Đường ống cổ điển, Xác thực ẩn danh được bật (có lẽ đó là xác thực duy nhất được bật) .. Và tôi đã thử xác thực ẩn danh bằng tài khoản IUSR cũng như Nhận dạng nhóm ứng dụng. Trong trường hợp của tôi, ApplicationPoolIdentity là Danh tính để Xác thực trang web. Chúng tôi sử dụng COM + cho tệp I / O. Và Classic ASP Server.CreateObject để khởi tạo một đối tượng ra khỏi nó. COM + chạy như một Dịch vụ Mạng.

Suy nghĩ? Tôi không muốn cấp quyền Viết cho MỌI NGƯỜI. Tui bỏ lỡ điều gì vậy?

GIẢI QUYẾT: Đây là những gì tôi đã làm.

Trang web của tôi có tên là CodesDemo đang chạy dưới AppPoolIdentity trong IIS 7.5, có thể được định vị bởi Danh tính IIS AppPool \ CodesDemo. Tôi đã sử dụng ICACLS để cấp quyền RW trên thư mục đó.

và COM + thực sự đang thực hiện tệp I / O đang chạy trong Nhận dạng dịch vụ mạng. Khi tôi đang sử dụng Trình theo dõi tiến trình để theo dõi Lỗi từ chối truy cập, nó đã cho thấy Dịch vụ mạng chỉ có quyền Đọc trên thư mục đó.

Tôi đã sử dụng "tên người dùng" / cấp: ICACLS: r "NT AUTHORITY \ NETWORKSERVICE" :( OI) (CI) RXW / T để cấp quyền truy cập Ghi trên thư mục đó.

Và giải quyết nó.

Tôi đã có ý định rằng vì trang web chạy dưới dạng Nhận dạng CodesDemo, đây sẽ là tài khoản sẽ được sử dụng để truy cập tệp qua COM +. Nhưng thật xấu hổ khi phát hiện ra rằng COM + vẫn sẽ hoạt động trên ranh giới Danh tính của chính nó.

Câu trả lời:


5

Trong IIS 7.5 (và tùy chọn trong IIS 7), tất cả các nhân viên đều chạy với Danh tính nhóm ứng dụng: người dùng "IIS AppPool * PoolName *".

Cấp quyền truy cập cho người dùng đó thay vì Mọi người (bạn sẽ cần nhập tên vào hộp thoại nhận dạng được chọn. Nó sẽ không hiển thị trong chức năng tìm).

Có một trang rất hữu ích trên iis.net bao gồm mọi thứ chi tiết hơn nhiều.

Cũng lưu ý: trong IIS7 (Server 2008):

  • Bạn đặt danh tính nhóm ứng dụng trên cơ sở nhóm ứng dụng trong các cài đặt nâng cao.
  • Không có hỗ trợ GUI, vì vậy bạn sẽ cần dòng lệnh để đặt quyền ( icacls.exe).

Cuối cùng, lựa chọn nhận dạng của SQL Server cũng không biết về nhận dạng nhóm ứng dụng: sử dụng CREATE LOGINCREATE USERban đầu, sau này GUI có thể được sử dụng để cấp các vai trò, v.v.


@Richard - Vâng. Cảm ơn các phản ứng nhanh chóng. diễn đàn msDN rất không đáng tin những ngày này. Quay trở lại ... Tôi đã bắt đầu tìm hiểu trang web IIS.net và serverfault trong vài ngày. Tôi sử dụng danh tính nhóm ứng dụng mặc định trong máy chủ IIS 7.5 / Win 2008 R2. Và vì vậy, tôi đã cấp quyền IIS APPPOOL \ DefaultAppPool Wite trên thư mục 'dbc' của tôi. Thêm vào đó, tôi đã cấp quyền IUSR và IIS_IUSRS Write trên thư mục đó. Nó vẫn không hoạt động cho đến khi tôi cho phép MỌI NGƯỜI Viết quyền. Tôi biết có một cái gì đó mà tôi đang thiếu .. Bạn có thể giúp đỡ?
gmaran23

@ gmaran23: Nếu các bước rõ ràng không hoạt động, tôi sử dụng Trình giám sát quy trình để xem chính xác điều gì đang xảy ra (và thường thì đó là tệp đang mở yêu cầu quá nhiều quyền truy cập, tôi đã thất bại trong việc đặt ACL chính xác hoặc một cái gì đó khác có tập tin mở).
Richard

@Richard - Tôi thực hiện các thao tác Đọc / Ghi với trình đọc tệp trong c # với FileMode.Open, FileAccess.ReadWrite. - Tôi đoán phần đó là tốt. Một cái gì đó khác mở tệp - tôi đoán điều này có thể được loại trừ, bởi vì không có khả năng nào của nó .. Có gì đó không ổn với ACL. Tôi sẽ kiểm tra và đăng nó ở đây. Cũng sẽ thử Trình theo dõi tiến trình. Cảm ơn sự giúp đỡ :)
gmaran23

@ gmaran23: Nếu nó không hoạt động, đừng cho rằng bạn biết mọi thứ luôn kiểm tra. Tôi đã lãng phí quá nhiều thời gian trong những năm qua vì tôi biết điều gì đó là hoặc không đúng - tất cả quá thường xuyên tôi đã sai.
Richard

1
@ gmaran23: Sử dụng các công cụ để xem chính xác những gì đang diễn ra: bạn đang đoán và không làm việc thông qua các vấn đề một cách có hệ thống. (1) Sử dụng Process Explorer để xác nhận tệp không mở. (2) Sử dụng Trình theo dõi tiến trình để xem quyền truy cập nào đang được yêu cầu và theo danh tính nào (và bạn có đúng tệp). (3) Kết quả kiểm tra kép số 2 so với ACL trên tệp (và mở các thuộc tính bảo mật nâng cao để biết chi tiết đầy đủ). (4) Điều chỉnh một thứ và chuyển đến # 1 cho đến khi cố định. Nếu bạn vẫn bị kẹt sau một vài lần lặp, hãy mở rộng Q với đầy đủ chi tiết (và cụ thể).
Richard

5

Bạn có thể thêm tài khoản thông qua GUI NTFS bằng cách nhập trực tiếp. Tên ở định dạng IIS APPPOOL\<<app pool name>>, ví dụ IIS APPPOOL\DefaultAppPool. (xem bài viết hỗ trợ này của Microsoft )

Một giải pháp thay thế: Tôi đã sử dụng tài khoản "Dịch vụ mạng" với tư cách là người dùng nhóm ứng dụng cấp quyền ghi.


Đúng, mẹo đó là tốt, nhưng tôi đã làm điều đó rồi. Tôi sử dụng "ApplicationPoolIdentity" mặc định cho nhóm ứng dụng. Và đối với thư mục 'dbc', tôi đã cấp quyền Viết cho IIS AppPool \ DefaultAppPool. Nhưng nó vẫn không hoạt động cho đến khi tôi cho phép MỌI NGƯỜI Viết.
gmaran23

1

Nếu bạn chỉ muốn cấp quyền thư mục WRITE cho người dùng cụ thể, bạn cũng nên thay đổi 'Danh tính người dùng ẩn danh' của trang web thành 'Người dùng cụ thể', chứ không phải 'Nhận dạng nhóm ứng dụ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.