ฉันพิมพ์รหัสผ่านโดยไม่ตั้งใจลงในบรรทัดคำสั่ง bash


189

ฉันตั้งใจพิมพ์รหัสผ่านของฉันเป็นบรรทัดคำสั่งทุบตีเข้าใจผิดLast login: ...สายWrong password(ผมอยู่ในรีบร้อน) ฉันจะทำอย่างไรเพื่อปกปิดร่องรอยของฉัน

สิ่งที่ฉันทำคือการแก้ไข.bash_historyและลบบรรทัดที่ละเมิด (ต้องทำการ relogin อีกครั้งเพื่อดูรหัสผ่านปรากฏในไฟล์เพื่อให้ฉันสามารถลบได้และ relogin อีกครั้งเพื่อดูว่ามันหายไปจากประวัติที่มีอยู่ภายใต้คีย์ UPARROW)

มีสถานที่อื่นที่สามารถบันทึกประวัติคำสั่งได้หรือไม่? ระบบคือ CentOS 6.5


59
เพียงแค่เปลี่ยนรหัสผ่าน :)
gronostaj

96
การเปลี่ยนรหัสผ่านนั้นไม่ง่ายเลย ... ฉันต้องขอให้ผู้ดูแลระบบติดตั้งกุญแจสาธารณะใหม่ของฉันบนเซิร์ฟเวอร์ที่แตกต่างกัน 15 เครื่อง - และผู้ชายก็เหมือน/dev/nullกัน
MaDa

71
หากคุณไม่สามารถเปลี่ยนรหัสผ่านได้อย่างง่ายดายทุกเวลาคุณอาจมีช่องโหว่ด้านความปลอดภัยที่ร้ายแรง คุณจะทำอย่างไรเมื่อมีคนรับรหัสผ่านของคุณจริง? คุณมีวิธีการใด ๆ ที่จะเพิกถอนการเข้าถึงระบบทันทีหรือไม่?
gronostaj

42
คุณสามารถเปลี่ยนข้อความรหัสผ่านของคีย์ SSH ssh-keygen -f id_rsa -pโดยไม่มีการเปลี่ยนแปลงที่สำคัญ:
jwg

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

คำตอบ:


184

คุณสามารถลบเส้นที่กระทำผิดออกจากbashประวัติของแทนที่จะล้างประวัติทั้งหมด เพียงลบบรรทัดด้วย-dแฟล็กจากนั้นบันทึก (เขียน) ประวัติใหม่ด้วย-wแฟล็ก:

$ history
351 ssh me@site.com
352 my_password
$ history -d 352
$ history -w

1
โปรดทราบว่าสิ่งนี้จะไม่ทำงานหากคุณตั้งค่า "PROMPT_COMMAND = history -a" ด้วยวิธีนี้ในสถานที่คำสั่งด้วยรหัสผ่านของคุณจะถูกเขียนไปยัง. bash_history ของคุณทันทีเมื่อพรอมต์จะปรากฏขึ้นหลังจากที่คำสั่งยุติลง คุณจะต้องแก้ไข. bash_history ของคุณเพื่อลบออก
benrifkah

1
โปรดทราบด้วยว่าหากบรรทัดถูกเขียนในไฟล์โฮสต์และหลังจากนั้นมีการเปิดเชลล์จำนวนมาก (เทอร์มินัล windows) เชลล์เหล่านั้นทั้งหมดจะมีอยู่ในประวัติ! คุณจะต้องลบมันออกจากเชลล์เหล่านั้นทั้งหมดหรืออย่างน้อยก็จากเชลล์สุดท้ายที่คุณปิด! ดีกว่าที่จะรับมันก่อนเชลล์ที่ใช้มันมีอยู่ ประวัติความเป็นมาเมื่อต้องรับมือกับกระสุนหลายนัดอาจกลายเป็นฝันร้าย
anthony

121

มีสองส่วนดังนี้:

  • bashเก็บประวัติในไฟล์~/.bash_historyซึ่งโดยปกติแล้วจะถูกเขียนไปที่ท้ายเซสชั่น
  • historyที่จะถูกเก็บไว้ในหน่วยความจำ

