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


189

Tôi vô tình gõ mật khẩu của mình vào dòng lệnh bash, nhầm Last login: ...dòng này Wrong password(tôi đang 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_historyvà xóa dòng vi phạm (phải đăng nhập lại một lần để thấy mật khẩu xuất hiện trong tệp để tôi có thể xóa nó và đăng nhập lại để thấy nó biến mất khỏi lịch sử có sẵn dưới phím UPARWAY).

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


59
Chỉ cần thay đổi mật khẩu :)
gronostaj

96
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 chàng cũng như vậy /dev/null.
MaDa

71
Nếu bạn không thể thay đổi mật khẩu dễ dàng bất cứ lúc nào, thì bạn có thể có một lỗ hổng bảo mật nghiêm trọng. Bạn sẽ làm gì khi ai đó thực sự lấy được mật khẩu của bạn? Bạn có bất kỳ phương tiện để thu hồi quyền truy cập hệ thống ngay lập tức?
gronostaj

42
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

6
Chỉ cần ghé vào để đề cập rằng, ít nhất là theo thông tin đăng nhập Windows được nối mạng, bạn đã bị lừa. Quản trị viên (trong một số tháp máy chủ cao cả) mặc định là ghi lại tất cả các lần thử đăng nhập và tất nhiên tên người dùng là Cleartext. Tất cả một số người dám nghĩ dám làm là tìm kiếm các chuỗi không phải tên người dùng 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ị viên đó. Vì vậy, bạn thực sự phải thay đổi mật khẩu của bạn.
Carl Witthoft

Câu trả lời:


184

Bạn chỉ có thể xóa dòng vi phạm khỏi bashlịch sử của thay vì xóa toàn bộ lịch sử. Chỉ cần xóa dòng bằng -dcờ, sau đó lưu (ghi) lịch sử mới bằng -wcờ:

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

1
Xin 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, lệnh với mật khẩu của bạn sẽ ngay lập tức được ghi vào .bash_history khi lời nhắc được hiển thị sau khi lệnh kết thúc. Bạn sẽ phải chỉnh sửa .bash_history để xóa nó.
benrifkah

1
Cũng lưu ý rằng nếu dòng được ghi trong tệp lưu trữ và sau đó nhiều shell (cửa sổ đầu cuối) đã được mở, TẤT CẢ các shell đó sẽ có trong lịch sử! Bạn sẽ cần phải xóa nó khỏi tất cả các shell đó, HOẶC ít nhất là từ shell LAST lịch sử mà bạn đóng! Tốt hơn để có được nó trước khi vỏ đã sử dụng nó tồn tại. Lịch sử khi đối phó với nhiều vỏ ốc có thể trở thành một cơn ác mộng.
anthony

121

Có hai phần này:

  • bashlư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ái historyđó được giữ 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 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 HISTFILEbiến thành thiết bị null để lịch sử sẽ không được ghi ~/.bash_historykhi phiên thoát:

export HISTFILE=/dev/null

205
Hãy nhìn xem, đó là quản trị viên!
Raystafarian

5
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 mình.
MaDa

7
Để bị hoang tưởng (và vì một số lý do vẫn không thay đổi mật khẩu của bạn) bạn không nên shredtập tin hoặc ghi đè lên nó nhiều lần?
kojiro

1
@MaDa Không vấn đề gì. Tôi thậm chí đã thêm một cách khác trong câu trả lời để đưa nick của tôi vào hình ảnh.
devnull

5
Cài đặt HISTFILE=là đủ. From bash(1): Nếu không được đặt, lịch sử lệnh sẽ không được lưu khi thoát khỏi shell.
Lekensteyn

23

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

kill -9 $$

Cái này giết chết cái vỏ SIGKILLmà không thể bắt được, vì vậy cái vỏ không có cách nào để cứu bất cứ thứ gì khi thoát ra.

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


2
+1, không chỉ có nhiều khả năng xảy ra lỗi, nó thậm chí có thể được phục hồi tùy thuộc vào việc / bao nhiêu lệnh được thực thi sau nó
Cruncher

Thiếu từ "tự động"? Bởi vì dotancohen đã chỉ ra một cách để lưu lại lịch sử mà không cần thoát khỏi vỏ.
Ben Voigt

3
Shell có thể được cấu hình để lưu lịch sử sau khi mỗi lệnh được thực thi, thay vì lúc thoát.
Nick Matteo

1
+1 Đây chính xác là những gì tôi muốn giới thiệu! Bên cạnh đó rm ~/.bash_history~để xóa tệp sao lưu trong trường hợp của OP khi nó đã được lưu
Tomas

Xin 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, lệnh với mật khẩu của bạn sẽ ngay lập tức được ghi vào .bash_history khi lời nhắc được hiển thị sau khi lệnh kết thúc. Bạn sẽ phải chỉnh sửa .bash_history để xóa nó.
benrifkah

11

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ể nhập: unset HISTFILE

Bash sẽ không biết nơi lưu trữ lịch sử khi bạn đă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.


Xin 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, lệnh với mật khẩu của bạn sẽ ngay lập tức được ghi vào .bash_history khi lời nhắc được hiển thị sau khi lệnh kết thúc. Bạn sẽ phải chỉnh sửa .bash_history để xóa nó.
benrifkah

