ทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับการอนุญาต Apache Basic รองรับเซสชันใน Perl และ PHP การใช้ตรรกะและการเรียงลำดับ

นอกจากโมดูลเหล่านี้แล้ว ยังมี mod_authn_core และ mod_authz_core อีกด้วย โมดูลเหล่านี้ใช้คำสั่งหลักที่เป็นแกนหลักของโมดูลการรับรองความถูกต้องทั้งหมด

คุณอาจต้องการดู Access Control ซึ่งจะกล่าวถึง วิธีต่างๆควบคุมการเข้าถึงเซิร์ฟเวอร์ของคุณ

การแนะนำ

หากคุณมีข้อมูลบนเว็บไซต์ที่ละเอียดอ่อนหรือมีไว้สำหรับคนกลุ่มเล็กๆ เท่านั้น เทคนิคในบทความนี้จะช่วยให้คุณมั่นใจได้ว่าผู้ที่ดูหน้าเหล่านั้นคือคนที่คุณตั้งใจให้พวกเขาเห็น

บทความนี้กล่าวถึงวิธี "มาตรฐาน" ในการรักษาความปลอดภัยบางส่วนของเว็บไซต์ของคุณซึ่งคนส่วนใหญ่จะใช้

หมายเหตุ:

หากข้อมูลของคุณต้องการความปลอดภัยจริงๆ ให้พิจารณาใช้ mod_ssl นอกเหนือจากการตรวจสอบสิทธิ์ใดๆ

ข้อกำหนดเบื้องต้น

คำสั่งที่กล่าวถึงในบทความนี้จะต้องถูกส่งไปยังไฟล์การกำหนดค่าของเซิร์ฟเวอร์หลักของคุณ (โดยปกติจะอยู่ภายใต้ ) หรือในไฟล์การกำหนดค่าของแต่ละไดเร็กทอรี (ไฟล์ .htaccess)

หากคุณวางแผนที่จะใช้ไฟล์ .htaccess คุณจะต้องมีการกำหนดค่าเซิร์ฟเวอร์ที่อนุญาตให้ตั้งค่าคำสั่งการรับรองความถูกต้องในไฟล์เหล่านี้ ซึ่งทำได้ด้วยคำสั่ง AllowOverride ซึ่งระบุว่าคำสั่งใด (ถ้ามี) ที่สามารถวางในไฟล์การกำหนดค่าต่อไดเร็กทอรี

เนื่องจากเรากำลังพูดถึงการรับรองความถูกต้องที่นี่ คุณจะต้องมีคำสั่ง AllowOverride เช่นนี้:

AllowOverride AuthConfig

หรือหากคุณเพียงจะระบุคำสั่งโดยตรงในไฟล์การกำหนดค่าเซิร์ฟเวอร์หลัก คุณจะต้องมีสิทธิ์ในการเขียนไฟล์นั้นอย่างแน่นอน

และคุณจำเป็นต้องรู้เพียงเล็กน้อยเกี่ยวกับโครงสร้างไดเร็กทอรีของเซิร์ฟเวอร์ของคุณเพื่อทราบว่าไฟล์บางไฟล์ถูกจัดเก็บไว้ที่ใด ไม่จำเป็นต้องเป็นเรื่องยากมาก และฉันจะพยายามหาคำตอบเมื่อเรามาถึงจุดนี้

คุณต้องตรวจสอบให้แน่ใจด้วยว่ามีโมดูล mod_authn_core และ mod_authz_core ถูกสร้างขึ้นแล้ว ไฟล์ไบนารี httpd หรือโหลดด้วยไฟล์กำหนดค่า httpd.conf โมดูลทั้งสองนี้มีคำสั่งพื้นฐานและ ฟังก์ชั่นซึ่งมีความสำคัญต่อการกำหนดค่าและการใช้การรับรองความถูกต้องและการอนุญาตบนเว็บเซิร์ฟเวอร์

รับงาน

ต่อไปนี้เป็นหลักการพื้นฐานสำหรับรหัสผ่านที่ป้องกันไดเร็กทอรีบนเซิร์ฟเวอร์ของคุณ

ขั้นแรก คุณต้องสร้างไฟล์รหัสผ่าน วิธีที่คุณทำเช่นนี้จะขึ้นอยู่กับผู้ให้บริการการรับรองความถูกต้องรายใดที่คุณเลือก เพิ่มเติมเกี่ยวกับเรื่องนี้ในภายหลัง เริ่มต้นด้วยเราจะใช้ ไฟล์ข้อความรหัสผ่าน

ไฟล์นี้จะต้องอยู่ในตำแหน่งที่ไม่สามารถเข้าถึงได้จากอินเทอร์เน็ต ซึ่งหมายความว่าผู้คนไม่สามารถดาวน์โหลดไฟล์รหัสผ่านได้ ตัวอย่างเช่น หากเอกสารของคุณให้บริการจาก /usr/local/apache/htdocs คุณอาจต้องการวางไฟล์รหัสผ่านใน /usr/local/apache/passwd

หากต้องการสร้างไฟล์ ให้ใช้ยูทิลิตี้ htpasswd ที่มาพร้อมกับ Apache ซึ่งจะอยู่ในไดเร็กทอรี bin ทุกที่ที่คุณติดตั้ง Apache หากคุณติดตั้ง Apache จากแพ็คเกจของบุคคลที่สาม นี่อาจอยู่ในเส้นทางการดำเนินการของคุณ

หากต้องการสร้างไฟล์ ให้ป้อน:

htpasswd -c /usr/local/apache/passwd/รหัสผ่าน rbowen

ให้มากกว่าหนึ่งคนด้วย

คำสั่งข้างต้นอนุญาตให้มีเพียงหนึ่งคนเท่านั้น (โดยเฉพาะผู้ที่มีชื่อผู้ใช้ rbowen) เพื่อเข้าสู่ไดเร็กทอรี ในกรณีส่วนใหญ่ คุณจะต้องการ AuthGroupFile ของบุคคลมากกว่าหนึ่งคน นี่คือที่ตั้งของ AuthGroupFile

หากคุณต้องการรวมบุคคลมากกว่าหนึ่งคน คุณต้องสร้างไฟล์กลุ่มที่เชื่อมโยงชื่อกลุ่มกับรายชื่อผู้ใช้ในกลุ่มนั้น รูปแบบของไฟล์นี้ค่อนข้างเรียบง่ายและคุณสามารถสร้างมันขึ้นมาได้โดยใช้โปรแกรมแก้ไขที่คุณชื่นชอบ เนื้อหาของไฟล์จะมีลักษณะดังนี้:

ชื่อกลุ่ม: rbowen dpitts sungo rshersey

เป็นเพียงรายชื่อสมาชิกกลุ่มในบรรทัดยาวคั่นด้วยช่องว่าง

หากต้องการเพิ่มผู้ใช้ในไฟล์รหัสผ่านที่มีอยู่ ให้ป้อน:

htpasswd /usr/local/apache/passwd/รหัสผ่าน dpitts

คุณจะได้คำตอบเหมือนเดิมแต่จะถูกเพิ่มเข้าไป ไฟล์ที่มีอยู่แทนที่จะสร้างไฟล์ใหม่ (สิ่งนี้ -c ทำให้สร้างไฟล์รหัสผ่านใหม่)

ตอนนี้คุณต้องเปลี่ยนไฟล์หรือบล็อก .htaccess ให้มีลักษณะดังนี้:

AuthType Basic AuthName "โดยการเชิญเท่านั้น" # บรรทัดเสริม: ไฟล์ AuthBasicProvider AuthUserFile "/usr/local/apache/passwd/passwords" AuthGroupFile "/usr/local/apache/passwd/groups" ต้องการ groupName

