Lệnh w có an toàn cho người dùng không?


7

Một số ứng dụng cho phép truyền mật khẩu làm đối số. Ví dụ:

mysql --user=user_name --password=your_password db_name

Nó có an toàn không? Bên cạnh thực tế là mật khẩu đã nhập sẽ được lưu trong lịch sử bash, ai đó có thể nhập wlệnh vào thời điểm thích hợp và sẽ thấy toàn bộ dòng lệnh xử lý (bao gồm cả mật khẩu).

Điều khá ngạc nhiên đối với tôi là mọi người dùng đều có thể thấy lệnh nào tôi đang thực hiện.


2
Không, nó không an toàn. Xem câu trả lời của tôi ở đây: unix.stackexchange.com/questions/158933/ Kẻ
Martin von Wittich

2
Xem thêm ps -ef(tất cả các quy trình đang chạy) chẳng hạn. Hoặc nội dung của /proc. Đây không chỉ là wmệnh lệnh đặc biệt ở đây; những quy trình nào đang chạy trên hệ thống được coi là kiến ​​thức công khai cho mọi người trên hệ thống đó.
ComputerDruid

Nếu bạn không muốn để bash lưu các lệnh đó trong lịch sử, hãy bắt đầu lệnh bằng dấu cách: $echo 'a' a $ echo 'b' b $!echo echo 'a' a (lưu ý rằng echo 'b'không được ghi lại trong lịch sử).
Bakuriu

Câu trả lời:


15

Các đối số dòng lệnh của mọi quá trình trong hệ thống được coi là "công khai". Không chỉ wlệnh, mà pstopnhiều lệnh khác truy cập thông tin đó là chuyện đương nhiên. Quả thực không có đặc quyền nào được yêu cầu để có được thông tin đó. Trên Linux, bạn có thể đọc dòng lệnh của một quy trình khác, thậm chí là một quy trình thuộc về người dùng khác, bằng cách đọc /proc/<pid>/cmdline.

Đây không phải là một hành vi thiếu sót hoặc không an toàn trên một phần của whoặc tophoặc ps(hoặc cat). Thay vào đó, onus đứng về phía không truyền thông tin nhạy cảm trên các dòng lệnh trên các hệ thống nhiều người dùng.

Hầu hết các tiện ích có khả năng chấp nhận mật khẩu trên tài liệu dòng lệnh mà không nên làm điều đó. Ví dụ: từ mysqltrang của:

Chỉ định mật khẩu trên dòng lệnh nên được coi là không an toàn. Xem Phần 5.3.2.2, "Nguyên tắc người dùng cuối để bảo mật mật khẩu". Bạn có thể sử dụng một tệp tùy chọn để tránh đưa mật khẩu vào dòng lệnh.

Nhân tiện, việc truyền mật khẩu hoặc dữ liệu nhạy cảm trong các biến môi trường ít an toàn hơn, nhưng thực sự không an toàn trên hầu hết các hệ thống.


2
mysqlthực sự ghi đè lên đối số mật khẩu (xem unix.stackexchange.com/q/88665/15241 ), nhưng điều này không thực sự giải quyết được vấn đề bảo mật.
jofel

Trích dẫn hay từ hướng dẫn sử dụng zip (xem --passwordtùy chọn): (...) Nhiều hệ điều hành nhiều người dùng cung cấp cách cho bất kỳ người dùng nào thấy dòng lệnh hiện tại của bất kỳ người dùng nào khác; ngay cả trên các hệ thống độc lập luôn có mối đe dọa nhìn trộm qua vai. Lưu trữ mật khẩu văn bản gốc như một phần của dòng lệnh trong tập lệnh tự động thậm chí còn tồi tệ hơn. Bất cứ khi nào có thể, hãy sử dụng lời nhắc tương tác, không lặp lại để nhập mật khẩu. (...) .
patryk.beza

5

Không, không an toàn khi truyền mật khẩu cho các chương trình trên dòng lệnh. Tốt hơn là sử dụng:

mohsen@debian:~$ mysql -uuser -p
Enter password: 

Tôi biết rằng đó là cách truyền mật khẩu ưa thích nhưng đôi khi (ví dụ: trong tập lệnh bash) tôi cần sử dụng mật khẩu được mã hóa cứng.
patryk.beza

Tôi remmeber postgresqlcó cách đọc mật khẩu an toàn, tìm kiếm đó, có thể mysqlcũng có cơ chế tương tự.
Tiếng Ba Tư

0

Mặc dù nó không an toàn, xin vui lòng nhớ rằng Linux ngày nay ở độ tuổi hai mươi - giống như với những thứ khác trong CNTT, các hàm ý bảo mật không rõ ràng sau đó hoặc được giải quyết sau đó.

Do đó, như đã đề cập trong các câu trả lời khác, không sử dụng mật khẩu trên dòng lệnh.

Bạn có thể (và có lẽ shold) cũng hạn chế các thông tin được cung cấp bởi một trong hai mountring procfs with thetùy chọn hidepid`, hoặc sử dụng grsecurity hạt nhân cứng. Lưu ý rằng điều này có thể phá vỡ một số thứ (có thể là các nhóm và bất cứ thứ gì dựa vào chúng - như vd systemd), ít nhất là tại thời điểm viết bài này.

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.