lấy mật khẩu và bảo mật


11

Tôi đôi khi làm echo "secret" | mysql -u root -p .... Bây giờ tôi đồng ý về bảo mật ở đây: ai đó có thể liệt kê tất cả các quy trình xem mật khẩu không?

Để kiểm tra tôi đã thử echo "test" | sleep 1000và lệnh echo với bí mật không hiển thị trong đầu ra của "ps aux". Vì vậy, tôi cho rằng nó an toàn - nhưng một chuyên gia bảo mật có thể xác nhận nó không? :)


Không thể nhìn thấy nó trong danh sách quy trình khi chạy một vòng lặp vô tận. Câu hỏi hay.
Tim

1
Ngoài ra, đừng quên rằng bất cứ thứ gì bạn gõ trên hầu hết các shell sẽ được lưu trữ trong tệp lịch sử ở đâu đó (như .history).
Alexander Bird

Câu trả lời:


13

Câu trả lời cho điều này phụ thuộc vào loại vỏ bạn đang sử dụng. Nhiều vỏ có echonhư một BUILTIN lệnh có nghĩa là nó không đẻ trứng một quá trình riêng biệt và do đó sẽ không xuất hiện trong một quá trình niêm yết. Tuy nhiên, nếu bạn nhập /bin/echohoặc ./echohoặc nếu bạn vô hiệu hóa nội dung bằng enable -n echolệnh thì shell sẽ không sử dụng lệnh dựng sẵn của nó và sẽ sử dụng phiên bản nhị phân thay thế. Điều này sẽ hiển thị trong một danh sách quá trình.

Nếu bạn đang sử dụng nhị phân thay vì dựng sẵn shell, lệnh echo sẽ hiển thị miễn là nó cần để di chuyển dữ liệu vào bộ đệm STDIN của quy trình khác. Bộ đệm này có kích thước hữu hạn vì vậy nếu có nhiều dữ liệu hơn sẽ phù hợp với bộ đệm, lệnh echo sẽ phải chờ một lúc cho đến khi quá trình khác có thể đọc một số dữ liệu ra khỏi bộ đệm. Đối với hầu hết các trường hợp (chẳng hạn như hai ví dụ bạn đã đưa ra ở trên) khoảng thời gian này sẽ là micro giây. Nếu bạn tình cờ dán kết xuất SQL 20 MB vào MySQL bằng echo, thì điều này có thể lâu hơn. Cho dù thời gian có ngắn đến đâu, nếu bạn đang sử dụng nhị phân thay vì dựng sẵn shell và ai đó tình cờ nhận được thời gian vừa phải, họ sẽ có thể thấy quy trình trong danh sách quy trình.

Bạn có thể tránh điều này bằng cách đưa dữ liệu bí mật vào một tệp (có quyền phù hợp) và sử dụng tệp dưới dạng STDIN như thế này:

mysql -u root -p < file_with_secret.sql

5
Hãy nhớ rằng bằng cách nhập mật khẩu trên dòng lệnh như vậy rất có thể nó sẽ được lưu vào tệp lịch sử của shell của bạn, vì vậy rất đáng để kiểm tra quyền và nội dung của tệp lịch sử.
aculich

3

Đối với trường hợp mysql ~ / .my.cnf có thể được sử dụng để lưu trữ bí mật, tức là

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

[mysql]
database = DBNAME

1

Chỉ dùng

mys -uroot -p

và nhấn enter. Sau đó, bạn sẽ được nhắc nhập mật khẩu và nó sẽ không hiển thị trong danh sách quy trình hoặc tệp lịch sử.


Dữ liệu được chấp nhận trên STDIN bởi MySQL là (các) lệnh sẽ được chạy khi bạn đã đăng nhập. "Bí mật" trong câu hỏi không phải là mật khẩu.
Ladadadada
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.