เพื่อความปลอดภัยคุณต้องล้างมันออกจากเซสชัน:

history -c

และตัดทอนไฟล์ประวัติตามต้องการ:

> ~/.bash_history

หากเซสชันของคุณที่คุณพิมพ์รหัสผ่านยังคงเปิดอยู่วิธีอื่นที่จะครอบคลุมการติดตามของคุณคือการตั้งค่าHISTFILEตัวแปรเป็นอุปกรณ์ null เพื่อไม่ให้เขียนประวัติลงใน~/.bash_historyขณะที่ออกจากเซสชัน:

export HISTFILE=/dev/null

205
เฮ้มันเป็นผู้ดูแลระบบ!
Raystafarian

5
เล่นสำนวนไม่ได้ตั้งใจขอโทษ :) ฉันไม่ได้มองนิคของคุณเมื่อฉันเขียนความคิดเห็นของฉัน
MaDa

7
การเป็นคนหวาดระแวง (แต่ด้วยเหตุผลบางอย่างที่ยังไม่เปลี่ยนรหัสผ่าน) คุณไม่ควรshredไฟล์หรือเขียนทับมันหลายครั้ง?
kojiro

1
@MaDa ไม่มีปัญหา ฉันยังเพิ่มอีกวิธีหนึ่งในคำตอบเพื่อนำนิคของฉันไปสู่รูปภาพ
devnull

5
การตั้งค่าHISTFILE=ก็เพียงพอแล้ว จากbash(1): หากไม่ได้ตั้งค่าประวัติคำสั่งจะไม่ถูกบันทึกเมื่อเชลล์ออก
Lekensteyn

23

เนื่องจากทุบตี (อย่างน้อยรุ่นประวัติศาสตร์และปัจจุบันทั้งหมดที่ฉันทราบ) จะไม่บันทึกประวัติโดยอัตโนมัติจนกว่าคุณจะออกจึงเป็นกลยุทธ์ที่ใช้งานได้โดยทั่วไปเมื่อคุณพิมพ์คำสั่งที่คุณต้องการให้แน่ใจว่าไม่เคยได้รับการบันทึกคือพิมพ์ทันที:

kill -9 $$

การทำเช่นนี้จะฆ่าเชลล์ด้วยSIGKILLซึ่งไม่สามารถจับได้ดังนั้นเชลล์จึงไม่มีวิธีบันทึกสิ่งใดเมื่อออก

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


2
+1 ไม่ได้เป็นเพียงโอกาสมากขึ้นของข้อผิดพลาดก็อาจแม้สามารถกู้คืนได้ขึ้นอยู่กับว่า / วิธีการหลายคำสั่งที่กำลังดำเนินการหลังจากที่มัน
Cruncher

คำที่หายไป "อัตโนมัติ" หรือไม่ เนื่องจาก dotancohen แสดงวิธีบันทึกประวัติโดยไม่ต้องออกจากเชลล์
Ben Voigt

3
เชลล์สามารถกำหนดค่าให้บันทึกประวัติหลังจากเรียกใช้งานแต่ละคำสั่งแทนที่จะเป็นเมื่อออกจากระบบ
Nick Matteo

1
+1 นี่คือสิ่งที่ฉันอยากจะแนะนำ! นอกจากนี้rm ~/.bash_history~จะลบไฟล์สำรองในเคสของ OP เมื่อมันถูกบันทึกไว้แล้ว
โทมัส

โปรดทราบว่าสิ่งนี้จะไม่ทำงานหากคุณตั้งค่า "PROMPT_COMMAND = history -a" ด้วยวิธีนี้ในสถานที่คำสั่งด้วยรหัสผ่านของคุณจะถูกเขียนไปยัง. bash_history ของคุณทันทีเมื่อพรอมต์จะปรากฏขึ้นหลังจากที่คำสั่งยุติลง คุณจะต้องแก้ไข. bash_history ของคุณเพื่อลบออก
benrifkah

11

หลังจากคุณพิมพ์สิ่งที่คุณไม่ต้องการเก็บไว้ในประวัติโดยไม่ตั้งใจคุณสามารถพิมพ์: unset HISTFILE

