ไม่แน่นอนคุณไม่สามารถทำเช่นนั้นได้ นี่จะเป็นจุดประสงค์ที่สำคัญของ 2FA เซิร์ฟเวอร์ของคุณต้องมีวิธีการยืนยันข้อมูลรับรองผู้ใช้และไม่ควรส่งข้อมูลนี้ผ่านเครือข่าย (เช่นคุณไม่สามารถใช้ไฟล์ client.ovpn เพียงอย่างเดียว)
แม้ว่าคุณไม่จำเป็นต้องสร้างผู้ใช้ unix แต่คุณต้องให้ผู้ใช้ของคุณติดตั้งรหัสยืนยันไปยังเซิร์ฟเวอร์ คุณสามารถใช้ sftp กับผู้ใช้เสมือนโดยใช้ใบรับรองที่ออกแล้ว https กับการอนุญาตฝั่งไคลเอ็นต์ (ซึ่งกันและกัน), CIFS (samba) หรือ ftp เก่าที่ดีพร้อมส่วนขยาย TLS หรือวิธีอื่นใดที่ทำให้เซิร์ฟเวอร์ทราบรหัสยืนยันที่ผู้ใช้สร้างขึ้น . ช่องทางการสื่อสารควรมีความปลอดภัย (เข้ารหัส || ท้องถิ่น)
โดยปกติหากผู้ใช้ของคุณอัปโหลดไฟล์ของตัวเองคุณจะไม่สามารถใช้ข้อมูลประจำตัวตามไฟล์รวมที่ใช้โดย openvpn-otp โชคดีที่เรามีตัวเลือกอื่น (และดีกว่า) โดยใช้โมดูลรักษาความปลอดภัยที่ยอดเยี่ยมของ linux pam
ก่อนอื่นคุณต้องรวบรวมไฟล์ผู้ใช้ที่สร้างโดย google-authenticator ในไดเรกทอรีโดยวิธีใดวิธีหนึ่งที่กล่าวถึงข้างต้น ในกรณีของเรามันจะเป็น / etc / google-auth
คุณต้องบังคับใช้ ID ผู้ใช้เดียวสำหรับไฟล์ทั้งหมดที่นี่เพราะคุณไม่มีผู้ใช้จริง ให้มันเป็นOpenVPN สิทธิ์จะต้องเป็น 0400 (-r --------) Pam ไม่ชอบข้อมูลประจำตัวที่สามารถอ่านได้ทั่วโลก / กลุ่ม (แน่นอน) คุณสามารถบังคับใช้สิ่งนี้ได้อย่างง่ายดายด้วย samba, apache, ftp หรือกรณีที่แย่ที่สุดโดยใช้แท็บ cron (ไม่แนะนำ)
สำหรับการทดสอบเพียงทำสิ่งนี้:
mkdir /etc/google-auth
apt-get install libpam-google-authenticator
google-authenticator
# set up as you wish, save image and/or codes
mv ~/.google_authenticator /etc/google-auth/some_username
chown -R openvpn /etc/google-auth
หลังจากนั้นคุณขอให้ openvpn ตรวจสอบสิทธิ์กับ libpam ซึ่งมีโมดูลการรับรองความถูกต้องของ Google ผนวกสิ่งนี้เข้ากับไฟล์เซิร์ฟเวอร์ openvpn ของคุณ:
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn
นี้กล่าวว่าเราจะใช้วิธีการตรวจสอบแพมกับแพมรับรองความถูกต้องรหัสOpenVPN
ตอนนี้สร้างการตั้งค่า pam สำหรับ openvpn แก้ไข /etc/pam.d/openvpn:
auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER} user=openvpn
account required pam_permit.so
ที่นี่เราบอกว่าหากไม่มีการรับรองความถูกต้องของ Google ที่ประสบความสำเร็จเราล้มเหลวทันที (จำเป็น) เรากำลังใช้ไฟล์ลับพิเศษแทนค่าเริ่มต้น $ HOME / .google_authenticator (secret =) และเราเข้าถึงไฟล์ในฐานะผู้ใช้ openvpn เนื่องจากไม่มีรหัสผู้ใช้จริง กับผู้ใช้ของเรา ในบรรทัดถัดไปเราเพียงแค่บอกว่าเราอนุญาตให้ทุกคนเชื่อมต่อหลังจากการตรวจสอบสิทธิ์สำเร็จ แน่นอนคุณควรใช้นโยบายการอนุญาตของคุณเองที่นี่ คุณสามารถควบคุมผู้ใช้ที่ได้รับอนุญาตโดยไฟล์ mysql db หรือ ldap ด้วยโมดูล pam ที่เกี่ยวข้อง
ผนวกสิ่งนี้เข้ากับไฟล์ไคลเอนต์ openvpn ของคุณ
auth-user-pass
auth-nocache
reneg-sec 0
เราใช้ auth-user-pass เพื่อให้ลูกค้า openvpn ถามชื่อผู้ใช้และรหัสผ่าน เราไม่ชอบแคช ("รหัสผ่าน" กำลังเปลี่ยนแปลง) และการเจรจาใหม่เป็นระยะ ๆ นั้นไม่ดีสำหรับเราด้วยเหตุผลเดียวกัน
หลังจากนั้นคุณจะสามารถเชื่อมต่อได้โดยไม่ต้อง openvpn-otp โปรดพิจารณาว่านี่เป็นวิธีที่ยืดหยุ่นกว่าเนื่องจากคุณสามารถใช้กฎที่ซับซ้อนมากในไฟล์ควบคุม pam หากคุณต้องการ คุณสามารถเปิด / ปิดการใช้งานผู้ใช้ตามไดเรกทอรี mysql หรือ ldap ของคุณโดยไม่ต้องแตะใบรับรองดังกล่าว