IIS - 401.3 - Trái phép


92

Tôi đang cố gắng bắt đầu sử dụng IIS. Tôi đã tạo một trang web mới trên Trình quản lý IIS, ánh xạ nó vào một thư mục trên hệ thống tệp của tôi và thêm index.html vào thư mục. Tôi đã đặt cổng thành 85 cho trang web này. Khi tôi cố gắng truy cập http://localhost:85/index.html, tôi nhận được thông báo lỗi sau:

401.3 - trái phép - Bạn không có quyền xem thư mục hoặc trang này do cấu hình danh sách kiểm soát truy cập (ACL) hoặc cài đặt mã hóa cho tài nguyên này trên máy chủ Web.

Tôi đã cấp quyền truy cập đã đọc cho mọi người trên thư mục và thử lại. Sau đó tôi có thể truy cập trang.

Sau đó, tôi so sánh các thuộc tính của thư mục của tôi với của wwwroot. Tôi thấy rằng wwwroot có quyền truy cập đọc trên IIS_IUSRS ... Khi tôi thực hiện tương tự trên thư mục của mình và thử lại, tôi lại gặp lỗi ở trên. Tôi đã kiểm tra rằng quyền truy cập ẩn danh được bật theo mặc định, nhưng tôi vẫn gặp lỗi này.

Lý do tại sao điều này xảy ra? Cách chính xác để giải quyết vấn đề là gì?

Câu trả lời:


168

Tôi đã đấu tranh về vấn đề tương tự trong vài ngày. Nó có thể được giải quyết bằng cách sửa đổi các thuộc tính truy cập người dùng bảo mật của thư mục hệ thống tệp mà trang web của bạn được ánh xạ. Nhưng IIS_IUSRS không phải là tài khoản duy nhất bạn phải ủy quyền.

  • Trong bảng điều khiển quản lý IIS, trong phần Xác thực của cấu hình trang web của bạn, hãy sửa đổi dòng "Xác thực ẩn danh" và kiểm tra tài khoản được đặt là "Người dùng cụ thể" (của tôi là IUSR).
  • Cấp quyền đọc và thực thi trên thư mục của trang web của bạn cho tài khoản được liệt kê là người dùng cụ thể.

HOẶC LÀ

  • Trong bảng điều khiển quản lý IIS, trong phần Xác thực của cấu hình trang web của bạn, hãy sửa đổi dòng "Xác thực ẩn danh" bằng cách chọn "Danh tính của nhóm ứng dụng" thay vì "Người dùng cụ thể".

6
Tôi thấy tính năng xác thực không hoạt động với "Application Pool Identity" hoạt động, nhưng không thể làm cho nó hoạt động với IUSR vì một số lý do. Cảm ơn.
fortboise,

5
Logic đằng sau là theo mặc định, trang web sử dụng xác thực ẩn danh và IUSR là tài khoản ẩn danh. Vì vậy, IIS sử dụng tài khoản IUSR để truy cập hệ thống tệp (đường dẫn vật lý của trang web) có thể không hoạt động luôn luôn (vì nhiều hệ thống tệp của bạn sẽ không chấp nhận IUSR). Đó là nguyên nhân của 401.3. Bằng cách thay đổi quyền truy cập hệ thống tệp (cấp cho tài khoản đó quyền truy cập vào tệp) hoặc thay đổi tài khoản ẩn danh thành danh tính nhóm (danh tính nhóm nằm trong IIS_IUSRS, thường có quyền truy cập vào tệp), IIS phải có đủ quyền để truy cập tệp.
Lex Li

58

Đây là những gì đã làm việc cho tôi.

  1. Đặt danh tính nhóm ứng dụng cho một tài khoản có thể được gán quyền cho một thư mục.
  2. Đảm bảo thư mục nguồn và tất cả các tệp liên quan đã được cấp quyền đọc đối với các tệp đối với tài khoản được gán cho thuộc tính nhận dạng nhóm ứng dụng
  3. Trong IIS, tại nút gốc của máy chủ, đặt người dùng ẩn danh kế thừa từ danh tính nhóm ứng dụng. (Đây là phần tôi đã đấu tranh với)

Để đặt máy chủ ẩn danh kế thừa từ danh tính nhóm ứng dụng, hãy làm như sau ..

  • Mở trình quản lý IIS (inetmgr)
  • Trong ngăn bên tay trái, chọn nút gốc (tên máy chủ của máy chủ)
  • Trong ngăn giữa, mở applet 'Xác thực'
  • Đánh dấu 'Xác thực ẩn danh'
  • Trong ngăn bên tay phải, chọn 'Chỉnh sửa ...' (một hộp thoại sẽ mở ra)
  • chọn 'Danh tính nhóm ứng dụng'

