strace и setuid

Written by elwood

Игрался сегодня с strace. Запускал в нём ping. Но пинг, запущенный таким образом, почему-то отказывался работать, возвращая ошибку:

elwood@elwood:~$ strace -o out ping ya.ru
ping: icmp open socket: Operation not permitted

При этом просто пинг (без strace) вполне себе работал.

Почему так ?..

Выяснилось, что дело в особых правах на ping. Прикол в том, что для пинга установлен бит setuid:

elwood@elwood:~$ ls -l `which ping`
-rwsr-xr-x 1 root root 44168 May  7  2014 /bin/ping

И при запуске он по сути работает от рута. А strace такими правами не обладает, и запуская ping через него, я получал ошибку. Если убрать setuid бит с /bin/ping, то при запуске ping я тоже буду получать ошибку:

elwood@elwood:~$ sudo chmod u-s `which ping`
elwood@elwood:~$ ls -l `which ping`
-rwxr-xr-x 1 root root 44168 May  7  2014 /bin/ping
elwood@elwood:~$ ping ya.ru
ping: icmp open socket: Operation not permitted

Решить проблему можно либо добавив setuid бит для strace (chmod u+s `which strace`), либо запуская strace через sudo.