piping รหัสผ่านและความปลอดภัย


11

echo "secret" | mysql -u root -p ...บางครั้งที่ฉันทำ ตอนนี้ฉันกังวลเกี่ยวกับความปลอดภัยที่นี่: ใครบางคนสามารถแสดงรายการกระบวนการทั้งหมดเห็นรหัสผ่าน?

ในการตรวจสอบฉันลองด้วยecho "test" | sleep 1000และคำสั่ง echo กับความลับนั้นมองไม่เห็นในผลลัพธ์ของ "ps aux" ดังนั้นฉันคิดว่ามันปลอดภัย - แต่ผู้เชี่ยวชาญด้านความปลอดภัยสามารถยืนยันได้ไหม :)


ไม่เห็นในรายการกระบวนการเมื่อเรียกใช้การวนซ้ำไม่รู้จบ คำถามที่ดี.
ทิม

1
นอกจากนี้อย่าลืมว่าสิ่งที่คุณพิมพ์บนเชลล์ส่วนใหญ่จะถูกเก็บไว้ในไฟล์ประวัติบางแห่ง (เช่น.history)
Alexander Bird

คำตอบ:


13

คำตอบสำหรับสิ่งนี้ขึ้นอยู่กับว่าคุณใช้เชลล์ตัวไหน เปลือกหอยจำนวนมากมีechoเป็นbuiltinความหมายคำสั่งว่ามันไม่ได้วางไข่กระบวนการแยกและด้วยเหตุนี้จะไม่ปรากฏในรายชื่อกระบวนการ อย่างไรก็ตามถ้าคุณพิมพ์/bin/echoหรือ./echoหรือปิดการใช้งาน builtins ด้วยenable -n echoคำสั่งเชลล์จะไม่ใช้คำสั่ง builtin และจะใช้รุ่นไบนารีแทน สิ่งนี้จะปรากฏในรายการกระบวนการ

หากคุณใช้ไบนารีแทนที่จะเป็นเชลล์บิวด์อินคำสั่ง echo จะปรากฏขึ้นตราบใดที่มันใช้ในการย้ายข้อมูลไปยังบัฟเฟอร์ STDIN ของกระบวนการอื่น บัฟเฟอร์นี้มีขนาด จำกัด ดังนั้นหากมีข้อมูลมากกว่าที่จะใส่ลงในบัฟเฟอร์คำสั่ง echo จะต้องหยุดไปชั่วขณะหนึ่งจนกว่ากระบวนการอื่นจะสามารถอ่านข้อมูลบางส่วนจากบัฟเฟอร์ได้ สำหรับกรณีส่วนใหญ่ (เช่นสองตัวอย่างที่คุณให้ไว้ด้านบน) ช่วงเวลานี้จะเป็นไมโครวินาที หากคุณกำลังวางการถ่ายโอนข้อมูล SQL ขนาด 20MB ลงใน MySQL โดยใช้ echo สิ่งนี้อาจนานกว่านั้น ไม่ว่าเวลาจะสั้นแค่ไหนถ้าคุณใช้ไบนารี่แทนเชลล์บิวด์อินและใครบางคนเกิดขึ้นเพื่อให้ได้จังหวะที่ถูกต้องพวกเขาจะสามารถเห็นกระบวนการในรายการกระบวนการ

คุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยใส่ข้อมูลลับลงในไฟล์ (ด้วยสิทธิ์ที่เหมาะสม) และใช้ไฟล์เป็น STDIN ดังนี้:

mysql -u root -p < file_with_secret.sql

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

3

สำหรับกรณี mysql ~ / .my.cnf สามารถใช้เก็บความลับได้เช่น

[client]
user = DBUSERNAME
password = DBPASSWORD
host = DBSERVER

[mysql]
database = DBNAME

1

เพียงแค่ใช้

mysql -root -p

และกด Enter จากนั้นคุณจะได้รับพร้อมท์ให้ใส่รหัสผ่านและจะไม่สามารถมองเห็นได้ในรายการกระบวนการหรือไฟล์ประวัติ


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