Có bất kỳ phương pháp nào để kiểm tra những gì bạn đang thực sự thực hiện từ một tập lệnh bash không?
Nói kịch bản bash của bạn đang kêu gọi một số lệnh (ví dụ: tar
, mail
, scp
, mysqldump
) và bạn sẵn sàng để đảm bảo rằng tar
là thực tế, thực tar
, đó là xác định được bởi root
người sử dụng là các tập tin và thư mục cha chủ sở hữu và người duy nhất có quyền ghi và không phải là một số /tmp/surprise/tar
với www-data
hoặc apache2
là chủ sở hữu.
Chắc chắn tôi biết về PATH
và môi trường, tôi tò mò muốn biết liệu điều này có thể được kiểm tra bổ sung từ tập lệnh bash đang chạy hay không và nếu có thì chính xác như thế nào?
Ví dụ: (mã giả)
tarfile=$(which tar)
isroot=$(ls -l "$tarfile") | grep "root root"
#and so on...
which
không nói chính xác những gì tar
sẽ làm, như được trả lời bởi xhienne, ls
có thể bị hack để trả lại thông tin sai lệch về (các) tệp, nếu có. Cũng grep
có thể bị hack để trả lại thông tin sai lệch; điều đó có thể tránh được bằng cách sử dụng kết hợp shell thay vào đó, nhưng sau đó shell có thể bị hack. Và shell có thể bị hack để đưa ra kết quả sai ngay từ type
đầu - hoặc thay thế hoàn toàn vì khả năng thay thế của shell là một sự đổi mới quan trọng của Unix so với các HĐH 50 tuổi. Xem địa chỉ Turing 1984 của Ken Thompson. Đó là tất cả các con rùa xuống.
TE
) - có cơ sở dữ liệu có chữ ký (nghĩa là rộng hơn tổng kiểm tra MD5. Khi TE hoạt động VÀ một tệp trong cơ sở dữ liệu bạn có thể chọn cho dù chương trình chạy - hay chỉ cảnh báo rằng nó không khớp với cơ sở dữ liệu. Ngoài ra, có hai cài đặt khác: TEP
(thực thi PATH đáng tin cậy) và TLP
(LIBrary PATH đáng tin cậy). Chỉ các chương trình trong TEP có thể được thực thi và các thư viện chỉ có thể được tải với thư mục được bao gồm trong TLP. Trong Linux tôi có một thứ gọi là 'AppArmor' có thể giúp bạn.