Mengapa strace / gdb tidak dapat dilampirkan ke proses meskipun saya root?


26
  • Saya login sebagai root tetapi stracememberi saya ini:

    root @ kyznecov-System: / home / kyznecov # ps -e | grep 111
     3807 poin / 2 00:00:00 111
     3810 Poin / 2 00:00:00 111
    root @ kyznecov-System: / home / kyznecov # strace -p 3810
    
    lampirkan: ptrace (PTRACE_ATTACH, ...): Operasi tidak diizinkan
    Tidak dapat melampirkan ke proses. Jika uid Anda cocok dengan uid dari target
    proses, periksa pengaturan / proc / sys / kernel / yama / ptrace_scope, atau coba
    lagi sebagai pengguna root. Untuk detail lebih lanjut, lihat /etc/sysctl.d/10-ptrace.conf
    root @ kyznecov-System: / home / kyznecov
    
    root @ kyznecov-System: / home / kyznecov # cat / proc / sys / kernel / yama / ptrace_scope
    0
  • Saya kemudian mencoba menggunakan gdbuntuk men-debug program multiproses di Eclipse CDT dengan forking, dan itu memberi saya hasil / kesalahan yang sama:

    masukkan deskripsi gambar di sini

Ada ide?


Karena ptrace_scope adalah nol, seharusnya tidak masalah, tetapi sama seperti percobaan, Anda dapat mencoba penggunaan strace yang lebih sederhana, di mana proses penelusuran adalah induk dari proses yang dilacak. Misalnya strace /bin/echo test? Apakah itu memberikan pesan kesalahan yang sama?
Jordan Uggla

@ EliahKagan, secara teori apa yang dijelaskan OP tidak dapat terjadi tanpa adanya bug kernel. Jika Anda memiliki waktu dalam 24 jam ke depan dan dapat mengubah komentar Anda menjadi jawaban, itu akan bagus - pengujian saya pada Precise tidak mengungkapkan masalah, dan dengan cara ini akan menjadi jawaban pasti bahwa ada beberapa kekhasan dalam konfigurasi OP ... dia belum kembali sejak pertanyaan awalnya pada 29 Mei.
ish

@EliahKagan, Satu hal yang baru saja memukul saya saat membaca ulang bit "operasi tidak diizinkan" - karena saya telah melihatnya sebelum beribu kali ketika saya seharusnya melakukan root pada OpenVZ VPS / VMs (mereka berbagi kernel mesin host, jadi tidak ada , Anda hanya raja dari pulau kecil Anda sendiri) ... mungkin ini masalahnya? Lihat tempel ini
ish

@izx Tempel Anda kedaluwarsa. Dan saya memiliki masalah ini (di dalam sebuah wadah), wawasan apa pun akan menyenangkan
Kunal Tyagi

Jawaban:


25

Salah satu alasan untuk mendapatkan kesalahan:

attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted

karena prosesnya telah dilampirkan dengan gdb, straceatau serupa. Untuk memeriksa apakah ini masalahnya, jalankan:

grep TracerPid /proc/$THE_PID/status

Jika bukan nol, itu adalah pid dari program yang ada yang sudah menjalankan jejak pada proses itu.


Kami tidak melihat ini jika kami melakukan debug di Eclipse ... yang sudah menggunakan GDB
ernesto

Terima kasih telah menunjukkan ini. Saya menjalankan program melalui strace wrapper. Program bercabang dan kemudian mengeksekusi dirinya sendiri. Anak yang dikeluarkan dengan cepat mati saat menjalankan strace wrapper, yang gagal untuk dilampirkan karena proses induk sudah di bawah kendali strace.
Rob Kennedy

18

Seperti yang sudah dikomentari oleh izx , ini seharusnya hanya dapat terjadi karena bug kernel. Jadi siapa pun yang saat ini dapat menghasilkan masalah ini - termasuk dan terutama poster asli dari pertanyaan ini - akan disarankan untuk melaporkannya sebagai bug dengan membaca halaman itu dengan seksama dan hati-hati, dan kemudian berjalan ubuntu-bug linuxpada mesin yang terpengaruh . Ini harus dilaporkan terhadap linuxUbuntu, dan tidak terhadap kernel mainline (upstream), kecuali Anda dapat memproduksinya pada kernel mainline (Anda harus yamamemuatnya).

