Đầu tiên, nhắc lại Set-UID là gì? Set-UID là một cơ chế bảo mật quan trọng trong hệ điều hành Unix. Khi chương trình Set-UID chạy, chương trình đó sẽ thừa nhận các đặc quyền của chủ sở hữu. Ví dụ: nếu chủ sở hữu của chương trình là root, thì khi bất kỳ ai chạy chương trình này, chương trình sẽ nhận được các đặc quyền của root trong quá trình thực thi. Set-UID cho phép chúng tôi làm nhiều điều thú vị, nhưng nó làm tăng đặc quyền của người dùng khi thực thi, khiến nó trở nên khá rủi ro. Mặc dù các hành vi của các chương trình Set-UID được quyết định bởi logic chương trình của họ, không phải bởi người dùng, người dùng thực sự có thể ảnh hưởng đến các hành vi thông qua các biến môi trường. Để hiểu các chương trình Set-UID bị ảnh hưởng như thế nào, trước tiên chúng ta hãy tìm hiểu xem các biến môi trường có được quy trình của chương trình Set- UID kế thừa từ quy trình của người dùng hay không.
Sau khi đã biên dịch và chạy chương trình, ta tiếp tục thay đổi quyền sở hữu và của tệp bằng các câu lệnh sau:
sudo chown root filename //Đặt root làm chủ sở hữu của findingenvvarofcurrentprocess
sudo chmod 4755 filename //Câu lệnh đặt findingenvvarofcurrentprocess trở thành chương trình SET-UID bằng cách đặt bit set-uid.
Câu lệnh này làm cho chương trình này trở thành chương trình root Set-UID. Sau đó, tiếp tục thêm các enviroment variables vào Bash Shell bao gồm PATH, LD_LIBRARY_PATH và một biến môi trường bất kì , vì PATH và LD_LIBRARY_PATH đã có sẵn, ta khởi tạo một biến mới với tên hoangtran và giá trị /home/seed bằng cách sử dụng lệnh export và cho phép các giá trị môi trường khác giống nhau.
Khi chạy chương trình đã biên dịch ở trên và lưu trữ kết quả đầu ra trong một tệp có tên envvarofchild, có thể thấy rằng tiến trình con kế thừa biến môi trường PATH và hoangtran nhưng không có biến môi trường LD, như có thể thấy ở dưới (khi tìm kiếm LD trong tệp, nó không trả về bất kỳ giá trị nào).
Điều này cho thấy rằng quy trình con của chương trình SET-UID có thể không kế thừa tất cả các biến môi trường của quy trình mẹ, LD_LIBRARY_PATH là một trong số đó. Đây là một cơ chế bảo mật được thực hiện bởi trình liên kết động. LD_LIBRARY_PATH bị bỏ qua ở đây vì the real user id và the effective user id khác nhau. Đó là lý do tại sao chỉ có hai biến môi trường khác được nhìn thấy trong đầu ra. The real user id chính là người sở hữu quy trình hiện tại, là bản thân người dùng còn the effective user id những gì hệ điều hành xem xét để đưa ra quyết định xem bạn có được phép làm điều gì đó hay không.