Bash จะไม่ทราบว่าจะเก็บประวัติเมื่อคุณออกจากระบบได้อย่างมีประสิทธิภาพซึ่งจะปิดใช้งานการบันทึกประวัติสำหรับเซสชันทั้งหมด


โปรดทราบว่าสิ่งนี้จะไม่ทำงานหากคุณตั้งค่า "PROMPT_COMMAND = history -a" ด้วยวิธีนี้ในสถานที่คำสั่งด้วยรหัสผ่านของคุณจะถูกเขียนไปยัง. bash_history ของคุณทันทีเมื่อพรอมต์จะปรากฏขึ้นหลังจากที่คำสั่งยุติลง คุณจะต้องแก้ไข. bash_history ของคุณเพื่อลบออก
benrifkah

11

เคล็ดลับที่ฉันโปรดปรานสำหรับสิ่งนี้คือกดลูกศรขึ้นถอยกลับเหนือคำสั่งพิมพ์บางสิ่ง (อาจไม่จำเป็น) กดลูกศรลงพิมพ์ "ls" และกด Enter รู้สึกว่า hokey จริงๆ แต่มันใช้งานได้จริง พบสิ่งนี้เมื่อฉันรู้สึกรำคาญหลังจากแก้ไขคำสั่งที่ไม่ถูกต้องในประวัติของฉันและทำลายมันโดยไม่กดปุ่ม ctrl-c เพื่อยกเลิกการแก้ไข ฉันเดาว่าทุบตีสนับสนุนประวัติผู้ปรับปรุงใหม่ ;-)

$ passw0rd
$ <up arrow><backspace x8>cd<down arrow>echo hi
$ history|tail -3

ดูเหมือนกับ:

$ passw0rd
passw0rd: command not found
$ echo hi
hi
$ history|tail -3
 2445* cd
 2446  echo hi
 2447  history|tail -3
$ 

นั่นเป็นที่แปลก ข้อเสียอย่างหนึ่งคือดูเหมือนว่าคุณรู้จักการแก้ไขประวัติดังนั้นอาจมีวิธีกู้คืนเวอร์ชันเก่าหรือไม่?
MadTux

@MadTux - ทั้งหมด แต่. bash_history เป็นเพียงไฟล์ข้อความธรรมดา ดังนั้นคุณสามารถทำตัวอย่างด้านบนออกและเชื่อมต่อใหม่ได้ เมื่อคุณดูเนื้อหาทั้งหมดของไฟล์. bash_history ไม่มีสิ่งใดที่แตกต่างจากไฟล์ถ้าคุณเพิ่งเรียกใช้ "cd" ดังนั้นเส้นทางจึงสะอาด
Mark Jerde

โปรดทราบว่าสิ่งนี้จะไม่ทำงานหากคุณตั้งค่า "PROMPT_COMMAND = history -a" ด้วยวิธีนี้ในสถานที่คำสั่งด้วยรหัสผ่านของคุณจะถูกเขียนไปยัง. bash_history ของคุณทันทีเมื่อพรอมต์จะปรากฏขึ้นหลังจากที่คำสั่งยุติลง คุณจะต้องแก้ไข. bash_history ของคุณเพื่อลบออก
benrifkah

10

นอกเหนือจากคำตอบอื่น ๆ แล้วอาจเกี่ยวข้องกับรหัสผ่านที่พบในบัฟเฟอร์เลื่อนเทอร์มินัล - ประวัติของข้อความที่แสดง - ตอนนี้และปัญหาอื่น ๆ ที่อาจเกิดขึ้นบนฮาร์ดดิสก์หากตัวจำลองเทอร์มินัลบันทึก ประวัติของดิสก์ สิ่งนี้เกิดขึ้นใน KDE konsole ขนาดประวัติถูกตั้งค่าเป็น "scrollback ไม่ จำกัด " เพื่อไม่ทิ้งผลลัพธ์ใด ๆ


6

ด้วย$<space> commandคำสั่งจะไม่ถูกเพิ่มลงในประวัติซึ่งบางครั้งก็เป็นประโยชน์

