Câu hỏi Tôi vô tình gõ mật khẩu vào dòng lệnh bash


Tôi vô tình gõ mật khẩu vào dòng lệnh bash, nhầm lẫn Last login: ... dòng cho Wrong password (Tôi đã vội). Tôi phải làm gì để che dấu vết của mình?

Những gì tôi đã làm là chỉnh sửa .bash_history và xóa các dòng vi phạm (đã phải relogin một lần để xem mật khẩu xuất hiện trong tập tin để tôi có thể xóa nó, và relogin một lần nữa để xem nó biến mất khỏi lịch sử có sẵn theo phím UPARROW).

Có nơi nào khác mà lịch sử lệnh có thể được lưu không? Hệ thống này là CentOS 6.5.


179
2018-04-02 06:42


gốc


Chỉ cần thay đổi mật khẩu :) - gronostaj
Thay đổi mật khẩu không đơn giản như vậy ... Tôi cần yêu cầu quản trị viên cài đặt lại khóa công khai mới của tôi trên 15 máy chủ khác nhau - và anh ấy giống như /dev/null. - MaDa
Nếu bạn không thể thay đổi mật khẩu của mình một cách dễ dàng bất cứ lúc nào, thì bạn có thể có lỗ hổng bảo mật nghiêm trọng. Bạn sẽ làm gì khi ai đó thực sự nhận được mật khẩu của bạn? Bạn có bất kỳ phương tiện nào để thu hồi quyền truy cập hệ thống ngay lập tức không? - gronostaj
Bạn có thể thay đổi cụm mật khẩu của khóa ssh mà không thay đổi khóa: ssh-keygen -f id_rsa -p. - jwg
Chỉ cần thả vào để đề cập đến, ít nhất là dưới đăng nhập Windows mạng, bạn đang hosed. Các admin (trong một số tháp máy chủ cao cả) mặc định là để ghi lại tất cả các nỗ lực đăng nhập, và tất nhiên tên người dùng là cleartext. Tất cả một số người đáng sợ phải làm là tìm kiếm các chuỗi không phải tên người dùng-ish và tương quan chúng với tên người dùng hợp lệ tiếp theo (hoặc lần đăng nhập tiếp theo trên cùng một máy). Và không có cách nào đơn giản để xóa tệp nhật ký quản trị đó. Vì vậy, ya thực sự phải thay đổi mật khẩu của bạn. - Carl Witthoft


Các câu trả lời:


Bạn chỉ có thể xóa dòng vi phạm khỏi bashlịch sử, thay vì xóa toàn bộ lịch sử. Đơn giản chỉ cần loại bỏ các dòng với -d gắn cờ, sau đó lưu (viết) lịch sử mới bằng -w cờ:

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

174
2018-04-02 12:25



Lưu ý rằng điều này không hoạt động nếu bạn đã đặt "PROMPT_COMMAND = history -a". Với điều này tại chỗ lệnh với mật khẩu của bạn ngay lập tức được ghi vào .bash_history của bạn khi lời nhắc được hiển thị sau khi lệnh chấm dứt. Bạn sẽ phải chỉnh sửa .bash_history của mình để xóa nó. - benrifkah


Có hai phần này:

  • bash lưu trữ lịch sử trong một tệp ~/.bash_history theo mặc định, được ghi vào cuối phiên
  • các history được lưu trong bộ nhớ

Để an toàn, bạn cần xóa nó khỏi phiên:

history -c

và cắt bớt tệp lịch sử khi cần:

> ~/.bash_history

Nếu phiên của bạn mà bạn đã nhập mật khẩu vẫn mở, thì một cách khác để che dấu vết của bạn là đặt HISTFILE biến thành thiết bị null để lịch sử sẽ không được ghi vào ~/.bash_history khi phiên thoát:

export HISTFILE=/dev/null

120
2018-04-02 07:17



Hey, đó là quản trị viên! - Raystafarian
Pun không có ý định, xin lỗi :) Tôi đã không nhìn vào nick của bạn khi tôi đang viết bình luận của tôi. - MaDa
Để được hoang tưởng (và vì lý do nào đó vẫn không thay đổi mật khẩu của bạn) không phải bạn shred các tập tin hoặc ghi đè lên nó nhiều lần? - kojiro
@MaDa Không sao cả. Tôi thậm chí còn thêm một cách khác trong câu trả lời để đưa nick của tôi vào bức tranh. - devnull
Cài đặt HISTFILE= Là đủ. Từ bash(1): Nếu không được đặt, lịch sử lệnh sẽ không được lưu khi một trình bao thoát. - Lekensteyn


Vì bash (ít nhất là tất cả các phiên bản hiện tại và lịch sử mà tôi biết) không tự động lưu lịch sử cho đến khi bạn thoát ra, một chiến lược áp dụng chung khi bạn đã gõ lệnh mà bạn muốn đảm bảo không bao giờ được lưu là gõ ngay:

kill -9 $$

Điều này giết chết vỏ với SIGKILL, không thể bị bắt, vì vậy vỏ không có cách nào để cứu bất cứ thứ gì khi thoát.

Hầu hết các phương pháp tiếp cận khác liên quan đến chà sau khi thực tế (tức là sau khi dữ liệu đã nhấn đĩa), có nhiều cơ hội hơn cho lỗi (thiếu bản sao), đặc biệt nếu hệ thống có thể đang sử dụng btrfs hoặc tương tự.


23
2018-04-02 16:20