9
# 3) CỐ ĐỊNH VẤN ĐỀ CỦA TÔI: Trong IIS, tại nút gốc của máy chủ, đặt người dùng ẩn danh kế thừa từ danh tính nhóm ứng dụng. (Đây là phần tôi đã đấu tranh với)
Ravi Ram

Tôi biết bạn không được phép viết bình luận "cảm ơn", nhưng tôi cảm thấy mình cần phải bày tỏ lòng biết ơn của mình. Không có cách nào tôi có thể tìm ra điều này.
Jonny Cook

@RaviRam: Vui lòng giải thích các bước bạn đã làm theo. Từng bước khi mới bắt đầu. Ý bạn là gì khi "n IIS, tại nút gốc của máy chủ, đặt người dùng ẩn danh kế thừa từ danh tính nhóm ứng dụng." Vui lòng giúp đỡ.
Không thể phá vỡ

@RaviRam - chạy lệnh "inetmgr.exe" và màn hình quản trị IIS sẽ xuất hiện. Từ đó, hãy làm theo các bước được nêu trong câu trả lời của tôi. Bạn có thể sẽ cần chạy lệnh với tư cách quản trị viên. msdn.microsoft.com/en-us/library/bb763170.aspx
barrypicker

Như đã đề cập trong một câu trả lời khác, tôi thấy rằng bạn không phải thay đổi cài đặt anon auth ở cấp cơ sở - bạn cũng có thể thay đổi cài đặt đó ở cấp trang web hoặc thư mục ảo
jaycer

15

TL; DR;

Trong hầu hết các trường hợp, cấp quyền truy cập vào (các) tài khoản sau (một | cả hai) là đủ:

  1. IIS AppPool \ DefaultAppPool
  2. IUSR

với Quyền truy cập :

  1. Đọc và thi hành
  2. Danh sách nội dung thư mục
  3. Đọc

Đó là nó!

Đọc tiếp để có lời giải thích chi tiết hơn ...


  1. Mở IIS và chọn ứng dụng của bạn .
  2. Ở phía bên phải, nhấp vào Xác thực .
  3. Chọn " Xác thực ẩn danh " tại đây.
  4. Hộp thoại sau bật lên.

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

Cấp quyền truy cập vào ACL của thư mục ứng dụng web tùy thuộc vào những gì được chọn trong hình trên:

  • Người dùng cụ thể : cấp quyền truy cập cho cả haiIUSR(trong trường hợp của tôi) +IIS AppPool\DefaultAppPool
  • Hồ bơi ứng dụng sắc : Truy cập tài trợ choIIS AppPool\DefaultAppPoolchỉ

IIS AppPool\DefaultAppPool tài khoản là tài khoản AppPool mặc định cho các ứng dụng web IIS mới, nếu bạn đã đặt tài khoản tùy chỉnh, hãy sử dụng tài khoản tùy chỉnh.


Cấp các quyền sau cho (các) tài khoản:

  1. Read & Execute
  2. List folder contents
  3. Read

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


13

Vì bạn đang xử lý nội dung tĩnh ...

Trên thư mục đóng vai trò là thư mục gốc của trang web của bạn- nếu bạn nhấp chuột phải> thuộc tính> bảo mật, "Người dùng" có hiển thị trong danh sách không? nếu không nhấp vào "Thêm ..." và nhập nó vào, hãy nhớ nhấp vào "Áp dụng" khi bạn hoàn tất.



1

Đề phòng bất kỳ ai khác gặp phải điều này. Tôi đã khắc phục sự cố tất cả các bước này và hóa ra là do tôi đã giải nén một số tệp từ MAC, Microsoft tự động không có thông báo Đã mã hóa các tệp. Sau nhiều giờ cố gắng thiết lập quyền thư mục, tôi đã truy cập và thấy tên tệp có màu xanh lục, có nghĩa là tệp đã được mã hóa và IIS sẽ gặp lỗi tương tự ngay cả khi quyền đối với thư mục là chính xác.


