Hành vi bạn trải nghiệm rất có thể phụ thuộc vào sự khác biệt trong biến môi trường $PATH
. Về $PATH
cơ bản, nó là một danh sách các thư mục được phân tách bằng dấu hai chấm, được tìm kiếm để thực thi cụ thể khi một chương trình được gọi bằng cách sử dụng exec
lệnh gọi hệ điều hành. Có $PATH
thể chứa các thành phần đường dẫn tương đối, thông thường .
hoặc một chuỗi rỗng, cả hai đều đề cập đến thư mục làm việc hiện tại. Nếu thư mục hiện tại là một phần của $PATH
, các tệp trong thư mục làm việc hiện tại có thể được thực thi chỉ bằng tên của chúng, vd a.out
. Nếu thư mục hiện tại không có $PATH
, người ta phải chỉ định một đường dẫn tương đối hoặc tuyệt đối để thực thi, ví dụ ./a.out
.
Có các thành phần đường dẫn tương đối trong $PATH
có ý nghĩa bảo mật tiềm năng như các tệp thực thi trong các thư mục trước đó trong $PATH
các tệp thực thi bị lu mờ trong các thư mục sau này trong danh sách. Hãy xem xét ví dụ một cuộc tấn công trên một hệ thống nơi mà các đường dẫn thư mục làm việc hiện tại .
preceeds /bin
trong $PATH
. Ví dụ ls
, nếu kẻ tấn công quản lý để đặt một tập lệnh độc hại chia sẻ tên với một tiện ích hệ thống thường được sử dụng , trong thư mục hiện tại (thường dễ thay thế nhị phân trong sở hữu gốc /bin
), người dùng sẽ vô tình gọi tập lệnh độc hại khi ý định là để gọi hệ thống ls
. Ngay cả khi .
chỉ được nối vào cuối$PATH
, một người dùng có thể bị lừa để vô tình gọi một tệp thực thi trong thư mục hiện tại có chung tên với một tiện ích chung không tìm thấy trên hệ thống cụ thể đó. Đây là lý do tại sao thông thường không có các thành phần đường dẫn tương đối như là một phần của mặc định $PATH
.