ผู้ใช้ linux สามารถเปลี่ยนรหัสผ่านโดยไม่ทราบรหัสผ่านปัจจุบันได้หรือไม่?


25

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

อย่างไรก็ตามผู้ใช้ควรมีsudoสิทธิ์พิเศษด้วยซึ่งโดยปกติแล้วจะต้องใช้รหัสผ่าน

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



@sr - ไม่ได้มีลักษณะเช่นนี้เป็นวิธีหลักในการทำมัน ...
CWD

ทำไมคุณต้องการให้ผู้ใช้ของคุณมี sudo priveleges ฉันหวังว่าคุณจะทราบว่าคุณให้สิทธิ์การเข้าถึงรูทโดยสิ่งนี้ อาจมีโอกาสที่จะลงทุนในบางครั้งและอนุญาตให้ใช้ชุดคำสั่งย่อยที่เกี่ยวข้องกับ sudo เท่านั้น (ซึ่งอาจไม่ปลอดภัยน้อยกว่า) ไปman sudoersจะให้ข้อมูลเกี่ยวกับการมีคำสั่งบางอย่างสามารถทำงานกับ sudo โดยไม่ต้องใช้รหัสผ่านของผู้ใช้เลย คุณสามารถเพิ่ม shellscript ใน / etc / sudoers ซึ่งจะอนุญาตการตั้งค่า "self-password" ต่อผู้ใช้โดยไม่ต้องใช้รหัสผ่านก่อนหน้า
humanityANDpeace

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

คำตอบ:


21

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

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

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

คุณสามารถปิดใช้งานการรับรองความถูกต้องของรหัสผ่านที่เลือก ในสถานการณ์ของคุณคุณจะปิดการใช้งานการตรวจสอบรหัสผ่านใน ssh และอาจเป็นในบริการอื่น ๆ บริการส่วนใหญ่เกี่ยวกับ Unices ที่ทันสมัยที่สุด (รวมถึง Ubuntu) ใช้PAMเพื่อกำหนดค่าวิธีการตรวจสอบสิทธิ์ บน Ubuntu แฟ้มการกำหนดค่า PAM /etc/pam.dอาศัยอยู่ใน การตรวจสอบรหัสผ่านปิดการแสดงความคิดเห็นออกมาในแนวauth … pam_unix.so /etc/pam.d/common-authนอกจากนี้ให้แน่ใจว่าคุณมีPasswordAuthentication noใน/etc/ssh/sshd_configการปิดการใช้งาน sshd ของในตัวตรวจสอบรหัสผ่าน

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


หนึ่งในวิธีที่สะดวกในการใช้ PAM ร่วมกับการตรวจสอบคีย์ SSH ผ่านpam_ssh_agent_authซึ่งมีความได้เปรียบในการเปลี่ยนรหัสผ่านพรอมต์โดย (ในทางทฤษฎีมีความปลอดภัยมากขึ้น) การตรวจสอบคีย์ SSH สามารถใช้ต่อไป
โทเบียส KIENZLER

ดังนั้นคุณกำลังบอกว่าsudo passwdจะเปลี่ยนรหัสผ่านสำหรับผู้ใช้ปัจจุบันไม่ใช่สำหรับผู้ใช้ sudo?
still_dreaming_1

1
@ still_dreaming_1 ไม่ฉันกำลังบอกว่าผู้ใช้ที่สามารถเรียกใช้คำสั่งด้วยsudoสามารถเปลี่ยนรหัสผ่านของตนเองได้ คำสั่งที่แน่นอนนั้นไม่สำคัญจริงๆ แต่หากต้องการรายละเอียดที่มากกว่านี้ก็จะเป็นsudo passwd bobที่ที่bobชื่อของผู้ใช้หรือสิ่งที่เทียบเท่า ไม่มีข้อโต้แย้งsudo passwdแน่นอนจะเปลี่ยนรหัสผ่านสำหรับรูต
Gilles 'หยุดความชั่วร้าย'

7

คุณสามารถใช้โมดูลpam_ssh_agent_auth มันค่อนข้างง่ายในการคอมไพล์แล้วเพิ่มรายการ

auth       sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys

ก่อนรายการอื่น ๆauth(หรือinclude) ใน/etc/pam.d/sudo

และ

Defaults    env_keep += "SSH_AUTH_SOCK"

ถึง/etc/sudoers(ผ่านvisudo)

ตอนนี้ผู้ใช้ทุกคนสามารถตรวจสอบsudoผ่านตัวแทน SSH (ส่งต่อหรือท้องถิ่น) หรือรหัสผ่านของพวกเขา อาจเป็นการดีที่ขอให้ผู้ใช้ของคุณใช้อย่างน้อยการโทรssh-add -cแต่ละครั้งsudoจะต้องมีการยืนยัน


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

1

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

โดยทั่วไปคุณทำสิ่งต่อไปนี้:

$ sudo -i

ตอนนี้เราเป็นราก เราสามารถเข้าถึงทุกสิ่ง

# passwd $username

$ ชื่อผู้ใช้สามารถเป็นชื่อผู้ใช้ของใครก็ได้

ป้อนรหัสผ่าน UNIX ใหม่:

พิมพ์รหัสผ่าน UNIX ใหม่อีกครั้ง: passwd: รหัสผ่านถูกอัพเดตสำเร็จ

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


ดูดี แต่คุณสามารถอธิบายเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้นที่นี่?
cwd

4
ไม่สามารถทำได้sudo -iหากไม่มีรหัสผ่านผู้ใช้ปัจจุบัน
kravemir

@Miro มันเป็นอย่างที่คุณพูด ยังคงsudo bashสามารถเป็นรหัสผ่านได้เนื่องจากการตั้งค่านั้นใน/etc/sudoersไฟล์ ฉันคิดว่า @jrg ดังที่ได้กล่าวไปแล้วว่าให้ความสำคัญกับประเด็นความไม่มั่นคงกับ sudo มากขึ้น
humanityANDpeace

1
โดยสุจริตคุณไม่ต้องทำsudo -iคุณสามารถข้ามไปที่sudo passwd $username@Miro ได้โดยตรงคุณไม่จำเป็นต้องรู้รหัสผ่านผู้ใช้ปัจจุบัน คุณจำเป็นต้องรู้รหัสผ่าน root กับการใช้ sudo
แอนโทนี

0

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

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


0
#% useradd -g somegroup someuser
#% usermod -p "" someuser
#% chage -d 0 someuser
#% sed -i "s/^.*PasswordAuthentication .*/PasswordAuthentication no/" /etc/sshd/sshd_config
#% /sbin/service sshd restart
#% cp -r ~/.ssh `echo ~someuser`
#% chown -R someuser `echo ~someuser`/.ssh
#% chgrp -R somegroup `echo ~someuser`/.ssh
#% echo "%somegroup  ALL=(ALL)   ALL" >> /etc/sudoers

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.