Đã dành quá nhiều thời gian cho vấn đề chính xác này. Đơn giản chỉ cần ở đây để cam kết. Tôi đã kết thúc ở đây để tìm kiếm IIS và truy cập vào EFS, nhưng câu trả lời của bạn đã giúp tôi hiểu được nguyên nhân gốc rễ của vấn đề của tôi - một tệp zip mở rộng từ máy Mac. Tình huống cụ thể của tôi là sự cố trong đó ASP.NET Core được lưu trữ trong quá trình trên IIS sẽ không khởi chạy - không có thông báo nhật ký sự kiện, không có nhật ký stdout, v.v. Truy cập qua localhost đưa ra thông báo lỗi rằng web.config không hợp lệ nhưng không hiển thị nguồn. Rõ ràng là tệp có thể truy cập được, nhưng không thể đọc nội dung.
Aaron

1
  1. Tạo một trang web mới, Nhấp chuột phải vào thư mục Trang web sau đó nhấp vào thêm Trang web
  2. Nhập tên trang web.
  3. Chọn đường dẫn vật lý
  4. Chọn địa chỉ Ip
  5. Thay đổi cổng
  6. Bấm OK
  7. Đi tới Hồ bơi ứng dụng
  8. Chọn nhóm trang web
  9. Nhấp chuột phải vào nhấp vào Cài đặt nâng cao
  10. Thay đổi phiên bản .Net CLR thành "Không có mã quản lý"
  11. Thay đổi Identity thành "ApplicationPoolIdentity"
  12. Chuyển đến trang chủ của Trang web, sau đó nhấp vào "Xác thực"
  13. Nhấp chuột phải vào AnonymousAuthentication rồi nhấp vào "Chỉnh sửa"
  14. Chọn danh tính nhóm ứng dụng
  15. Bấm ok
  16. bùm!

cho các tuyến thêm một web.config

<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="React Routes" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

0

Một vấn đề khác có thể phát sinh liên quan đến việc nhận trái phép là liên quan đến các nhà cung cấp được sử dụng trong cài đặt xác thực từ IIS. Trong trường hợp của tôi, tôi đã gặp sự cố đó Nếu tôi đặt nhà cung cấp Xác thực Windows là "Thương lượng". Sau khi tôi chọn tùy chọn "NTLM", quyền truy cập đã được cấp.

Thông tin thêm về nhà cung cấp dịch vụ xác thực

https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/authentication/windowsauthentication/providers/



0

Nếu bạn đang làm việc với xác thực Nhóm ứng dụng (thay vì IUSR), thì danh sách kiểm tra này của Jean Sun là cách tốt nhất mà tôi có thể tìm thấy để giải quyết lỗi 401 trong IIS:


Mở Trình quản lý IIS, điều hướng đến trang web hoặc thư mục ứng dụng của bạn nơi trang web được triển khai.

  1. Mở Cài đặt nâng cao (nó nằm trong ngăn Tác vụ bên phải).
  2. Ghi lại tên Nhóm ứng dụng rồi đóng cửa sổ này
  3. Nhấp đúp vào biểu tượng Xác thực để mở cài đặt xác thực
  4. Tắt xác thực Windows
  5. Nhấp chuột phải vào Xác thực ẩn danh và nhấp vào Chỉnh sửa
  6. Chọn nút radio nhận dạng nhóm ứng dụng và nhấp vào OK
  7. Chọn nút Application Pools từ cây quản lý IIS ở bên trái và chọn tên Application Pool mà bạn đã ghi chú ở bước 3
  8. Nhấp chuột phải và chọn Cài đặt nâng cao
  9. Mở rộng cài đặt Mô hình Quy trình và chọn ApplicationPoolIdentity từ danh sách thả xuống "Tài khoản tích hợp" rồi nhấp vào OK.
  10. Nhấp vào OK một lần nữa để lưu và loại bỏ trang cài đặt nâng cao Nhóm ứng dụng
  11. Mở dòng lệnh Administrator (nhấp chuột phải vào biểu tượng CMD và chọn "Run As Administrator". Nó sẽ nằm ở đâu đó trên menu bắt đầu của bạn, có thể là trong Phụ kiện.
  12. Chạy lệnh sau:

    icacls <path_to_site> /grant "IIS APPPOOL\<app_pool_name>"(CI)(OI)(M)
    

    Ví dụ:

    icacls C:\inetpub\wwwroot\mysite\ /grant "IIS APPPOOL\DEFAULTAPPPOOL":(CI)(OI)(M)
    

Đặc biệt là các bước 5. & 6. thường bị bỏ qua và ít được đề cập trên web.

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.