Perilaku yang diharapkan dalam setiap versi Ubuntu dimulai dengan Ubuntu 10.10 adalah bahwa proses A tidak dapat melacak proses yang berjalan B kecuali B adalah anak langsung dari A (atau A berjalan sebagai root). Ini adalah peningkatan keamanan, yang membuatnya agar proses yang telah dikompromikan oleh penyerang tidak dapat menggunakan fasilitas debug yang disediakan oleh kernel untuk menemukan informasi dari proses lain. Ini dijelaskan di bagian lingkup ptrace dari halaman wiki komunitas Fitur Keamanan .

Perilaku membatasi ini adalah default tetapi dapat diubah untuk memungkinkan proses A untuk melacak setiap proses yang berjalan B yang dijalankan dengan ID pengguna yang sama seperti proses A sendiri. Artinya, Anda dapat mengkonfigurasi sistem Anda untuk memungkinkan proses Anda untuk saling debug. Ini menyederhanakan melampirkan debugger ke proses yang sudah berjalan.

Pengaturan untuk ini diekspos oleh /proc/sys/kernel/yama/ptrace_scope sysctl . 1menunjukkan perilaku yang lebih ketat dan perilaku 0yang tidak terlalu ketat. Pengaturan dapat dibaca dengan:

cat /proc/sys/kernel/yama/ptrace_scope

Perilaku yang kurang ketat (non-default) dapat diatur dengan:

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

Dan perilaku yang lebih membatasi (default) dapat diatur (atau diatur kembali) dengan:

echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope

Tidak hanya poster asli dari pertanyaan ini tidak dapat melampirkan stracecontoh ke proses yang sedang berjalan dengan ptrace-scopediatur ke 0, tetapi poster asli juga masih tidak dapat melakukannya ketika berjalan stracesebagai root. Sulit untuk melihat bagaimana ini bisa menjadi sesuatu selain bug - Saya sangat merekomendasikan untuk melaporkannya sebagai bug.

Pada awalnya, saya berpikir bahwa saya dapat mereproduksi masalah di mana ptrace_scopepengaturan 0diabaikan dan diperlakukan seolah-olah itu 1. Tetapi saya tidak lagi percaya ini adalah masalahnya, karena saya telah melakukan semua hal yang sama lagi, dan saya tidak dapat mereproduksi masalahnya. Saya telah menguji ini pada:

  • Mesin fisik Precise amd64 Lubuntu yang saya gunakan setiap hari sebagai kotak utama saya.
  • Mesin virtual VirtualBox yang menjalankan live CD Lubuntu Precise i386 (12.04).
  • Mesin virtual VirtualBox identik yang menjalankan Quantal i386 (Ubuntu + 1) setiap hari (20120608).

Pada ketiga mesin, perilaku yang diharapkan terjadi, dan saya tidak dapat mereproduksi kondisi yang ditanyakan oleh poster asli pertanyaan ini. Ini beberapa teks dari Terminal (dari sistem langsung Precise):

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 terus menghasilkan pesan sampai saya menangguhkannya, seperti yang diharapkan.

Saya menyimpulkan dengan merekomendasikan lagi untuk melaporkan ini sebagai bug. Pencarian inklusif maksimal di https://bugs.launchpad.net (yang mencakup bug Ubuntu yang dilaporkan) untuk teks hanyaptrace_scope menghasilkan beberapa hasil, di mana jelas tidak ada laporan untuk bug ini . Melaporkan bug akan membantu orang lain, dapat menyebabkan penyelesaian masalah atau perbaikan, dan mungkin satu-satunya cara yang berarti untuk melanjutkan penyelesaian masalah ini (dengan asumsi masalah masih terjadi).


Terima kasih atas sarannya, saya akan membacanya secara rinci besok dan mungkin menambahkan beberapa subjudul, tapi saya pikir ini sangat teliti :)
ish

dalam posting saya, Anda dapat melihat: root @ kyznecov-System: / home / kyznecov # cat / proc / sys / kernel / yama / ptrace_scope 0 Saya melakukannya: echo 0 | sudo tee / proc / sys / kernel / yama / ptrace_scope
andreykyz

Dalam konsol semua bekerja dengan mudah. Tetapi jika saya menjalankan program di gerhana dan mencoba strace dari konsol saya mendapatkan masalah.
andreykyz

2
mungkin efek samping dari proses yang sudah dilacak? Saya memiliki masalah yang sama ketika menggunakan gdb pada proses induk dengan mode allow-fork-child
Jamie Pate

2
Saya mendapatkan bug ini juga pada 14,04. Adakah yang tahu jika ada bug yang dilaporkan?
detly
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.