Strace / gdb neden root olmama rağmen bir işleme bağlanmıyor?


26
  • Root olarak giriş yaptım ama stracebana şunu veriyor:

    root @ kyznecov-Sistem: / home / kyznecov # ps -e | grep 111
     3807 puan / 2 00:00:00 111
     3810 puan / 2 00:00:00 111
    root @ kyznecov-Sistem: / ana sayfa / kyznecov # strace -p 3810
    
    attach: ptrace (PTRACE_ATTACH, ...): İşleme izin verilmedi
    İşleme eklenemedi. Kullanıcı adınız hedef kullanıcı adınızla eşleşirse
    / proc / sys / kernel / yama / ptrace_scope ayarını kontrol edin veya deneyin
    Yine kök kullanıcı olarak. Daha fazla ayrıntı için, /etc/sysctl.d/10-ptrace.conf adresini ziyaret edin.
    Kök @ kyznecov-Sistemi: / home / kyznecov
    
    Kök @ kyznecov-Sistem: / home / kyznecov # kedi / proc / sys / çekirdek / yama / ptrace_scope
    0
  • Daha sonra gdb, Eclipse CDT'de forking ile çok işlemli bir programda hata ayıklamak için kullanmaya çalıştım ve bana aynı sonucu / hatayı verdi:

    görüntü tanımını buraya girin

Herhangi bir fikir?


Ptrace_scope sıfır olduğundan önemli olmamalıdır, ancak bir deney olarak stracein daha basit bir kullanımını deneyebilirsiniz, burada izleme süreci takip edilen sürecin ebeveynidir. Örn strace /bin/echo test? Bu aynı hata mesajını veriyor mu?
Jordan Uggla

@EliahKagan, teoride OP'nin tanımladığı şey bir çekirdek böceği yokluğunda gerçekleşemez. Önümüzdeki 24 saat içinde biraz vaktiniz varsa ve yorumunuzu bir cevaba çevirirseniz, bu harika olurdu - Precise konusundaki testlerim hiçbir sorun çıkarmadı ve bu şekilde bir tuhaflığın olduğu kesin bir cevap olurdu. OP’nin konfigürasyonunda ... 29 Mayıs’taki ilk sorusundan beri geri dönmedi.
ish

@EliahKagan, Bir şey bana "izin verilmeyen işlem" bitini yeniden okuduğumda çarptı - çünkü sözde OpenVZ VPS / VM'leri kök saldığımda tonlarca önce gördüm (ana makine çekirdeğini paylaşıyorlardı, bu yüzden hayır). , sen sadece kendi küçük adanın kralısın) ... belki de durum buydu? Bu pastayı
ish

@izx Yapıştırmanızın süresi doldu. Ve bu konuyu (bir kabın içinde) aldım, herhangi bir fikir güzel olurdu
Kunal Tyagi

Yanıtlar:


25

Hatayı almak için bir neden:

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

yöntem zaten bağlı olmuştur çünkü gdb, straceya da benzer. Durumun böyle olup olmadığını kontrol etmek için koşun:

grep TracerPid /proc/$THE_PID/status

Sıfır değilse, bu işlemin izini süren mevcut bir programın pidesidir.


Bunu zaten farketmiyoruz, zaten GDB
ernesto

Bunu gösterdiğin için teşekkürler. Strace sarıcı ile bir program çalıştırıyordum. Program çatal ve sonra kendini yürütür. Sürülen çocuk, ana süreç zaten strace'ın kontrolü altında olduğu için takılmayan strace sarıcısını çalıştırırken hızla ölür.
Rob Kennedy,

18

İzx'in dediği gibi , bunun yalnızca bir çekirdek hatası nedeniyle olması gerekir. Bu nedenle , şu anda bu sorunu üretebilecek olan kişiye - özellikle de bu sorunun orijinal posteri de dahil olmak üzere - bu sayfayı iyice ve dikkatlice okuyarak ve etkilenen makinede çalışarak bir hata olarak bildirmesi tavsiye edilirubuntu-bug linux . Bu , bir ana hat çekirdeğinde ( yüklü olması gerekir ) üretemediğiniz sürece, bir ana hat (yukarı akış) çekirdeğine karşı değillinux , Ubuntu'da bildirilmelidir .yama

