Як прокоментував izx , це може статися лише через помилку ядра. Тому всім, хто може наразі створити цю проблему - включаючи та особливо оригінальний плакат цього питання - було б радимо повідомити про це як про помилку , прочитавши цю сторінку ретельно та уважно, а потім запустивши ubuntu-bug linux
на постраждалу машину . Про це слід звітувати протиlinux
в Ubuntu, а не проти основного ядра (вище), якщо ви не зможете створити його на основному ядрі (вам доведеться yama
завантажити).
Очікувана поведінка у кожній версії Ubuntu, починаючи з Ubuntu 10.10, полягає в тому, що процес A не може простежити запущений процес B, якщо B не є прямим дочірнім пристроєм A (або A працює як root
). Це підвищення безпеки, завдяки якому процес, який зловмисник порушує, не може використовувати засоби налагодження, що надаються ядром, для виявлення інформації з інших процесів. Це пояснюється в розділі сфери ptrace на вікі-сторінці спільноти Функції безпеки .
Це обмежувальне поведінка за замовчуванням, але його можна змінити, щоб дозволити процесу A відстежувати будь-який запущений процес B, який запускається з тим самим ідентифікатором користувача, що і власний процес A. Тобто ви можете налаштувати вашу систему, щоб дозволити будь-якому з ваших процесів налагоджувати один одного. Це спрощує приєднання налагоджувачів до вже запущених процесів.
Налаштування для цього відкривається системою /proc/sys/kernel/yama/ptrace_scope
sysctl . 1
позначає більш обмежувальну поведінку і 0
менш обмежувальну поведінку. Налаштування можна прочитати за допомогою:
cat /proc/sys/kernel/yama/ptrace_scope
Менш обмежувальну (не за замовчуванням) поведінку можна встановити за допомогою:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
А більш обмежувальну (за замовчуванням) поведінку можна встановити (або повернути назад) за допомогою:
echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Мало того, що оригінальний плакат цього питання не зміг приєднати strace
екземпляр до поточно запущеного процесу, ptrace-scope
встановленого на 0
, але оригінальний плакат тоді ще не міг цього зробити під час запуску strace
як root
. Важко зрозуміти, як це може бути не що інше, як помилка - настійно рекомендую повідомити про це як про одне.
Спочатку я думав, що мені вдається відтворити проблему, коли ptrace_scope
налаштування 0
ігнорується і трактується так, ніби воно є1
. Але я більше не вірю, що це так, тому що я знову все робив, і не можу відтворити проблему. Я перевірив це на:
- Фізична машина Lubuntu Precision amd64, яку я щодня використовую як основну коробку.
- Віртуальна машина VirtualBox, на якій працює живий компакт-диск Lubuntu Precision i386 (12.04).
- Ідентична віртуальна машина VirtualBox, що працює щоденно наживо Quantal i386 (Ubuntu + 1) (20120608).
На всіх трьох машинах відбувається очікувана поведінка, і я не можу відтворити умову, про яку задається оригінальний афіша цього питання. Ось текст із Терміналу (із системи Precision Live):
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
продовжував видавати повідомлення, поки я не призупинив її, як очікувалося.
Я закінчую, рекомендуючи ще раз повідомити про це як про помилку. Максимально включений пошук на https://bugs.launchpad.net (який включає будь-які повідомлення про помилки Ubuntu) для тексту ptrace_scope
дає лише декілька результатів, в яких явно жоден не є звіти про цю помилку . Повідомлення про помилку допоможе іншим, може призвести до вирішення проблем чи виправлення, і, ймовірно, єдиний змістовний спосіб продовжувати роботу над цією проблемою (якщо припустити, що проблема все ще виникає).
strace /bin/echo test
? Це дає те саме повідомлення про помилку?