ตอนนี้ใครก็ตามที่มีรายชื่ออยู่ใน GroupName และมีรายการในไฟล์รหัสผ่านจะรวมอยู่ด้วยหากพวกเขาป้อนรหัสผ่านที่ถูกต้อง

มีอีกวิธีหนึ่งที่ผู้ใช้หลายคนจะเจาะจงน้อยลงเกี่ยวกับเรื่องนี้ แทนที่จะสร้าง. ไฟล์กลุ่มคุณสามารถใช้คำสั่งต่อไปนี้:

ต้องการผู้ใช้ที่ถูกต้อง

การใช้สิ่งนี้แทนบรรทัด Require user rbowen จะทำให้ทุกคนที่อยู่ในไฟล์รหัสผ่านสามารถป้อนรหัสผ่านได้อย่างถูกต้อง

ปัญหาที่เป็นไปได้

เนื่องจากวิธีการระบุการรับรองความถูกต้องขั้นพื้นฐาน ชื่อผู้ใช้และรหัสผ่านของคุณจะต้องได้รับการตรวจสอบทุกครั้งที่คุณร้องขอเอกสารจากเซิร์ฟเวอร์ แม้ว่าคุณจะโหลดหน้าเดิมซ้ำและสำหรับทุกภาพบนหน้านั้น (หากมาจากไดเร็กทอรีที่มีการป้องกัน) อย่างที่คุณสามารถจินตนาการได้ สิ่งนี้จะทำให้สิ่งต่าง ๆ ช้าลงเล็กน้อย จำนวนที่ช้าลงนั้นแปรผันตามขนาดของไฟล์รหัสผ่าน เนื่องจากมันจะต้องเปิดไฟล์นั้นและผ่านรายชื่อผู้ใช้จนกว่าจะได้ชื่อของคุณ และควรทำเช่นนี้ทุกครั้งที่โหลดหน้าเว็บ

ผลที่ตามมาก็คือ มีการจำกัดจำนวนผู้ใช้ที่คุณสามารถใส่ไว้ในไฟล์รหัสผ่านเดียวได้ ขีดจำกัดนี้จะขึ้นอยู่กับประสิทธิภาพของเซิร์ฟเวอร์เฉพาะของคุณ แต่คุณอาจคาดว่าจะช้าลงหลังจากได้รับรายการไม่กี่ร้อยรายการ และอาจต้องการพิจารณาวิธีการตรวจสอบสิทธิ์แบบอื่นในระหว่างนี้

การจัดเก็บรหัสผ่านทางเลือก

เนื่องจากการจัดเก็บรหัสผ่านในไฟล์ข้อความมีปัญหาตามที่กล่าวไว้ข้างต้น คุณอาจต้องการจัดเก็บรหัสผ่านไว้ในตำแหน่งอื่น เช่น ฐานข้อมูล

การใช้ซัพพลายเออร์หลายราย

ด้วยการนำไปปฏิบัติ สถาปัตยกรรมใหม่การรับรองความถูกต้องและการอนุญาตตามผู้ให้บริการ คุณจะไม่ถูกล็อคออกจากการรับรองความถูกต้องหรือวิธีการอนุญาตใด ๆ อีกต่อไป ในความเป็นจริง คุณสามารถผสมและจับคู่ผู้ให้บริการจำนวนเท่าใดก็ได้เพื่อให้คุณได้รับรูปแบบที่ตรงกับความต้องการของคุณ ตัวอย่างต่อไปนี้ใช้ผู้ให้บริการการตรวจสอบสิทธิ์ทั้งแบบใช้ไฟล์และ LDAP

AuthName "ส่วนตัว" AuthType Basic AuthBasicProvider ไฟล์ ldap AuthUserFile "/usr/local/apache/passwd/passwords" AuthLDAPURL ldap://ldaphost/o=yourorg ต้องการผู้ใช้ที่ถูกต้อง

ในตัวอย่างนี้ ผู้ให้บริการไฟล์จะพยายามตรวจสอบสิทธิ์ผู้ใช้ก่อน หากไม่สามารถตรวจสอบสิทธิ์ผู้ใช้ได้ ผู้ให้บริการ LDAP จะถูกเรียก ซึ่งจะทำให้คุณสามารถขยายขอบเขตของการตรวจสอบสิทธิ์ได้ หากองค์กรของคุณใช้ที่เก็บการตรวจสอบสิทธิ์หลายรายการ สถานการณ์การรับรองความถูกต้องและการอนุญาตอื่น ๆ อาจเกี่ยวข้องกับการผสมการรับรองความถูกต้องประเภทหนึ่งกับการอนุญาตประเภทอื่น ตัวอย่างเช่น การรับรองความถูกต้องกับไฟล์รหัสผ่านที่ได้รับอนุญาตกับไดเร็กทอรี LDAP

เช่นเดียวกับที่ผู้ให้บริการการรับรองความถูกต้องหลายรายสามารถนำมาใช้ได้ ก็สามารถใช้วิธีการอนุญาตได้หลายวิธี ตัวอย่างนี้ใช้การให้สิทธิ์กลุ่มไฟล์เช่นเดียวกับการให้สิทธิ์กลุ่ม LDAP

AuthName "ส่วนตัว" ไฟล์ AuthType Basic AuthBasicProvider AuthUserFile "/usr/local/apache/passwd/passwords" AuthLDAPURL ldap://ldaphost/o=yourorg AuthGroupFile "/usr/local/apache/passwd/groups" ต้องการกลุ่ม GroupName ต้องการ ldap- กลุ่ม cn=mygroup,o=yourorg

หากต้องการอนุญาตเพิ่มเติมอีกเล็กน้อย ให้อนุญาตคำสั่งคอนเทนเนอร์เช่น และ อนุญาตให้ใช้ตรรกะเพื่อให้สามารถควบคุมลำดับการอนุญาตที่เกิดขึ้นได้อย่างสมบูรณ์ผ่านการกำหนดค่า ดูตัวอย่างวิธีการใช้งานคอนเทนเนอร์การอนุญาต

นอกจากจะเป็นเพียงการอนุญาตแล้ว

การใช้ตรรกะและการเรียงลำดับ

การควบคุมวิธีการและลำดับการอนุญาตที่จะนำไปใช้นั้นเป็นเรื่องลึกลับในอดีต Apache 2.2 นำเสนอกลไกการตรวจสอบความถูกต้องตามผู้ให้บริการเพื่อแยกกระบวนการตรวจสอบความถูกต้องจริงจากการอนุญาตและข้อมูลรับรองการสนับสนุน ข้อดีด้านหนึ่งคือสามารถกำหนดค่าและเรียกใช้ผู้ให้บริการการตรวจสอบสิทธิ์ในลำดับเฉพาะได้ ซึ่งไม่ขึ้นอยู่กับลำดับที่โหลดโมดูลการตรวจสอบสิทธิ์เอง กลไกที่อิงตามผู้ให้บริการเดียวกันนี้ได้ถูกยกยอดไปสู่การอนุญาตแล้ว ซึ่งหมายความว่าคำสั่ง Require ไม่เพียงแต่ระบุวิธีการอนุญาตที่ควรใช้วิธีการอนุญาต แต่ยังระบุลำดับการเรียกใช้อีกด้วย วิธีการอนุญาตหลายวิธีถูกเรียกในลำดับเดียวกันโดยที่คำสั่ง Require ปรากฏในการกำหนดค่า

