Category Archives: Linux/Unix

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.

Пробуем .NET Core в Linux

Written by elwood

Прочитал статью про новый .NET Core. Очень впечатлило то, что можно будет создавать нативные приложуньки так, как это делается в Go. То есть командуешь тупа

dotnet build --native

и на выходе – микроскопический (ну, может, не совсем микроскопический) бинарник, не требующий толстого .NET-рантайма. И это – со всеми плюшками языка C# и развитого туллинга (хотя бы отладчик есть, в отличие от того же Go) ! В общем, я загорелся попробовать на нём собрать свою любимую поделку.

Но не срослось. На крайней команде из гайда хелло-ворлд отказался приветствовать мир:

$ dotnet run
Compiling dotnet for DNXCore,Version=v5.0

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:01.4364181
 

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime,
Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
The system cannot find the file specified.

В общем, решил, что пока рановато пробовать, завёл им issue и приготовился ждать. Очень надеюсь, что эта штука заработает хотя бы в течение года.

Как полностью удалить deb-пакет

Written by elwood

Волею судеб моей миссией стала подготовка deb-пакета. Ну, я его собираю-ставлю-пробую-удаляю-снова ставлю-удаляю и так далее. На каком-то шаге после удаления пакета обратил внимание на то, что конфиги (которые были записаны в /etc/blablabla) не удаляются. Ну удалил руками их и дело с концом. Но при переустановке пакета они не появились. Вот тут-то и начались мытарства.

Штирлиц постучал в дверь. Никто не ответил. Штирлиц постучал сильнее. Реакции не последовало. Штирлиц начал пинать дверь кованым сапогом. Дверь не поддавалась. «Закрыто» – подумал Штирлиц.

Так и я, через час бессмысленных проб и ошибок понял, что скорее всего конфиги я удалил зря, и вообще при переустановке они, похоже, не обновляются.

Оказалось, для того, чтобы удалить конфиги пакета, нужно выполнить

dpkg --purge <имя пакета>

После этого менеджер пакетов поставит где-то в своей базе флажок «конфигов для этого пакета больше нет», и при переустановке они будут заново разложены по директориям.