Như izx đã nhận xét, điều này chỉ có thể xảy ra do lỗi kernel. Vì vậy, bất cứ ai hiện có thể tạo ra vấn đề này - bao gồm và đặc biệt là poster gốc của câu hỏi này - sẽ được khuyên nên báo cáo đó là một lỗi bằng cách đọc kỹ trang đó và cẩn thận, sau đó chạy ubuntu-bug linux
trên máy bị ảnh hưởng . Điều này nên được báo cáo linux
trong Ubuntu và không phải với hạt nhân chính (ngược dòng), trừ khi bạn có thể sản xuất nó trên hạt nhân chính (bạn phải yama
tải).
Hành vi dự kiến trong mọi phiên bản Ubuntu bắt đầu với Ubuntu 10.10 là quá trình A không thể theo dõi tiến trình B đang chạy trừ khi B là con trực tiếp của A (hoặc A chạy như root
). Đây là một cải tiến bảo mật, giúp cho một quá trình bị kẻ tấn công xâm phạm không thể sử dụng các phương tiện gỡ lỗi do kernel cung cấp để khám phá thông tin từ các tiến trình khác. Điều này được giải thích trong phần phạm vi ptrace của trang wiki cộng đồng Tính năng bảo mật .
Hành vi hạn chế này là mặc định nhưng có thể được thay đổi để cho phép một quy trình A theo dõi bất kỳ quy trình B đang chạy nào được chạy với cùng ID người dùng như của chính quy trình A. Đó là, bạn có thể định cấu hình hệ thống của mình để cho phép bất kỳ quy trình nào của bạn gỡ lỗi lẫn nhau. Điều này đơn giản hóa việc gắn trình gỡ lỗi vào các quy trình đã chạy.
Các thiết lập cho điều này được hiển thị trong /proc/sys/kernel/yama/ptrace_scope
sysctl . 1
biểu thị hành vi hạn chế hơn và 0
hành vi hạn chế hơn. Có thể đọc cài đặt bằng:
cat /proc/sys/kernel/yama/ptrace_scope
Hành vi ít hạn chế hơn (không mặc định) có thể được đặt bằng:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Và hành vi hạn chế (mặc định) hơn có thể được đặt (hoặc đặt lại) với:
echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Không chỉ người đăng ban đầu của câu hỏi này không thể đính kèm một strace
thể hiện vào một quy trình hiện đang chạy với ptrace-scope
thiết lập 0
, mà người đăng ban đầu sau đó vẫn không thể làm như vậy khi chạy strace
như root
. Thật khó để thấy làm thế nào điều này có thể là bất cứ điều gì ngoại trừ một lỗi - tôi thực sự khuyên bạn nên báo cáo nó như là một.
Lúc đầu, tôi đã nghĩ rằng tôi có thể tái tạo vấn đề trong đó một ptrace_scope
thiết lập 0
bị bỏ qua và xử lý như thể nó là như vậy 1
. Nhưng tôi không còn tin đây là trường hợp nữa, vì tôi đã làm lại tất cả những điều tương tự và tôi không thể tái tạo vấn đề. Tôi đã thử nghiệm điều này trên:
- Máy vật lý Lubd Precise amd64 tôi sử dụng hàng ngày làm hộp chính.
- Một máy ảo VirtualBox chạy CD trực tiếp Lubfox Precise i386 (12.04).
- Một máy ảo VirtualBox giống hệt nhau đang chạy Quantal i386 (Ubuntu + 1) hàng ngày (20120608).
Trên cả ba máy, hành vi dự kiến sẽ xảy ra và tôi không thể tái tạo điều kiện mà áp phích ban đầu của câu hỏi này được hỏi về. Dưới đây là một số văn bản từ Terminal (từ hệ thống trực tiếp chính xác):
lubuntu@lubuntu:~$ nano&
[1] 3492
lubuntu@lubuntu:~$ strace -p 3492
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
[1]+ Stopped nano
lubuntu@lubuntu:~$ cat /proc/sys/kernel/yama/ptrace_scope
1
lubuntu@lubuntu:~$ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
0
lubuntu@lubuntu:~$ strace -p 3492
Process 3492 attached - interrupt to quit
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
ioctl(1, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon -echo ...}) = ? ERESTARTSYS (To be restarted)
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
ioctl(1, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon -echo ...}) = ? ERESTARTSYS (To be restarted)
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
strace
tiếp tục tạo tin nhắn cho đến khi tôi đình chỉ nó, như mong đợi.
Tôi kết luận bằng cách đề nghị một lần nữa để báo cáo đây là một lỗi. Một tìm kiếm bao gồm tối đa trên https://bugs.launchpad.net (bao gồm bất kỳ lỗi Ubuntu nào được báo cáo) cho văn bản chỉptrace_scope
tạo ra một số ít kết quả, trong đó rõ ràng không có báo cáo nào cho lỗi này . Báo cáo lỗi sẽ giúp người khác, có thể dẫn đến cách giải quyết hoặc khắc phục và có lẽ là cách duy nhất có ý nghĩa để tiếp tục xử lý vấn đề này (giả sử sự cố vẫn đang xảy ra).
strace /bin/echo test
? Điều đó có đưa ra thông báo lỗi tương tự không?