ด้วยการแนะนำคำสั่งคอนเทนเนอร์การอนุญาตเช่น และ การกำหนดค่ายังมีการควบคุมว่าจะเรียกใช้วิธีการอนุญาตเมื่อใด และเกณฑ์ใดจะกำหนดว่าจะให้สิทธิ์การเข้าถึงเมื่อใด ดูคอนเทนเนอร์การอนุญาตสำหรับตัวอย่างวิธีการใช้เพื่อแสดง ตรรกะที่ซับซ้อนการอนุญาต

การแคชการรับรองความถูกต้อง

อาจมีกรณีที่การรับรองความถูกต้องสร้างภาระที่ยอมรับไม่ได้ให้กับผู้ให้บริการหรือเครือข่ายของคุณ สิ่งนี้น่าจะส่งผลกระทบต่อผู้ใช้ mod_authn_dbd (หรือผู้ให้บริการบุคคลที่สาม/กำหนดเอง) เพื่อจัดการกับสิ่งนี้ HTTPD 2.3/2.4 ขอแนะนำผู้ให้บริการแคชใหม่ mod_authn_socache เพื่อแคชข้อมูลประจำตัวและลดภาระของผู้ให้บริการต้นทาง

สิ่งนี้สามารถปรับปรุงประสิทธิภาพการทำงานสำหรับผู้ใช้บางคนได้อย่างมาก

ข้อมูลมากกว่านี้

คุณควรอ่านเอกสารประกอบสำหรับ mod_auth_basic และ mod_authz_host ซึ่งมี ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานทั้งหมด คำสั่งนี้ยังช่วยลดความซับซ้อนในการกำหนดค่าการตรวจสอบสิทธิ์บางอย่างได้อีกด้วย

เลขศูนย์ต่างๆ ที่ Apache รองรับสำหรับข้อมูลการตรวจสอบสิทธิ์นั้นมีอธิบายไว้ในนี้ ส่วน "การเข้ารหัสรหัสผ่าน"

และคุณอาจต้องการดู Access Control ซึ่งจะกล่าวถึงหัวข้อที่เกี่ยวข้องหลายหัวข้อ

มักจำเป็นต้องจำกัดการเข้าถึงของผู้ใช้ไปยังบางส่วนของไซต์ของคุณ ตัวอย่างเช่นในส่วนของการบริหาร ซึ่งมักทำได้โดยการสร้างกลไกการอนุญาตของคุณเอง อย่างไรก็ตาม มีวิธีปกป้องพื้นที่ของไซต์โดยใช้เครื่องมือเซิร์ฟเวอร์และเบราว์เซอร์ในตัว การอนุญาตที่ง่ายที่สุดเรียกว่า Apache การอนุญาตขั้นพื้นฐาน. บทความนี้จะมีความยาวมาก ดังนั้นควรเตรียมตัวอ่านเยอะๆ แต่จะมีทุกสิ่งที่คุณต้องการในการทำงานกับการอนุญาตประเภทนี้

มันทำงานอย่างไร

ขั้นแรก เราวางไฟล์ .htaccess ไว้บนเซิร์ฟเวอร์ ในนั้นเราจะระบุโซน (หรือไฟล์เฉพาะ) ที่เราต้องการป้องกันด้วยรหัสผ่าน อาจมีลักษณะดังนี้:

AuthType พื้นฐาน #ประเภทการอนุญาต
AuthName "ชื่อ" #ชื่อผู้อนุญาต
#ตำแหน่งของไฟล์รหัสผ่าน
AuthUserFile /usr/host/mysite/.htpasswd
#ข้ามผู้ใช้คนใดคนหนึ่ง
#ที่กรอกชื่อผู้ใช้และรหัสผ่านที่ถูกต้อง

ต้องการผู้ใช้ที่ถูกต้อง

นอกจากนี้ไซต์อาจมีไฟล์รหัสผ่าน มีโครงสร้างที่เรียบง่าย:

เข้าสู่ระบบ: รหัสผ่านที่เข้ารหัส
เข้าสู่ระบบ: รหัสผ่านที่เข้ารหัส
...

เส้นทางไปยังไฟล์นี้ระบุไว้ใน htaccess

การสนทนากับเซิร์ฟเวอร์ภายใต้แว่นขยาย

ตอนนี้ สมมติว่ามีคนพิมพ์ที่อยู่ของไดเร็กทอรีที่มีการป้องกันด้วยรหัสผ่าน อะไรจะเกิดขึ้น? นี่คือสิ่งที่:

1. เบราว์เซอร์ขอเพจจากเซิร์ฟเวอร์ที่ http://site/secret
เซิร์ฟเวอร์เห็นว่าหน้านี้ได้รับการป้องกัน มันส่งส่วนหัวของเบราว์เซอร์:

WWW-รับรองความถูกต้อง: อาณาจักรพื้นฐาน = อาณาจักรของฉัน
สถานะ: 401 ไม่ได้รับอนุญาต
สถานะ HTTP: 401 ไม่ได้รับอนุญาต

ที่นี่ต้องบอกว่าโซน (อาณาจักร) - พารามิเตอร์ที่สำคัญ. หากคุณต้องการนำทางผู้ใช้ผ่านโซนที่มีการป้องกันด้วยรหัสผ่านหลายแห่ง ซึ่งไม่ใช่โซนที่ผู้ใช้ควรสามารถเข้าถึงได้ทั้งหมด ชื่อของโซนจะกำหนดว่าผู้ใช้เข้าสู่ระบบสถานที่นี้หรือไม่

2. เมื่อได้รับส่วนหัวเหล่านี้แล้ว เบราว์เซอร์จะดึงแบบฟอร์มขอเข้าสู่ระบบและรหัสผ่านบนหน้าจอ หากผู้ใช้คลิก "ยกเลิก" เบราว์เซอร์จะแสดงข้อมูลทั้งหมดที่เป็นไปตามส่วนหัวเหล่านี้

3. หากผู้ใช้ป้อนข้อมูลเข้าสู่ระบบและรหัสผ่าน จะถูกส่งไปยังเซิร์ฟเวอร์ เขาเข้าไปในไฟล์พร้อมรหัสผ่านและดูคู่ต่อไปนี้ที่นั่น หากพบก็จะส่งคืนหน้าที่เบราว์เซอร์ร้องขอตั้งแต่ต้น ถ้าไม่เช่นนั้น ระบบจะส่งส่วนหัวการอนุญาตอีกครั้ง

4. หากผู้ใช้ป้อนข้อมูลเข้าสู่ระบบและรหัสผ่านที่ถูกต้อง และเซิร์ฟเวอร์ตอบกลับตามหน้าที่ร้องขอ เบราว์เซอร์จะจดจำข้อมูลเข้าสู่ระบบและรหัสผ่านที่ป้อนสำหรับโซนนี้

5. จากนั้นหากเบราว์เซอร์ส่งคำขอ (!!!) ไปยังเซิร์ฟเวอร์เบราว์เซอร์จะแนบคู่เข้าด้วยกัน - ล็อกอินและรหัสผ่าน ดูเหมือนว่านี้:

การอนุญาต: พื้นฐาน base64 (เข้าสู่ระบบ: ผ่าน)

นั่นคือคู่ล็อกอิน-รหัสผ่านถูกเข้ารหัสใน base64 ฉันขอดึงความสนใจของคุณอีกครั้ง - ตอนนี้การเข้าสู่ระบบและรหัสผ่านจะถูกส่งไปพร้อมกับคำขอเบราว์เซอร์ใด ๆ สำหรับรูปภาพ ไฟล์สไตล์ สคริปต์ favico และอื่นๆ อีกมากมาย โดยพื้นฐานแล้ว หากต้องการรับแต่ละไฟล์ คุณจะต้องผ่านการอนุญาต มีเพียงเบราว์เซอร์เท่านั้นที่ทำสิ่งนี้เพื่อคุณ