$  history | grep mywierdgrep
$ history | grep mywierdgrep
 2005  history | grep mywierdgrep

2
ในขณะที่น่าสนใจมันไม่ชัดเจนว่ามันมีประโยชน์ในสถานการณ์ที่อธิบาย คุณแนะนำให้ทุกรหัสผ่านควรเริ่มต้นด้วยช่องว่างหรือไม่?
Ben Voigt

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

4
โปรดทราบว่าเคล็ดลับพื้นที่ชั้นนำนี้จะทำงานเฉพาะในกรณีที่ $ HISTCONTROL มีการเพิกเฉย
Bernd Jendrissek

2
@ jris198944 psให้รหัสผ่านผ่านอาร์กิวเมนต์บรรทัดคำสั่งอาจจะเปิดเผยให้ใครบนระบบที่ทำงาน
jamesdlin

2
และต่อไปในขณะที่เคล็ดลับนี้จะเป็นประโยชน์ถ้าคุณกำลังวางแผนไปข้างหน้านี้ไม่ได้ช่วยให้สถานการณ์เดิมที่มีคนตั้งใจป้อนรหัสผ่านบนบรรทัดคำสั่ง
jamesdlin

4

อีกวิธีหนึ่งในการหลีกเลี่ยงการบันทึกลงในไฟล์ประวัติ (ก่อนที่คุณจะออกจากระบบ) เป็นเพียงการ

chmod 400 ~/.bash_history 

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

เข้าสู่ระบบอีกครั้งและรีเซ็ตสิทธิ์เป็น600(หรือไม่ขึ้นอยู่กับว่าคุณเป็นคนหวาดระแวง!)


1

ฉันเห็นพูดถึงซ้ำ ๆ

โปรดทราบว่านี่ไม่ได้ผลหากคุณตั้งค่า "PROMPT_COMMAND = history -a" [.. ] คุณจะต้องแก้ไข. bash_history ของคุณเพื่อลบออก

ส่วนแรกเป็นจริงแน่นอน แต่คุณไม่ต้องใช้การแก้ไข. bash_history ด้วยตนเองเพื่อแก้ไข หากคุณรวมสองคำสั่งในหนึ่งบรรทัดมันทำงานได้อย่างสมบูรณ์แบบ:

$ history
351 ssh me@site.com
352 my_password
$ history -d 352 ; history -w

คุณช่วยอธิบายว่าอะไรที่ทำให้วิธีนี้ใช้งานได้จริง
Kamil Maciorowski

PROMPT_COMMAND ดำเนินการก่อนที่จะแสดงพรอมต์คำสั่งถัดไป ปัญหาของการป้อนคำสั่ง -d และ -w บนบรรทัดที่แยกจากกันคือ PROMPT_COMMAND จะดำเนินการคำสั่ง history -a ในระหว่างนี้ หากคุณดำเนินการทั้ง -d และ -w ในหนึ่งบรรทัดคำสั่งจะดำเนินการในภายหลังเท่านั้น
Floris Kruisselbrink

0

คำตอบจำนวนมากที่นี่พยายามลบคำสั่งที่เป็นปัญหาจากประวัติของเซสชันทุบตีไม่ได้ถูกเขียนไปที่$HISTFILE(~ / .bash_history เป็นค่าเริ่มต้น) อย่างไรก็ตามหากคุณตั้งค่าPROMPT_COMMAND=history -a คำสั่งด้วยรหัสผ่านของคุณจะถูกเขียนไปยังของคุณทันที$HISTFILEเมื่อพรอมต์จะปรากฏขึ้นหลังจากที่คำสั่งยุติลง คุณจะต้องแก้ไข$HISTFILEเพื่อลบมัน

การตั้งค่านี้เป็นที่นิยมใช้ในการแทรกคำสั่งจากหลายการประชุมเปิดทุบตี


-3

คุณจะต้องตรวจสอบบันทึก syslog ด้วย การเข้าสู่ระบบที่ไม่ถูกต้องโดยทั่วไปจะถูกบันทึกไว้ใน syslog

/ var / log / ข้อความหรือเทียบเท่าสำหรับระบบปฏิบัติการของคุณ


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