11

Thủ thuật yêu thích của tôi cho việc này là nhấn mũi tên lên, xóa lùi lệnh, nhập nội dung nào đó (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 thấy khó chịu sau khi chỉnh sửa lệnh sai trong lịch sử của mình và sau đó phá hỏng 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ử xét lạ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
$ 

Điều đó thật kỳ lạ . Một nhược điểm là dường như biết bạn đã chỉnh sửa lịch sử, vậy có thể có cách nào để 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 dấu vết đã sạch.
Mark Jerde

Xin 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, lệnh với mật khẩu của bạn sẽ ngay lập tức được ghi vào .bash_history khi lời nhắc được hiển thị sau khi lệnh kết thúc. Bạn sẽ phải chỉnh sửa .bash_history để xóa nó.
benrifkah

10

Ngoài các câu trả lời khác, có thể có liên quan rằng 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ể là trên đĩa cứng, nếu trình giả lập thiết bị đầu cuối đã lưu lịch sử vào đĩa. Điều này xảy ra trong KDEole, kích thước lịch sử được đặt thành "cuộn ngược không giới hạn", để không bao giờ loại bỏ bất kỳ đầu ra nào.


6

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

2
Mặc dù thú vị, nhưng không rõ điều này hữu ích như thế nào trong kịch bản được mô tả. Bạn có gợi ý rằng mọi mật khẩu nên bắt đầu bằng một khoảng trắng?
Ben Voigt

1
Không, những gì anh ấy đề xuất là với vị trí này, bất kỳ dòng nào bạn nhập mà bạn không muốn cam kết với lịch sử, nên được nhập vào 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 mũi tên lên phiên của bạn.
Bryan C.

4
Lưu ý rằng thủ thuật không gian hàng đầu này chỉ hoạt động nếu $ HISTCONTROL chứa khoảng trống.
Bernd Jendrissek

2
@ jris198944 Cung cấp mật khẩu thông qua đối số dòng lệnh có khả năng hiển thị mật khẩu đó cho bất kỳ ai trên hệ thống chạy ps.
jamesdlin

2
Và dù sao đi nữa, mặc dù thủ thuật này hữu ích nếu bạn lên kế hoạch trước, nhưng điều này không giúp ích gì cho kịch bản ban đầu khi ai đó vô tình nhập mật khẩu trên dòng lệnh.
jamesdlin

4

Tuy nhiên, một cách khác để tránh lưu vào tệp lịch sử (trước khi bạn đăng xuất) chỉ đơn giản là

chmod 400 ~/.bash_history 

và sau đó đăng xuất. Dừng lịch sử được ghi vào tệp (vì tệp chỉ đọc) để toàn bộ phiên bash bị loại bỏ và lịch sử trước đó được giữ lại.

Đăng nhập lại và đặt lại quyền cho 600(hoặc không, tùy thuộc vào mức độ hoang tưởng của bạn!).


1

Tôi thấy đề cập nhiều lần

Xin lưu ý rằng điều này không hoạt động nếu bạn đã đặt "PROMPT_COMMAND = history -a" [..] Bạn sẽ phải chỉnh sửa .bash_history của mình để xóa nó.

Phần đầu tiên hoàn toàn đúng, nhưng bạn không cần phải chỉnh sửa thủ công .bash_history để sửa nó. Nếu bạn kết hợp hai lệnh trên một dòng thì nó hoạt động hoàn toàn tốt:

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

Bạn có thể giải thích chính xác những gì làm cho phương pháp này hoạt động?
Kamil Maciorowski

PROMPT_COMMAND chỉ được thực thi trước khi hiển thị dấu nhắc lệnh tiếp theo. Vấn đề với việc nhập các lệnh -d và -w trên các dòng riêng biệt là PROMPT_COMMAND sẽ thực thi lệnh lịch sử -a ở giữa. Nếu bạn thực thi cả -d và -w trên một dòng lệnh, nó chỉ thực thi sau đó
Floris Kruisselbrink

0

Nhiều câu trả lời ở đây cố gắng xóa lệnh đang được đề cập khỏi lịch sử của phiên bash trước khi nó được ghi vào $HISTFILE(~ / .bash_history theo mặc định). Tuy nhiên, nếu bạn đã đặt PROMPT_COMMAND=history -a lệnh với mật khẩu của bạn sẽ ngay lập tức được ghi vào mã của bạn $HISTFILEkhi lời nhắc được hiển thị sau khi lệnh kết thúc. Bạn sẽ phải chỉnh sửa của bạn $HISTFILEđể loại bỏ nó.

Cài đặt này thường được sử dụng để xen kẽ các lệnh từ nhiều phiên bash mở .


-3

Bạn cũng sẽ muốn kiểm tra nhật ký nhật ký hệ thống. Thông tin đăng nhập không hợp lệ thường sẽ được ghi vào syslog.

/ var / log / message hoặc tương đương cho HĐH của bạn.


1
Vấn đề không phải là anh ta nhập sai mật khẩu, anh ta đã đăng nhập và nhập mật khẩu vào dấu nhắc và nhấn enter. Điều này sẽ không hiển thị trong tập tin tin nhắn.
MaQleod
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.