Ubuntu 10.10 ile başlayan her Ubuntu sürümünde beklenen davranış, B'nin A'nın (veya A'nın farklı olarak çalıştığı root) doğrudan bir çocuğu olmadığı sürece, A işleminin B işlemini izleyememesidir . Bu, bir saldırgan tarafından ele geçirilen bir işlemin, diğer işlemlerden bilgi bulmak için çekirdek tarafından sağlanan hata ayıklama olanaklarını kullanamayacağı şekilde bir güvenlik geliştirmesidir. Bu, Güvenlik Özellikleri topluluğu wiki sayfasının ptrace kapsamı bölümünde açıklanmıştır .

Bu kısıtlayıcı davranış varsayılandır, ancak işlem A'nın işlem A'nın kendisiyle aynı kullanıcı kimliğiyle çalışan herhangi bir B işlemini izlemesini sağlamak için değiştirilebilir. Yani, sisteminizi, herhangi bir işleminizin birbirini ayıklamasını sağlayacak şekilde yapılandırabilirsiniz. Bu, çalışmakta olan işlemlere hata ayıklayıcıları eklemeyi basitleştirir.

Bunun için ayar /proc/sys/kernel/yama/ptrace_scope sysctl tarafından gösterilir . 1daha kısıtlayıcı davranışı ve 0daha az kısıtlayıcı davranışı ifade eder . Ayar ile okunabilir:

cat /proc/sys/kernel/yama/ptrace_scope

Daha az kısıtlayıcı (varsayılan olmayan) davranış ile ayarlanabilir:

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

Ve daha kısıtlayıcı (varsayılan) davranış şu şekilde ayarlanabilir (veya geri ayarlanabilir):

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

Bu sorunun yalnızca orijinal posteri, straceşu anda çalışan bir işleme ptrace-scopeayarlanan bir örneği ekleyemedi 0, ancak orijinal poster o zamanki stracegibi çalışırken de yapamadı root. Bunun bir hatadan başka nasıl bir şey olabileceğini görmek zor - bir tane olarak bildirmenizi şiddetle tavsiye ederim.

İlk başta, bir ptrace_scopeortamın 0yok sayıldığı ve olduğu gibi ele alındığı problemi yeniden oluşturabileceğimi düşündüm 1. Ama artık aynı şeyleri tekrar yaptığımdan ve problemi tekrar edemediğimden, durumun bu olduğuna inanmıyorum. Bunu üzerinde test ettim:

  • Ana kutum olarak günlük kullandığım Lubuntu Precision amd64 fiziksel makine.
  • Lubuntu Precise i386 (12.04) canlı CD çalıştıran VirtualBox sanal makinesi.
  • Günlük olarak Quantal i386 (Ubuntu + 1) çalıştıran (20120608) aynı VirtualBox sanal makinesi.

Her üç makinede de beklenen davranış gerçekleşiyor ve bu sorunun orijinal posterinin sorduğu durumu tekrar üretemiyorum. Terminalden bazı metinler (Hassas canlı sistemden):

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 beklediğim gibi, askıya alınana kadar mesajlar üretmeye devam ettim.

Bunu bir hata olarak bildirmek için tekrar tavsiye ederek varıyorum. A maksimum kapsayıcı arama https://bugs.launchpad.net metin için (herhangi bir rapor Ubuntu hataları içerir) ptrace_scopeüretir açıkça hiçbiri bu hata için raporlar olduğu sonuçların sadece bir avuç, . Hatayı bildirmek başkalarına yardımcı olabilir, geçici çözümlere veya düzeltmeye yol açabilir ve muhtemelen bu sorun üzerinde çalışmaya devam etmenin tek anlamlı yoludur (sorunun hala devam ettiğini varsayarak).


Öneri için teşekkürler, yarın ayrıntılı olarak okuyacağım ve belki de bazı alt başlıklar ekleyeceğim, ancak bunun son derece eksiksiz olduğunu düşünüyorum :)
ish

Yazımda şunu görebilirsiniz: root @ kyznecov-Sistem: / home / kyznecov # kedi / proc / sys / çekirdek / yama / ptrace_scope 0 Yaptım: echo 0 | sudo tee / proc / sys / çekirdek / yama / ptrace_scope
andreykyz

Concole'da tüm kolayca çalışır. Ama eğer tutulmadıkça programı çalıştırıp konsoldan strace yapmayı denediğimde sorun olduğunu söylerim.
andreykyz

2
Sürecin izlenmekte olan bir yan etkisi olabilir mi? Ben çatal-çocuk kipi ile ebeveyn sürecinde gdb kullanırken aynı sorun vardı
Jamie Pate

2
Ben de bu hatayı 14.04'te alıyorum. Bir hata bildirilip bildirilmediğini bilen var mı?
14'te 3
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.