6. เมื่อเซิร์ฟเวอร์ได้รับคำขอ เซิร์ฟเวอร์จะตรวจสอบว่ามาพร้อมกับข้อมูลเข้าสู่ระบบและรหัสผ่านหรือไม่ หากเป็นเช่นนั้น พวกเขาจะตรวจสอบการอนุญาตทันที

คำขออนุญาตใน Perl และ PHP

ตอนนี้ได้เวลาหาวิธีแสดงหน้าต่างการอนุญาต Apache โดยไม่ใช้ htaccess แต่ใช้สคริปต์ใน Perl หรือ PHP ฉันใส่โซลูชันทั้งสองนี้ไว้ในสองรายการโดยเฉพาะ ภาษาที่แตกต่างกันภายใต้หัวข้อเดียว เพราะตอนนี้เมื่อรู้กลไกแล้ว เราก็สรุปได้อย่างรวดเร็วว่าเพื่อให้หน้าต่างคำขออนุญาตปรากฏขึ้น เราจำเป็นต้องส่งส่วนหัวที่จำเป็นเท่านั้น นี่คือสิ่งที่เราจะทำ

#เพิร์ล
พิมพ์ "WWW-Authenticate: Basic realm=\"My Realm\"\n";
พิมพ์ "สถานะ: 401 ไม่ได้รับอนุญาต\n";
พิมพ์ "สถานะ HTTP: 401 ไม่ได้รับอนุญาต\n";
พิมพ์ "ประเภทเนื้อหา: ข้อความ/html\n\nยกเลิก";

#พีเอชพี
header("WWW-Authenticate: Basic realm=\"My Realm\"");
ส่วนหัว ("สถานะ: 401 ไม่ได้รับอนุญาต");
header("สถานะ HTTP: 401 ไม่ได้รับอนุญาต");
พิมพ์ "คุณคลิกยกเลิก";

ผลลัพธ์ทั้งสองกรณีจะเป็นแบบคำขออนุมัติ

การสกัดกั้นการอนุญาตใน Perl

สมมติว่าผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่าน พวกเขาจะถูกส่งไปยังเซิร์ฟเวอร์ แต่ที่นี่มีปัญหาเกิดขึ้น ความจริงก็คือเมื่อ Apache ได้รับการเข้าสู่ระบบและรหัสผ่าน จะต้องการตรวจสอบในไฟล์รหัสผ่าน แต่จะเกิดอะไรขึ้นถ้าการเข้าสู่ระบบและรหัสผ่านไม่ได้เก็บไว้ในไฟล์รหัสผ่าน แต่อยู่ในฐานข้อมูล? ในกรณีนี้ คุณต้องให้สิทธิ์สคริปต์ก่อนที่ Apache จะดำเนินการ

เกิดปัญหา: Apache ไม่ผ่านการเข้าสู่ระบบและรหัสผ่านที่ป้อนไปยังตัวแปรสภาพแวดล้อม นั่นคือการเข้าถึงจาก Perl เป็นปัญหา แต่อาจจะ. วิธีแก้ปัญหาที่ง่ายที่สุดคือใช้ mod_rewrite เพิ่มใน htaccess ไฟล์เส้น:

เขียนใหม่เครื่องยนต์บน
RewriteCond %(HTTP:การอนุญาต) ^(.*)
เขียนกฎใหม่ ^(.*) —

พวกเขาจะเพิ่มตัวแปรสภาพแวดล้อมใหม่ จาก Perl จะปรากฏเป็น $ENV(HTTP_CGI_AUTHORIZATION) มันจะมีคู่ล็อกอิน-รหัสผ่านที่เข้ารหัสใน base64 แน่นอนว่าคุณจะต้องแก้ไขเล็กน้อยเพื่อเขียนโค้ดกลับคืนมา แต่นั่นก็เป็นอะไรบางอย่าง ยิ่งไปกว่านั้น ที่จริงแล้วไม่มีอะไรยุ่งยากมากนัก:

$ENV(HTTP_CGI_AUTHORIZATION) =~ s/พื้นฐาน\s+//i;
ของฉัน ($REMOTE_USER,$REMOTE_PASSWD) = แยก(/:/,decode_base64($ENV(HTTP_CGI_AUTHORIZATION)));

ตอนนี้เรามีตัวแปรสองตัว $REMOTE_USER และ $REMOTE_PASSWD ซึ่งคุณสามารถอนุญาตโดยใช้สคริปต์ ตรวจสอบข้อมูลเข้าสู่ระบบและรหัสผ่านตามที่คุณต้องการ

การสกัดกั้นการอนุญาตใน PHP

รองรับเซสชันใน Perl และ PHP

เหนือสิ่งอื่นใด หลังจากได้รับอนุญาตสำเร็จแล้ว ตัวแปรสภาพแวดล้อมจะมีการเข้าสู่ระบบของผู้ใช้ที่ได้รับอนุญาตซึ่งเรียกใช้สคริปต์ปฏิบัติการ นั่นคือคุณจะรู้อยู่เสมอว่าใครเป็นผู้เปิดตัวสคริปต์ การเข้าสู่ระบบมีอยู่ในตัวแปร:

#เพิร์ล
$ENV(REMOTE_USER)
#php
$_เซิร์ฟเวอร์

แค่นั้นแหละ

บทความนี้ดีมากตามที่ฉันสัญญาไว้ แต่จะตรวจสอบหลักการพื้นฐานของวิธีการทำงานของการอนุญาตฐาน Apache และยังมีวิธีแก้ไขปัญหาบางอย่างที่อาจเกิดขึ้นเมื่อทำงานกับมัน พูดตามตรง ฉันใช้เวลามากกว่าหนึ่งชั่วโมงเพื่อค้นหาคำตอบสำหรับคำถามบางข้อที่ได้รับคำตอบในบทความนี้ ฉันหวังว่ามันจะช่วยประหยัดเวลาให้กับโปรแกรมเมอร์คนอื่นๆ

ลิงก์ที่เกี่ยวข้อง

  • htaccess และ htpasswd - วิธีอนุญาตเฉพาะ Apache
  • htaccess.net.ru - ไซต์ที่อุทิศให้กับความเป็นไปได้ในการจัดการเซิร์ฟเวอร์โดยใช้ไฟล์ htaccess

หากคุณต้องการให้คนเข้ามามากกว่าหนึ่งคน คุณจะต้องสร้างไฟล์กลุ่มที่เชื่อมโยงชื่อกลุ่มกับรายชื่อผู้ใช้ในกลุ่มนั้น รูปแบบของไฟล์นี้ค่อนข้างเรียบง่าย และคุณสามารถสร้างด้วยไฟล์ที่คุณชื่นชอบได้ บรรณาธิการ เนื้อหาของไฟล์จะมีลักษณะดังนี้:

ชื่อกลุ่ม: rbowen dpitts sungo rshersey

นั่นเป็นเพียงรายชื่อสมาชิกของกลุ่มเป็นแถวยาวคั่นด้วยช่องว่าง

หากต้องการเพิ่มผู้ใช้ในไฟล์รหัสผ่านที่มีอยู่แล้ว ให้พิมพ์:

htpasswd /usr/local/apache/passwd/รหัสผ่าน dpitts

คุณจะได้รับการตอบสนองเหมือนเดิม แต่จะถูกผนวกเข้ากับไฟล์ที่มีอยู่ แทนที่จะสร้างไฟล์ใหม่ (นี่คือ -c ที่ทำให้มันสร้างไฟล์รหัสผ่านใหม่)

