Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 2382 - Доступ к протоколу ICMP от пользователя   Make a simular bug
Summary: Доступ к протоколу ICMP от пользователя
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Сетевые возможности ; TCP/IP (show other bugs)
Version: 1.0.9
Hardware: PC All
: P4 normal
Target Milestone: ---
Assignee: Andrey Vusik
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 1804 2383
  Show dependency treegraph
 
In work:
Reported: 2008-09-07 17:00 MSD by Leonid Shadevsky
Modified: 2010-03-08 19:40 MSK (History)
4 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Leonid Shadevsky 2008-09-07 17:00:17 MSD
Некоторые программы требуют доступ к протоколу ICMP, например Codesys - для работы с оборудованием (контроллерами). Но по-умолчанию в wine он доступен только под рутом.
Comment 1 Andrey Vusik 2008-09-07 17:16:17 MSD
int sid=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
    if (sid < 0) {
        MESSAGE("WARNING: Trying to use ICMP (network ping) will fail unless running as root\n");
        SetLastError(ERROR_ACCESS_DENIED);
        return INVALID_HANDLE_VALUE;
Comment 2 Vitaly Lipatov 2008-09-07 19:31:46 MSD
Есть вариант добавить необходимую функциональность в etersafe и действовать через него.
Также возможно более правильный или быстрый вариант:
# chcap cap_net_raw=ep /usr/bin/wine-glibc (или wine-preloader, не знаю)ю
см. об этом здесь:
http://www.winehq.org/pipermail/wine-devel/2007-December/061479.html
Comment 3 Vitaly Lipatov 2008-09-07 20:40:00 MSD
http://www.informatik.uni-oldenburg.de/~akw/files/capfaq.pdf

11 How do I start a process with a limited set
of capabilities?
Get the libcap library and use the execcap utility. The following example
starts the update daemon with only the CAP SYS ADMIN capability.
execcap ’cap_sys_admin=eip’ update

12 How do I start a process with a limited set
of capabilities under another uid?
Use the sucap utility which changes uid from root without loosing any capabilities.

Normally all capabilities are cleared when changing uid from root.
The sucap1 utility requires the CAP SETPCAP capability. The following example
starts updated under uid updated and gid updated with CAP SYS ADMIN raised
in the Effective set.
sucap updated updated execcap ’cap_sys_admin=eip’ update
Comment 4 Andrey Vusik 2008-09-07 21:50:55 MSD
Как выяснилось, команда chcap нигде не реализована...
Comment 5 Vitaly Lipatov 2008-11-29 15:28:14 MSK
В закрытой части сделаны работающие заглушки для
int etersoft_icmp_socket
int etersoft_icmp_getsockopt
int etersoft_icmp_setsockopt
ssize_t etersoft_icmp_sendto
ssize_t etersoft_icmp_recvfrom
int etersoft_icmp_shutdown
Comment 6 Andrey Vusik 2009-03-12 22:34:34 MSK
По поводу chcap...
Об этом скрипте рассказывается здесь на примере ping:
http://lkml.indiana.edu/hypermail/linux/kernel/0210.3/0084.html
Я его собрал и проверил - работает.
Comment 7 Vitaly Lipatov 2009-03-12 22:41:56 MSK
(In reply to comment #6)
> По поводу chcap...
> Об этом скрипте рассказывается здесь на
> примере ping:
> http://lkml.indiana.edu/hypermail/linux/kernel/0210.3/0084.html
> Я его собрал и проверил - работает.
Тогда нужно разобраться, как эту команду предоставить пользователям, добавить её в пакет и описать в документации.
Comment 8 Denis Nazarov 2010-01-23 17:35:01 MSK
Решение для ALTLinux p5

#apt-get install libcap-utils
#setcap 'cap_net_raw=ep' /usr/bin/wine-preloader

после этого начинает работать ICMP.

В ALT 4.1 в пакете libcap-utils нет утилиты setcap, но простая установка этого пакета из репозитория пятой платформы зависимостей за собой не тянет и, насколько я понял, проблем не вызывает.

Для убунты рецепт здесь http://oleg.in-da.ru/soft/tcpdump/socket_operation_not_permitted , правда, не для wine, а для tcpdump, но сути дела это не меняет
Comment 9 Andrey Vusik 2010-01-30 16:53:23 MSK
(In reply to comment #8)
> Решение для ALTLinux p5
> 
> #apt-get install libcap-utils
> #setcap 'cap_net_raw=ep' /usr/bin/wine-preloader
> 
> после этого начинает работать ICMP.
> 
> В ALT 4.1 в пакете libcap-utils нет утилиты setcap, но
> простая установка этого пакета из
> репозитория пятой платформы зависимостей
> за собой не тянет и, насколько я понял,
> проблем не вызывает.
> 
> Для убунты рецепт здесь
> http://oleg.in-da.ru/soft/tcpdump/socket_operation_not_permitted ,
> правда, не для wine, а для tcpdump, но сути дела
> это не меняет
> 

Проверил в Альте. На примере ping.exe рецепт работает. Багу закрываю.
Comment 10 Andrey Vusik 2010-01-30 17:34:13 MSK
Добавил информацию в документацию.
Comment 11 Andrey Vusik 2010-03-08 16:58:38 MSK
> 
> Проверил в Альте. На примере ping.exe рецепт
> работает. Багу закрываю.
> 

Из-за недоработанного ping вывод был сделан на основании отсутствия сообщения 
"WARNING: Trying to use ICMP (network ping) will fail unless running as root"

Сегодня когда сравнивал версии моего пинга скомпиленных в windows и в linux столкнулся с проблемой:

Pinging ya.ru [213.180.204.8]

Reply from 0.0.0.0  Time=1129576ms  TTL=239
Error: icmpEcho.Status=1130088

В windows этот же пинг работает корректно.

Скорее всего тут дело не в доступе к ICMP, а в wine и ping, но на всякий случай следует проверить ещё на какой-нибудь программе.

Comment 12 Denis Nazarov 2010-03-08 19:40:34 MSK
(In reply to comment #11)
> > 
> > Проверил в Альте. На примере ping.exe рецепт
> > работает. Багу закрываю.
> > 
> 
> Из-за недоработанного ping вывод был сделан
> на основании отсутствия сообщения 
> "WARNING: Trying to use ICMP (network ping) will fail unless running as root"
> 
> Сегодня когда сравнивал версии моего пинга
> скомпиленных в windows и в linux столкнулся с
> проблемой:
> 
> Pinging ya.ru [213.180.204.8]
> 
> Reply from 0.0.0.0  Time=1129576ms  TTL=239
> Error: icmpEcho.Status=1130088
> 
> В windows этот же пинг работает корректно.
> 
> Скорее всего тут дело не в доступе к ICMP, а в
> wine и ping, но на всякий случай следует
> проверить ещё на какой-нибудь программе.
> 

насчет вашего ping.exe ничего не могу сказать, но я рецепт предложил после того, как опробовал его на самописной dll, которая использует icmp.dll (in windows) для выполнения пинга. Dll используется в 1С как внешняя компонента, соответственно, в винде работало нормально, под wine столкнулся с этой проблемой.