Có an toàn để thêm. ĐẾN ĐƯỜNG CỦA TÔI? Làm thế nào mà?


49

Tôi đã thấy mọi người đề cập đến trong các câu trả lời khác rằng việc đưa thư mục làm việc hiện tại (' .') vào $PATHbiến môi trường của bạn là một ý tưởng tồi , nhưng không thể tìm thấy một câu hỏi giải quyết vấn đề cụ thể.

Vậy, tại sao tôi không nên thêm .vào con đường của mình? Và nếu bất chấp mọi cảnh báo tôi vẫn làm điều đó, tôi phải coi chừng điều gì? Có an toàn hơn khi thêm nó vào cuối so với bắt đầu không?


Câu trả lời:


39

Nếu bạn là người dùng duy nhất trên máy thì không sao, miễn là bạn biết bạn đang làm gì. Mối quan tâm chung là bằng cách có thư mục hiện tại của bạn PATH, bạn không thể xem các lệnh dưới dạng một danh sách không đổi. Nếu bạn cần chạy tập lệnh / chương trình từ thư mục hiện tại của mình, bạn luôn có thể chạy nó một cách rõ ràng bằng cách thêm vào ./tên của nó (bạn nói với hệ thống "Tôi muốn chạy tệp này từ thư mục hiện tại của tôi").

Nói, bây giờ bạn có tất cả các tập lệnh nhỏ này trên tất cả các hệ thống tập tin của bạn; chắc chắn một ngày nào đó bạn sẽ chạy sai. Vì vậy, có PATHmột danh sách các đường dẫn tĩnh được xác định trước là tất cả về trật tự và tự cứu mình khỏi một vấn đề tiềm ẩn.

Tuy nhiên, nếu bạn định thêm .vào tài khoản của mình PATH, tôi khuyên bạn nên thêm nó vào cuối danh sách ( export PATH=$PATH:.). Ít nhất bạn sẽ không ghi đè các tệp nhị phân trên toàn hệ thống theo cách này.

Nếu bạn là một người gốc trên hệ thống và có hệ thống tiếp xúc với các tài khoản của người dùng khác, có .trong PATHlà một nguy cơ bảo mật lớn: bạn có thể cdvào thư mục của một số người dùng, và vô tình chạy một kịch bản độc hại có chỉ vì bạn gõ sai một điều hay kịch bản có cùng tên với hệ nhị phân trên toàn hệ thống.


1
+ Chấp nhận cho lý thuyết cơ bản và đề cập rằng các vấn đề vẫn có thể tồn tại ngay cả khi bạn là người dùng duy nhất trên hệ thống. Cả hai câu trả lời mang lại điểm tuyệt vời. Tôi sẽ thêm rằng bất cứ khi nào bạn chia sẻ thư mục với người dùng khác, sẽ tăng rủi ro, cho dù bạn có root hay không.
Jander

6
ngay cả với tư cách là người dùng duy nhất trên máy: mỗi khi bạn trích xuất một tar không tin cậy, nó có thể đặt một lsthư mục hiện tại của bạn. Tiếp theo bạn chạy lsđể kiểm tra các tệp được giải nén và bạn đã chạy mã độc.
lesmana

35

Rủi ro là ai đó đặt một tệp thực thi độc hại trong thư mục tình cờ là thư mục hiện tại của bạn.

Trường hợp xấu nhất xảy ra khi:

  • bạn đã đăng nhập bằng root vì lệnh độc hại có sức sát thương vô hạn
  • .là lúc bắt đầu PATH của bạn vì các lệnh tiêu chuẩn có thể bị ghi đè mà bạn không nhận thấy nó (thường là một lệnh lscó thể ẩn chính nó khỏi danh sách).

Rủi ro thấp hơn nhiều nếu bạn đăng nhập như một người dùng thông thường và có .kết thúc PATH nhưng nó vẫn tồn tại:

  • ai đó có thể phát hiện ra bạn thường xuyên gõ nhầm một lệnh và cài đặt một lệnh khớp
  • ai đó có thể cài đặt một lệnh giả với tên của lệnh chưa được cài đặt.

Lưu ý rằng trong mọi trường hợp, rủi ro vẫn còn đó ngay cả khi bạn là người dùng duy nhất của máy. Phần mềm độc hại sẽ được cài đặt nếu, ví dụ, bạn tình cờ trích xuất một kho lưu trữ được tải xuống từ một trang web bị xâm nhập.


15
Cài đặt slđể xem mức độ thường xuyên xảy ra điểm 3.
jordanm

hoặc alias l=`ls`.
Anko

nó không phải là độc hại. Tôi hy vọng lssẽ có được một danh sách thư mục nhưng một số dự án tôi tải xuống có thể có một lstập lệnh trong thư mục dự án gốc của họ như một lối tắt đến một cái gì đó khác. lscó lẽ là một ví dụ tồi nhưng tôi chắc chắn có thể tưởng tượng eđể chỉnh sửa, dđể gỡ lỗi, mtạo, bcho xây dựng. Tôi có một vài trong số đó trên toàn cầu. Nếu tôi gõ, mtôi sẽ thực hiện để khởi chạy (phím tắt của tôi), không phải một số tập lệnh cục bộ được gọi mđể thực thi.
gman

@gman Đúng rồi. Một lệnh không độc hại có thể vô tình có tác dụng phụ thực sự. Lưu ý rằng các lệnh / bí danh chữ cái đã được tán thành kể từ khi Unix ra đời do nguy cơ nhầm lẫn cao. Những tiêu chuẩn hiếm hoi là w[.
jlliagre

3

Ngay cả khi bạn luôn rất cẩn thận với những gì bạn nhập, đặt .vào PATH, ngay cả khi kết thúc, vẫn không an toàn vì một số chương trình thay đổi thư mục hiện tại thành /tmp(có thể ghi trên thế giới) và cũng có thể thử thực thi các tiện ích chưa được cài đặt, do đó mặc định những gì trong /tmp. Nếu điều này xảy ra, đây là một vector tấn công.

Cũng lưu ý rằng không có nhiều nhược điểm của việc tránh .trong PATH, bởi vì ./rất dễ dàng để loại (đặc biệt trên bàn phím như phím QWERTY, nơi những nhân vật này đang trên phím liên tiếp và không cần phím Shift) và sử dụng ./cũng sẽ giúp đỡ hoàn thành, do đó tổ hợp phím có khả năng tiết kiệm cuối cùng.

Nếu bạn thực sự muốn có thể gõ các lệnh từ thư mục hiện tại, thì các shell hiện đại (như zsh, với nó command_not_found_handler) có thể cung cấp các tính năng để làm điều đó một cách an toàn, tức là cho phép bạn thêm tất cả các kiểm tra bảo mật bạn muốn trong trình xử lý, trước khi lệnh được thực thi.

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.