Cập nhậtchroot + execvp + bash
Got it! Xem giải pháp của tôi (comment thứ năm)
Đây là vấn đề của tôi:
tôi đã tạo ra một nhị phân nhỏ gọi là "tù" và trong/etc/password Tôi đã thực hiện nó shell mặc định cho người dùng thử nghiệm.
Đây là - đơn giản - Mã nguồn:
#define HOME "/home/user"
#define SHELL "/bin/bash"
...
if(chdir(HOME) || chroot(HOME)) return -1;
...
char *shellargv[] = { SHELL, "-login", "-rcfile", "/bin/myscript", 0 };
execvp(SHELL, shellargv);
Vâng, không có gì khó khăn khi tôi cố gắng, có vẻ như, khi người dùng đăng nhập thử nghiệm của tôi trong, /bin/myscript sẽ không bao giờ có nguồn gốc. Tương tự, nếu tôi thả một tệp .bashrc
vào thư mục chính của người dùng, nó cũng sẽ bị bỏ qua.
Tại sao bash sẽ đánh lừa những kẻ này?
-
Một số độ chính xác, không nhất thiết liên quan, nhưng rõ ràng ra một số điểm thực hiện trong các ý kiến:
- Các 'tù' nhị phân thực sự là SUID, do đó cho phép nó để chroot() thành công.
- Tôi đã sử dụng 'ln' để tạo các tệp nhị phân thích hợp sẵn có - ô giam của tôi được đệm độc đáo :)
- Vấn đề dường như không bị chroot người dùng ...
Ah, tôi đã (giả) giả định rằng chroot của bạn có mọi thứ ở cùng một nơi với hệ thống điển hình hoặc trước tiên bạn đã sửa môi trường. Thiếu setuid/gid trở lại không nên phá vỡ điều này (mặc dù nó sẽ loại bỏ lợi ích an ninh để chroot). – ephemient