+1, không chỉ có nhiều lỗi hơn, có thể thậm chí có thể phục hồi tùy thuộc vào / có bao nhiêu lệnh được thực hiện sau nó - Cruncher
Thiếu từ "tự động"? Bởi vì dotancohen đã cho thấy một cách để lưu lịch sử mà không thoát khỏi vỏ. - Ben Voigt
Shell có thể được cấu hình để lưu lịch sử sau khi mỗi lệnh được thực hiện, thay vì ở lối ra. - Kundor
+1 Đây chính xác là những gì tôi muốn giới thiệu! ngoài ra rm ~/.bash_history~ để loại bỏ các tập tin sao lưu trong trường hợp của OP khi nó đã được lưu - Tomas
Lưu ý rằng điều này không hoạt động nếu bạn đã đặt "PROMPT_COMMAND = history -a". Với điều này tại chỗ lệnh với mật khẩu của bạn ngay lập tức được ghi vào .bash_history của bạn khi lời nhắc được hiển thị sau khi lệnh chấm dứt. Bạn sẽ phải chỉnh sửa .bash_history của mình để xóa nó. - benrifkah


Sau khi bạn vô tình gõ một cái gì đó mà bạn không muốn lưu trữ trong lịch sử, bạn có thể gõ: unset HISTFILE

Bash sẽ không biết nơi lưu trữ lịch sử khi bạn đang đăng xuất, vì vậy điều này sẽ vô hiệu hóa việc ghi nhật ký lịch sử cho toàn bộ phiên.


11
2018-04-02 18:51



Lưu ý rằng điều này không hoạt động nếu bạn đã đặt "PROMPT_COMMAND = history -a". Với điều này tại chỗ lệnh với mật khẩu của bạn ngay lập tức được ghi vào .bash_history của bạn khi lời nhắc được hiển thị sau khi lệnh chấm dứt. Bạn sẽ phải chỉnh sửa .bash_history của mình để xóa nó. - benrifkah


Bí quyết yêu thích của tôi cho việc này là nhấn mũi tên lên, lùi lại trên lệnh, nhập thứ gì đó (có thể không cần thiết), nhấn mũi tên xuống, nhập "ls" và nhấn enter. Cảm thấy thực sự hokey, nhưng nó thực sự hoạt động. Tìm thấy điều này khi tôi cảm thấy khó chịu sau khi chỉnh sửa lệnh sai trong lịch sử của tôi và sau đó hủy hoại nó bằng cách không nhấn ctrl-c để hủy bỏ chỉnh sửa. Tôi đoán bash hỗ trợ lịch sử sửa đổi. ;-)

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

Giống như:

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

10
2018-04-03 20:58



Đó là kỳ dị. Một bất lợi là có vẻ như bạn biết lịch sử chỉnh sửa, vì vậy có thể có một số cách để khôi phục phiên bản cũ? - MadTux
@MadTux - Hoàn toàn, nhưng .bash_history chỉ là một tệp văn bản thuần túy. Vì vậy, bạn có thể làm ví dụ trên, thoát và kết nối lại. Khi bạn xem toàn bộ nội dung của tệp .bash_history, sẽ không có gì khác biệt nếu bạn vừa chạy "cd", vì vậy đường dẫn sẽ sạch. - Mark Jerde
Lưu ý rằng điều này không hoạt động nếu bạn đã đặt "PROMPT_COMMAND = history -a". Với điều này tại chỗ lệnh với mật khẩu của bạn ngay lập tức được ghi vào .bash_history của bạn khi lời nhắc được hiển thị sau khi lệnh chấm dứt. Bạn sẽ phải chỉnh sửa .bash_history của mình để xóa nó. - benrifkah


Bổ sung cho các câu trả lời khác, nó có thể có liên quan đến mật khẩu cũng được tìm thấy trong bộ đệm cuộn thiết bị đầu cuối - lịch sử của văn bản được hiển thị - bây giờ, và nhiều vấn đề hơn, có thể trên đĩa cứng, nếu trình mô phỏng thiết bị đầu cuối đã lưu lịch sử vào đĩa. Điều này xảy ra trong KDE konsole nó kích thước lịch sử được thiết lập để "scrollback không giới hạn", để không bao giờ loại bỏ bất kỳ đầu ra.


10
2018-04-03 19:58





Với $<space> command, một lệnh không được thêm vào lịch sử, đôi khi hữu ích

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

5
2018-04-02 14:07



Trong khi thú vị, nó không rõ ràng như thế nào là hữu ích trong kịch bản mô tả. Bạn có gợi ý rằng mọi mật khẩu nên bắt đầu bằng một không gian? - Ben Voigt
Không, những gì anh ta gợi ý là với điều này tại chỗ, bất kỳ dòng bạn gõ mà bạn không muốn cam kết với lịch sử, nên được gõ ra với một không gian hàng đầu. ví dụ: "ls" trở thành "ls" và dòng đó không bao giờ hiển thị trong lịch sử hoặc trong danh sách lên-mũi tên phiên của bạn. - Bryan C.
Lưu ý rằng thủ thuật không gian hàng đầu này chỉ hoạt động nếu $ HISTCONTROL chứa vùng bỏ qua. - Bernd Jendrissek
@ jris198944 Cung cấp mật khẩu thông qua một đối số dòng lệnh có khả năng hiển thị nó cho bất kỳ ai trên hệ thống đang chạy ps. - jamesdlin
Và dù sao, trong khi mẹo này rất hữu ích nếu bạn đang lập kế hoạch trước, điều này không giúp kịch bản gốc nơi ai đó vô tình đã nhập mật khẩu trên dòng lệnh. - jamesdlin