Mod_auth_basic และ mod_authz_host ซึ่งมีข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานทั้งหมดนี้ คำสั่งนี้ยังช่วยลดความซับซ้อนของการกำหนดค่าการตรวจสอบสิทธิ์บางอย่างได้อีกด้วย

เลขศูนย์ต่างๆ ที่ Apache รองรับสำหรับข้อมูลการตรวจสอบสิทธิ์นั้นมีอธิบายไว้ในนี้ การเข้ารหัสรหัสผ่าน

และคุณอาจต้องการดูวิธีการควบคุมการเข้าถึง ซึ่งจะกล่าวถึงหัวข้อที่เกี่ยวข้องหลายหัวข้อ

สิ่งแรกที่ฉันพยายามทำคือการใช้ โมดูลอาปาเช่ authnz_ldap_module เกี่ยวกับการใช้งานซึ่งมีข้อมูลมากมายบนอินเทอร์เน็ต ตอนแรกฉันต้องเผชิญกับความจริงที่ว่าการอนุญาตล้มเหลวและเซิร์ฟเวอร์ตอบสนองต่อคำขอเพจ ข้อผิดพลาดภายใน. หลังจากขุดคุ้ยมาบ้าง ฉันก็พบว่าทั้งหมดนั้นเกี่ยวกับการเข้ารหัส โลแคลของฉันคือ koi8-r และ AD อย่างที่ทราบกันดีว่าใช้ utf8 หลังจากร่างสคริปต์เล็กๆ ในภาษา Perl แล้ว ฉันจึงแปลงการกำหนดค่า Apache เป็นการเข้ารหัส utf8 หลังจากการดำเนินการนี้ ฉันสามารถให้สิทธิ์ผู้ใช้โดเมนใดก็ได้ (ต้องการผู้ใช้ที่ถูกต้อง) ผู้ใช้เฉพาะโดเมน (ต้องมีผู้ใช้ ldap) แต่ด้วยเหตุผลบางประการไม่สามารถอนุญาตโดยกลุ่มได้ หลังจากใช้เวลาไป n ฉันก็พบว่าผู้ใช้ต้องอยู่ใน OU เดียวกันกับกลุ่ม สิ่งนี้ทำให้ฉันประหลาดใจมาก เนื่องจากยังไม่ชัดเจนว่าทำไมจึงต้องมีการอนุญาตที่แปลกประหลาดเช่นนี้ บางทีฉันอาจทำอะไรผิดไป แต่สุดท้ายฉันก็ตัดสินใจหยุดใช้โมดูล authnz_ldap_module และทำการอนุญาตบนพื้นฐานเดียวกับการอนุญาต Squid โดยใช้ Samba และโมดูล auth_ntlm_winbind_module

ฉันจะบอกทันทีว่าฉันไม่พบแพ็คเกจสำเร็จรูปสำหรับ FreeBSD และต้องใช้สิ่งที่ฉันพบบนอินเทอร์เน็ต แต่มีข้อมูลเพิ่มเติมด้านล่าง

เพื่อให้แก้ไขปัญหาได้สำเร็จ ฉันจำเป็นต้องติดตั้ง Apache, heimdal, Samba 3 จากพอร์ตและค้นหาไฟล์เก็บถาวรบนอินเทอร์เน็ตด้วยโมดูล auth_ntlm_winbind_module ดังนั้นตามลำดับ

อย่างแรกก็คือ การติดตั้งอาปาเช่. ไม่มีอะไรซับซ้อนหรือแย่มากเกี่ยวกับเรื่องนี้ โดยเฉพาะอย่างยิ่งเมื่อติดตั้งพอร์ต: ทำการกำหนดค่าและทำให้การติดตั้งสะอาด

ตอนนี้เราจัดการไฟล์การกำหนดค่า ก่อนอื่นมาทำความเข้าใจกับ Kerberos ด้วยการสร้างไฟล์ /etc/krb5.conf โดยเติมเนื้อหาต่อไปนี้โดยประมาณ:


ตั๋ว_อายุการใช้งาน = 24000
default_realm = DOMAIN.RU
dns_lookup_realm = เท็จ
dns_lookup_kdc = เท็จ


DOMAIN.RU = (
kdc = เซิร์ฟเวอร์1.โดเมน.ru:88
kdc = server2.domain.ru:88
}


.domain.ru = โดเมน.RU
domain.ru = DOMAIN.RU


แพม = (
ตรวจแก้จุดบกพร่อง = เท็จ
ตั๋ว_อายุการใช้งาน = 36000
ต่ออายุ_อายุการใช้งาน = 36000
ส่งต่อได้ = จริง
krb4_convert = เท็จ
}

ฉันมีตัวควบคุมโดเมนสองตัวตามลำดับ ดังนั้นในส่วนอาณาจักร ฉันจึงระบุ kdc สองตัว ควรสังเกตด้วยว่าตัวพิมพ์ของตัวอักษรในไฟล์นี้มีความสำคัญมาก

ไฟล์ถัดไปคือไฟล์การตั้งค่า Samba ฉันไม่ต้องการฟังก์ชัน Samba ทั้งหมด ดังนั้นฉันจึงเปลี่ยนชื่อไฟล์การกำหนดค่าเริ่มต้นเป็น smb.conf.old และสร้าง /usr/local/etc/smb.conf ใหม่:


เวิร์กกรุ๊ป = โดเมน
ชื่อ netbios = svn
อาณาจักร = domain.ru
สตริงเซิร์ฟเวอร์ = svn
โฮสต์อนุญาต = 192.168 127.0.0.1

ตัวคั่น winbind =+

winbind ใช้โดเมนเริ่มต้น = ใช่
winbind uid = 10,000-20,000
winbind gid = 10,000-20,000
ผู้ใช้ winbind enum = ใช่
กลุ่ม winbind enum = ใช่

เทมเพลต homedir = /tmp/winnt/%D/%U
เทมเพลตเชลล์ = /bin/bash

ขนาดบันทึกสูงสุด = 50
ความปลอดภัย = โฆษณา
วิธีการรับรองความถูกต้อง = winbind

เซิร์ฟเวอร์รหัสผ่าน = เซิร์ฟเวอร์ 1 เซิร์ฟเวอร์ 2
passdb แบ็กเอนด์ = smbpasswd
คำนึงถึงขนาดตัวพิมพ์ = ไม่

ตอนนี้คุณต้องได้รับตั๋ว Kerberos โดยใช้คำสั่ง kinit:

ผู้ดูแลระบบ kinit –p

ตอนนี้เพิ่ม Apache autostart (หากไม่ได้เพิ่มก่อนหน้านี้) และ Samba daemons ลงในไฟล์ /etc/rc.conf:

apache22_enable="ใช่"
smbd_enable="ใช่"
nmbd_enable="ใช่"
winbindd_enable="ใช่"

และเราพยายามเริ่ม smbd, nmbd, winbindd ด้วยตนเอง ตอนนี้เราตรวจสอบการทำงานของ winbindd โดยใช้คำสั่ง wbinfo –p ซึ่งการตอบสนองที่ถูกต้องคือ “Ping to winbindd สำเร็จใน fd 4”

ขั้นตอนต่อไปคือการเพิ่มเครื่องลงในโดเมน นี้ ใช้งานง่ายดำเนินการด้วยคำสั่งต่อไปนี้:

net rpc เข้าร่วม –S server1 –w DOMAIN –U ผู้ดูแลระบบ

ตอนนี้เครื่องของเราจึงเป็นสมาชิกเต็มรูปแบบของโดเมน

ดังที่ฉันได้กล่าวไว้ข้างต้น ไม่สามารถค้นหาโมดูลสำหรับ FreeBSD ได้ แต่พบโมดูลสำหรับ Debian สิ่งที่สำคัญที่สุดคือไฟล์ mod_auth_ntlm_winbind.c ในไฟล์เก็บถาวรที่พบมีไฟล์ mod_auth_ntlm_winbind.c ซึ่งจำเป็นต้องรวบรวมและติดตั้ง เราทำอย่างนี้:

/usr/local/sbin/apxs -DAPACHE2 -c -i mod_auth_ntlm_winbind.c

ตอนนี้เรามาดูขั้นตอนสุดท้ายกันดีกว่า - การกำหนดค่า ไฟล์การกำหนดค่าอาปาเช่. ก่อนหน้านี้ เราสร้างไดเร็กทอรีทดสอบ /usr/local/www/apache22/data/test ซึ่งเราสร้างไฟล์ทดสอบ index.html พร้อมเนื้อหาใดๆ ดังนั้นเราจึงเพิ่มบรรทัดการโหลดสำหรับโมดูลของเราใน config /usr/local/etc/apache22/httpd.conf:

LoadModule auth_ntlm_winbind_module libexec/apache22/mod_auth_ntlm_winbind.s หรือ

และกฎการเข้าถึงไดเร็กทอรีทดสอบของเราในรูปแบบของบล็อกนี้:


ตัวเลือกดัชนี FollowSymLinks
AllowOverride ไม่มี
คำสั่งอนุญาต, ปฏิเสธ
อนุญาตจากทั้งหมด
AuthName "การรับรองความถูกต้อง NTLM"
ประเภทการรับรองความถูกต้อง NTLM
NTLMAuth เปิดอยู่
NTLMAuthHelper "/usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of= เอสไอดี"
NTLMBasicเผด็จการ
ประเภทการรับรองความถูกต้อง NTLM
ต้องการผู้ใช้ที่ถูกต้อง

โดยที่ SID คือ SID ของกลุ่มที่ต้องการเข้าถึงโฟลเดอร์นี้

และสุดท้ายนี้ ฉันจะแสดงให้คุณเห็นว่าต้องทำอย่างไร ความช่วยเหลือของ PowerShellรับ SID ของกลุ่มที่เราต้องการอย่างรวดเร็ว:

$sid = (วัตถุใหม่ system.security.principal.NtAccount("gro up_name "))
$sid.แปล() | ค่ารูปแบบรายการ

การปกป้องเว็บไซต์โดยใช้เซิร์ฟเวอร์ Apache เป็นหนึ่งในวิธีที่ง่ายที่สุดและในขณะเดียวกันก็ค่อนข้างเชื่อถือได้ ในกรณีนี้ คุณไม่จำเป็นต้องคิดอย่างรอบคอบเกี่ยวกับกลยุทธ์การรักษาความปลอดภัย ออกแบบ และนำไปใช้ในโค้ด นอกจากนี้ในการสร้างระบบการป้องกันที่ดีคุณต้องมีคุณสมบัติเพียงพอในเรื่องนี้ การใช้การป้องกันในตัวของเซิร์ฟเวอร์ Apache WEB ช่วยให้งานของคุณง่ายขึ้นอย่างมาก สิ่งที่คุณต้องทำคือดำเนินการตามลำดับง่ายๆ และเว็บไซต์ของคุณก็จะได้รับการปกป้องอย่างเพียงพอ บทความนี้จะอธิบายรายละเอียดขั้นตอนและการดำเนินการที่คุณต้องดำเนินการ และในตอนท้ายของบทความจะมีตัวอย่างไฟล์ .htaccess

การรับรองความถูกต้องขั้นพื้นฐาน

บทความนี้จะกล่าวถึงวิธีที่ง่ายที่สุดและ วิธีที่เหมาะสมความปลอดภัย - การรับรองความถูกต้องขั้นพื้นฐาน

ความคิดเห็น

การรับรองความถูกต้องเป็นกระบวนการที่ใช้ตรวจสอบว่ามีใครบางคนที่พวกเขาบอกว่าเป็น โดยทั่วไป การยืนยันเกี่ยวข้องกับการป้อนชื่อผู้ใช้และรหัสผ่าน

มาดูกันว่าการรับรองความถูกต้องขั้นพื้นฐานทำงานอย่างไร
เมื่อผู้เยี่ยมชมเข้าถึงไดเร็กทอรีที่ได้รับการป้องกัน เซิร์ฟเวอร์ Apache จะตอบสนองต่อคำขอด้วยส่วนหัวที่มีรหัส 401 (ส่วนหัวต้องมีการตรวจสอบสิทธิ์ 401) เบราว์เซอร์ของผู้เข้าชมยอมรับส่วนหัว 401 และแสดงหน้าต่างพร้อมช่องสำหรับป้อนชื่อผู้ใช้และรหัสผ่าน หลังจากป้อนชื่อผู้ใช้และรหัสผ่าน ข้อมูลนี้จะถูกส่งกลับไปยังเซิร์ฟเวอร์ ซึ่งจะตรวจสอบชื่อผู้ใช้เพื่อดูว่ามีอยู่หรือไม่ รายการพิเศษและรหัสผ่านถูกต้อง หากทุกอย่างถูกต้อง ผู้เยี่ยมชมจะสามารถเข้าถึงทรัพยากรได้ นอกจากส่วนหัวแล้ว ชื่อพิเศษที่เรียกว่าขอบเขตจะถูกส่งไปยังเบราว์เซอร์ด้วย เบราว์เซอร์ไม่เพียงแคชชื่อผู้ใช้และรหัสผ่านเพื่อให้ส่งไปพร้อมกับคำขอแต่ละรายการ แต่ยังรวมถึงขอบเขตด้วย ด้วยเหตุนี้การป้อนชื่อและรหัสผ่านในไดเร็กทอรีที่ได้รับการป้องกันจึงทำได้เพียงครั้งเดียว มิฉะนั้น จะต้องป้อนคำขอทั้งหมดไปยังไดเร็กทอรีที่ได้รับการป้องกัน การแคชพารามิเตอร์การรับรองความถูกต้อง (ชื่อ รหัสผ่าน ขอบเขต) มักจะเกิดขึ้นภายในเซสชันเดียวเท่านั้น

ความคิดเห็น

ที่ การรับรองความถูกต้องขั้นพื้นฐานชื่อผู้ใช้และรหัสผ่านจะถูกส่งไปยังเครือข่ายใน แบบฟอร์มเปิดในระหว่างเซสชันทั้งหมดเมื่อผู้เยี่ยมชมทำงานกับไดเร็กทอรีที่ได้รับการป้องกัน แฮกเกอร์สามารถดักจับข้อมูลนี้โดยใช้ เครื่องวิเคราะห์เครือข่ายแพคเกจ ประเภทนี้ไม่ควรใช้การรับรองความถูกต้องเมื่อจำเป็นต้องมีการปกป้องข้อมูลที่มีคุณค่าเชิงพาณิชย์อย่างแท้จริง

ความคิดเห็น

อาปาเช่เว็บเซิร์ฟเวอร์รองรับการป้องกันประเภทอื่น - การรับรองความถูกต้องแบบแยกส่วน ในระหว่างการตรวจสอบสิทธิ์แบบแยกย่อย รหัสผ่านจะไม่ถูกส่งในรูปแบบข้อความธรรมดา แต่เป็นรหัสแฮชที่คำนวณโดยใช้อัลกอริทึม MD5 ดังนั้นจึงไม่สามารถดักจับรหัสผ่านได้เมื่อสแกนการรับส่งข้อมูล แต่น่าเสียดายที่ในการใช้การรับรองความถูกต้องแบบแยกย่อยคุณต้องติดตั้งโมดูลพิเศษบนเซิร์ฟเวอร์ - mod_auth_digest และนี่เป็นเพียงความสามารถของการดูแลเซิร์ฟเวอร์เท่านั้น นอกจากนี้ จนกระทั่งเมื่อไม่นานมานี้ เบราว์เซอร์ทุกประเภทยังไม่รองรับการรับรองความถูกต้องแบบแยกย่อย

การป้องกันเว็บไซต์ทำได้ง่าย

เพื่อปกป้องเว็บไซต์ คุณต้องทำ ลำดับต่อไปนี้การดำเนินการ: สร้างไฟล์ด้วยรหัสผ่าน คัดลอกไปยังเซิร์ฟเวอร์ สร้างไฟล์ .htaccess และคัดลอกไปยังเซิร์ฟเวอร์ด้วย
เพื่อจัดระเบียบการป้องกันคุณจะต้องมี

  1. เว็บไซต์และการเข้าถึง FTP
  2. สิทธิ์ในการสร้างไฟล์ .htpaccess และจัดการการป้องกันโดยใช้ไฟล์เหล่านั้น
  3. โปรแกรมสร้างรหัสผ่าน htpasswd.exe

ตรวจสอบการทำงานของไฟล์ .htaccess บนเซิร์ฟเวอร์

เพื่อตรวจสอบว่าคุณมีสิทธิ์ในการจัดการการป้องกันโดยใช้ไฟล์ .htaccess หรือไม่ ให้สร้างไฟล์ข้อความชื่อ .htaccess (อักขระตัวแรกคือจุด ไม่มีนามสกุล)

ความคิดเห็น

สะดวกในการสร้างไฟล์ .htaccess โดยใช้โปรแกรมแก้ไขในตัวในเชลล์ Far, WindowsCommander, TotalCommander ฯลฯ รวมถึงในตัวแก้ไข Notepad

ความคิดเห็น

เพื่อไม่ให้แผ่นจดบันทึกถูกแทนที่โดยอัตโนมัติ ส่วนขยาย .txtในกล่องโต้ตอบบันทึก ในรายการแบบเลื่อนลง "ประเภทไฟล์" ให้เลือกตัวเลือก "ไฟล์ทั้งหมด"


ข้าว.บันทึกไฟล์ .htaccess ในแผ่นจดบันทึก

ตรวจสอบการทำงานของ .htaccess

AuthType พื้นฐาน
ผู้ดูแลระบบ AuthName
ต้องการผู้ใช้ที่ถูกต้อง

จากนั้น ด้วยการเข้าถึง FTP ให้เขียนไฟล์ .htaccess บนไซต์ใหม่ในไดเร็กทอรีที่คุณต้องการปกป้อง

ความคิดเห็น

ผลกระทบของไฟล์ .htaccess ไม่เพียงขยายไปยังไดเร็กทอรีที่ไฟล์นั้นตั้งอยู่ แต่ยังรวมถึงไดเร็กทอรีย่อยทั้งหมดที่อยู่ระดับต่ำกว่าด้วย

จากนั้น เข้าถึงไดเร็กทอรีนี้ผ่านเบราว์เซอร์ของคุณ หากคุณกำลังปกป้องไดเร็กทอรีผู้ดูแลระบบและคัดลอกไฟล์ .htaccess ไว้ที่นั่น ให้ป้อน URL ต่อไปนี้ในแถบที่อยู่ของเบราว์เซอร์: http://www.mysite.ru/admin/

หากหลังจากนี้ คุณได้รับแจ้งให้ป้อนข้อมูลเข้าสู่ระบบและรหัสผ่านตามภาพด้านล่าง แสดงว่าการทดสอบสำเร็จและคุณสามารถปกป้องไดเร็กทอรีต่อไปได้

ข้าว. หน้าต่างเข้าสู่ระบบและรหัสผ่าน


หากคุณทำทุกอย่างถูกต้อง แต่หน้าต่างป้อนรหัสผ่านไม่ปรากฏขึ้น แสดงว่าการตั้งค่าเซิร์ฟเวอร์ห้ามไม่ให้คุณใช้ไฟล์ .htaccess เพื่อปกป้องไดเรกทอรี สำหรับการแก้ปัญหา ปัญหานี้คุณควรติดต่อฝ่ายดูแลเซิร์ฟเวอร์ หรือใช้การป้องกันประเภทอื่น
เมื่อพิจารณาแล้วว่าไฟล์ .htaccess ทำงานได้ คุณควรลบไฟล์ทดสอบที่คุณเพิ่งเขียนออกจากไซต์

ความคิดเห็น

หากคุณไม่สามารถลบไฟล์ .htaccess ได้ด้วยเหตุผลบางประการ ให้สร้างไฟล์ .htaccess เปล่าและแทนที่ด้วยไฟล์บนเซิร์ฟเวอร์

การสร้างไฟล์ด้วยpasswords.htpasswd

ไฟล์รหัสผ่านถูกสร้างขึ้นโดยยูทิลิตี้ htpasswd.exe หากคุณมีเซิร์ฟเวอร์ Apache WEB ติดตั้งอยู่ในเครื่องของคุณแล้ว ยูทิลิตี้นี้ตั้งอยู่ในไดเร็กทอรีที่ติดตั้งไว้ อาปาเช่-กินในไดเรกทอรีย่อย ถังขยะ.

ความคิดเห็น

หากคุณไม่ได้ติดตั้ง Apache คุณสามารถดาวน์โหลดยูทิลิตี้ htpasswd.exe ได้จากลิงค์:

ในการทำงานกับยูทิลิตี้ htpasswd.exe คุณต้องมีอินเทอร์เฟซบรรทัดคำสั่ง โปรแกรมเช่น Far, WindowsCommander ฯลฯ มีอินเทอร์เฟซบรรทัดคำสั่ง ที่นี่เราจะดูการทำงานกับบรรทัดคำสั่งโดยใช้ยูทิลิตี้ cmd ที่มาพร้อมกับ Windows 2000/XP เป็นต้น
คลิก "เริ่ม" -> "วิ่ง"ให้ป้อนในบรรทัดอินพุต คำสั่งและกด ตกลง. หน้าต่างยูทิลิตี้ CMD จะเปิดขึ้น

ข้าว. หน้าต่างยูทิลิตี้ CMD


ถัดไปคุณต้องไปที่ไดเร็กทอรีซึ่งมียูทิลิตี้ htpasswd.exe อยู่ สมมติว่าเซิร์ฟเวอร์ Apache ได้รับการติดตั้งในไดเร็กทอรี c:/Apache2 จากนั้นป้อนเข้าไป บรรทัดคำสั่งคำสั่ง: cd../../apache2/bin แล้วกด Enter


คุณได้ย้ายไปยังไดเร็กทอรีด้วย: Apache2in ตอนนี้คุณต้องให้คำสั่งเพื่อสร้างไฟล์ด้วยรหัสผ่าน พิมพ์ข้อมูลต่อไปนี้ลงในบรรทัดคำสั่ง:

Htpasswd -cm .htpasswd ผู้ดูแลระบบ

  • -cm เป็นสวิตช์สำหรับยูทิลิตี้ ปุ่ม c - ​​ระบุสิ่งที่ต้องสร้าง ไฟล์ใหม่ด้วยรหัสผ่าน หากมีไฟล์ชื่อเดียวกันนี้อยู่แล้ว ไฟล์นั้นจะถูกเขียนทับ คีย์ m - กำหนดการเข้ารหัสโดยใช้อัลกอริทึม MD5
    .htpasswd - ชื่อของไฟล์รหัสผ่าน (คุณสามารถใช้ชื่อใดก็ได้)
    ผู้ดูแลระบบ - ชื่อของผู้เข้าชมที่จะได้รับอนุญาตให้เข้าถึงพื้นที่หวงห้ามของไซต์

เพื่อเป็นการตอบสนอง คุณควรถูกขอให้ป้อนรหัสผ่านและทำซ้ำ หากทุกอย่างถูกต้องข้อความต่อไปนี้จะปรากฏขึ้นที่ท้าย: การเพิ่มรหัสผ่านสำหรับผู้ดูแลระบบผู้ใช้ และในไดเร็กทอรี c: Apache2in จะมีไฟล์ .htpasswd ซึ่งจะมีบรรทัดพร้อมชื่อผู้ใช้และรหัสแฮชของรหัสผ่านของเขา ในการเพิ่มผู้ใช้รายอื่นลงในไฟล์ .htpasswd เดียวกัน ให้ลบสวิตช์ -c ออกจากคำสั่งเรียกใช้ยูทิลิตี้ htpasswd.exe

Htpasswd -m .htpasswd ผู้ดูแลระบบ


ความคิดเห็น

หากไม่ได้สร้างไฟล์ที่มีรหัสผ่าน อาจเป็นไปได้ว่าคีย์ยูทิลิตีบางตัวไม่รองรับในไฟล์ของคุณ ระบบปฏิบัติการ. ตัวอย่างเช่น บางครั้งระบบไม่รองรับปุ่ม m ในกรณีนี้ คุณต้องป้อน htpasswd -c .htpasswd admin
หากต้องการดูคีย์และพารามิเตอร์ของยูทิลิตี้ ให้ป้อน htpasswd.exe /? คุณจะได้รับคำอธิบายของอินเทอร์เฟซ

ดังนั้นไฟล์รหัสผ่านจึงถูกสร้างขึ้น ตอนนี้คุณต้องเขียนใหม่บนเซิร์ฟเวอร์ ขอแนะนำอย่างยิ่งให้วางไฟล์ที่มีรหัสผ่านไว้เหนือไดเร็กทอรีรากของไซต์ ซึ่งผู้เยี่ยมชมจะไม่สามารถเข้าถึงได้
หากไม่สามารถทำได้ ไฟล์ที่มีรหัสผ่านจะต้องได้รับการปกป้อง ซึ่งสามารถทำได้โดยใช้ไฟล์ .htaccess เพื่อป้องกันไฟล์ด้วยรหัสผ่าน ให้สร้างไฟล์ตามบรรทัดที่แสดงในรายการต่อไปนี้

การป้องกันไฟล์.htpasswd


ปฏิเสธจากทั้งหมด

และวางไว้ในไดเร็กทอรีที่มีไฟล์รหัสผ่านของคุณอยู่ ขณะนี้ผู้เยี่ยมชมเว็บไซต์จะไม่สามารถเข้าถึงได้
ไฟล์รหัสผ่านถูกสร้างขึ้นและได้รับการป้องกันจากการเข้าถึงโดยไม่ได้รับอนุญาต ตอนนี้คุณต้องสร้างไฟล์ .htaccess ที่จะใช้ในไดเร็กทอรีที่ได้รับการป้องกัน

การสร้างไฟล์ .htaccess

คำสั่งต่อไปนี้สามารถใช้เพื่อปกป้องไดเร็กทอรี:

  • AuthType - ประเภทของการรับรองความถูกต้องที่จะใช้ สำหรับการรับรองความถูกต้องขั้นพื้นฐาน คำสั่งนี้จะต้องตั้งค่าเป็น: พื้นฐาน
    AuthName - ชื่อของขอบเขตการรับรองความถูกต้อง ข้อความที่ช่วยให้ผู้เข้าชมเข้าใจว่าพวกเขากำลังพยายามเข้าถึงที่ใด ตัวอย่างเช่น มันอาจจะเขียนว่า: "โซนส่วนตัว สำหรับผู้ดูแลระบบเท่านั้น!"
    AuthUserFile - พาธไปยังไฟล์รหัสผ่าน (.htpasswd)
    AuthGroupFile - พาธไปยังไฟล์กลุ่ม หากมีอยู่
    จำเป็น - ข้อกำหนดหนึ่งข้อขึ้นไปที่ต้องปฏิบัติตามเพื่อเข้าถึงพื้นที่หวงห้าม

ตัวอย่างไฟล์ .htaccess

AuthType พื้นฐาน



ต้องการผู้ดูแลกลุ่ม

คำสั่ง AuthUserFile และ AuthGroupFile ควรอธิบายโดยละเอียดเพิ่มเติม ประกอบด้วยเส้นทางที่แน่นอนไปยังไฟล์ที่เกี่ยวข้องจากรูทเซิร์ฟเวอร์

ความสนใจ!

เส้นทางสัมพัทธ์จะไม่ทำงาน!

คุณสามารถค้นหาเส้นทางจากรูทเซิร์ฟเวอร์ได้โดยสอบถามจากผู้ดูแลระบบเซิร์ฟเวอร์ หรือคุณสามารถลองค้นหาด้วยตนเอง เมื่อต้องการทำเช่นนี้ ให้เรียกใช้ฟังก์ชัน phpinfo() ตารางสีม่วงจะแสดงบนหน้าจอ สามารถดูค่าของเส้นทางสัมบูรณ์จากรูทเซิร์ฟเวอร์ได้ในตัวแปร: doc_root, open_basedir, DOCUMENT_ROOT
คำสั่ง Require กำหนดว่าใครได้รับอนุญาตให้เข้าถึงพื้นที่หวงห้าม ตัวอย่างเช่น,

  • ต้องการผู้ใช้ที่ถูกต้อง - อนุญาตให้ผู้ใช้ที่ตรวจสอบแล้วทั้งหมดเข้าถึงได้
  • ต้องการผู้ใช้ ผู้ดูแลระบบ alex mango - อนุญาตให้เข้าถึงเฉพาะผู้เยี่ยมชมที่มีชื่อผู้ดูแลระบบ alex, mango เท่านั้น โดยธรรมชาติแล้วจะต้องได้รับการรับรองความถูกต้อง
    AuthName "โซนส่วนตัว สำหรับผู้ดูแลระบบเท่านั้น!"
    AuthUserFile /usr/host/mysite/.htpasswd
    ต้องการผู้ใช้ที่ถูกต้อง

    เข้าถึงได้เฉพาะผู้ดูแลระบบและผู้ใช้รูทเท่านั้น

    AuthType พื้นฐาน
    AuthName "โซนส่วนตัว สำหรับผู้ดูแลระบบเท่านั้น!"
    AuthUserFile /usr/host/mysite/.htpasswd
    ต้องการรูทผู้ดูแลระบบของผู้ใช้

    เข้าถึงได้เฉพาะผู้ใช้จากกลุ่มผู้ดูแลระบบเท่านั้น

    AuthType พื้นฐาน
    AuthName "โซนส่วนตัว สำหรับผู้ดูแลระบบเท่านั้น!"
    AuthUserFile /usr/host/mysite/.htpasswd
    AuthGroupFile /usr/host/mysite/group
    ต้องการผู้ดูแลกลุ่ม

    ปฏิเสธการเข้าถึงเฉพาะไฟล์ private.zip


    AuthType พื้นฐาน
    AuthName "โซนส่วนตัว สำหรับผู้ดูแลระบบเท่านั้น!"
    AuthUserFile /usr/host/mysite/.htpasswd
    ต้องการผู้ใช้ที่ถูกต้อง