LINUX.ORG.RU

Сообщения PPP328

 

MeddleMonkey отключено во всех браузерах

Форум — Security

Судя по всему гугл начал считать что оно содержит вредоносное ПО, поэтому расширение автоматически отключено во всех браузерах у всех пользователей.

Для тех кто в танке что это:

MeddleMonkey (fork Violentmonkey with some features) is the most popular user script manager, with over 4 million users, which supports for Chromium-based browsers like Opera and Chrome.

 

PPP328
()

Значение переменной при динамической линковке и инициализаторе.

Форум — Development

Дано:
Динамическая линковка с libxml2. Гружу символ xmlMalloc:

__typeof__(xmlMalloc) xmlMalloc;

static void _init_xmlMalloc(void) __attribute__((constructor));
static void _init_xmlMalloc(void) {
    void * obj = lok_library_func(library, "xmlMalloc");
    xmlMalloc = * (__typeof__(xmlMalloc) *)obj;
}

В lok_library_func обычный dlsym с проверкой на нашел\не нашел. При не нашел - падаем.

Грузит, находит по адресу. Но xmlMalloc == NULL. Т.е. переменная не присвоена. Окей, обращаемся к коду libxml:

#if defined(DEBUG_MEMORY_LOCATION) || defined(DEBUG_MEMORY)
<...>
xmlMallocFunc xmlMalloc = (xmlMallocFunc) xmlMemMalloc;
<...>
#else
<...>
/**
 * xmlMalloc:
 * @size:  the size requested in bytes
 *
 * The variable holding the libxml malloc() implementation
 *
 * Returns a pointer to the newly allocated block or NULL in case of error
 */
xmlMallocFunc xmlMalloc = malloc;

Точно известно, что DEBUG_MEMORY_LOCATION и DEBUG_MEMORY не установлены. Значит переменная должна быть инициализирована при загрузке библиотеки (что и происходит при dlopen).

Вопрос - почему переменная NULL?

Из-за того, что она NULL происходит падение при первом же выделении памяти внутри самой либы (например на LIBXML_TEST_VERSION).

 ,

PPP328
()

Как поставить wine без засирания системы?

Форум — Desktop

xUbuntu 18.04. Раньше, когда устанавливал wine он добавлял свои «хвосты» просто везде - в меню приложений, в контекстное меню, заменяя «открыть как» своим списком.

Хочу просто поставить бинари чтобы они никуда ничего не писали меняя в меню. Запускать буду через xxx/wine app.exe отдельным скриптом.

Как? Скачать и разархивировать ubuntu deb-пакет в какой-нибудь /opt? Или есть нормальный метод?

 ,

PPP328
()

Как заставить работать Flash Player Stand Alone на Ubuntu 18.04?

Форум — Desktop

Если запускать на файл, то падает:

:/opt/flash_player_sa_linux.x86_64$ file flashplayer 
flashplayer: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.24, BuildID[sha1]=47d8ae3f68ab157106d8b75f62c168faff673f0c, stripped



$ ./flashplayer ~/downloads/file.swf 
libva info: VA-API version 1.1.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_1
libva info: va_openDriver() returns 0
libva info: VA-API version 1.1.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_1
libva info: va_openDriver() returns 0

(flashplayer:11697): GLib-GObject-WARNING **: 10:26:43.637: instance with invalid (NULL) class pointer

(flashplayer:11697): GLib-GObject-CRITICAL **: 10:26:43.637: g_signal_handlers_disconnect_matched: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

В интернетах говорят что оно пытается грузить libcurl3.

Если его попытаться поставить, то он хочет удалить много чего нужного:

Следующие пакеты будут УДАЛЕНЫ:
  cmake curl gimp-gmic libcurl4 libcurl4-openssl-dev
Следующие НОВЫЕ пакеты будут установлены:
  libcurl3

Как заставить проигрывать работать? Может можно перепаковать в новые(тм) крутые(с) безотказные(r) appimage?

 ,

PPP328
()

Почему Deluge p2p-шит когда нет раздач?

Форум — Desktop

Запустил deluge, скачал раздачу, выбрал «удалить торрент», получил пустой список.

Запустил VPN до ProtonVPN, через минуту получаю выкидывание на страницу «мы зафиксировали p2p трафик, остынь 5 минут, паренек или купи дорогой тариф». Перезапустил соединение, еще пара минут - снова та же страница. Проверил, в Deluge пустой список. Выключил deluge полностью - не выбрасывает на эту страницу.

Что deluge p2p-шит когда нет раздач?

 , , ,

PPP328
()

Здравствуйте, это канал про Linux?

Форум — Talks

…Посоветуйте аниме без сисек.

Не, ну реально, весь этот фансервис во всех современных тайтлах убивает желание смотреть что-либо на корню. В то время как ishuzoku reviewers прорывают очередное дно в индустрии аниме, стирая грань между хентаем и аниме (до такой степени что оказались забанены на стриминговых сервисах) сердце и душа просит чего-то доброго и вечного типа Slayers (хотя и там тоже периодически фансервисили по самое не хочу).

В общем поделитесь чем-то, что можно посмотреть бородатому дяде под 30 и где не будет мелькающих трусов или сисек. Такое вообще всё еще делают? Или такие тайтлы навсегда остались в 80х?

Список того, про что я веду речь:

  • Slayers
  • Ginga Eiyuu Densetsu
  • Ano Hi Mita Hana no Namae o Bokutachi wa Mada Shiranai (Ano Hana)
  • Ascendance of a Bookworm
  • Girls’ Last Tour
  • One Punch Man
  • Sleepy Princess in the Demon Castle
  • Battleangel Alita
  • To aru kagaku no railgun – этакое «анимешное чёрное зеркало» – сюжетки про чудеса техники и то как они могут повлиять. Не слишком научно достоверно в деталях, но задуматься можно
  • Dr Stone – анимешный научпоп. Главная его задача (помимо развлечения) – показать что наука это круто
  • Yakusoku no Neverland – майндгейм, ангст. В конце, вроде как, намёк на антивойну, но не уверен - не дождавшись главы дропнул.
  • School Live – поведение ОЯШкольниц в зомбоапокалипсисе. Довольно трогательно пытаются сохранить модели поведения старого мира, понимая при этом (нуу.. почти все) ситуацию.

 ,

PPP328
()

Начал подлагивать звук в VLC

Форум — Desktop

Пробовал делать mv ~/.config/vlc, начиная с чистых настроек. Всё равно периодически подлагивает. Файлы mp3, SSD, раньше такого не было.

Как диагностировать?

Инфа по диску:

Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   098   098   000    Old_age   Always       -       6646
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       170
177 Wear_Leveling_Count     0x0013   099   099   000    Pre-fail  Always       -       6
179 Used_Rsvd_Blk_Cnt_Tot   0x0013   100   100   010    Pre-fail  Always       -       0
181 Program_Fail_Cnt_Total  0x0032   100   100   010    Old_age   Always       -       0
182 Erase_Fail_Count_Total  0x0032   100   100   010    Old_age   Always       -       0
183 Runtime_Bad_Block       0x0013   100   100   010    Pre-fail  Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0032   066   048   000    Old_age   Always       -       34
195 Hardware_ECC_Recovered  0x001a   200   200   000    Old_age   Always       -       0
199 UDMA_CRC_Error_Count    0x003e   100   100   000    Old_age   Always       -       0
235 Unknown_Attribute       0x0012   099   099   000    Old_age   Always       -       5
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       8616181633

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%      6646         -

$ sudo smartctl -i /dev/sda
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-5.0.0-37-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Device Model:     Samsung SSD 860 EVO 1TB
Serial Number:    S4FMNF0M808306B
LU WWN Device Id: 5 002538 e998026fe
Firmware Version: RVT03B6Q
User Capacity:    1 000 204 886 016 bytes [1,00 TB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
Form Factor:      2.5 inches
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   Unknown(0x09fc), ACS-4 T13/BSR INCITS 529 revision 5
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Tue Nov 24 01:59:52 2020 MSK
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

 

PPP328
()

Рабочее место на балконе

Галерея — Рабочие места

Если до катаклизма локдауна по удаленке можно было поработать полулежа на кровати (но не более пары дней), то с переходом на полноценную удаленку нужно было организовать рабочее место дома.

К сожалению в 19 метровой однокомнатной квартире где проживают два человека это оказалось сложной задачей, поэтому место для стула нашлось только на балконе. Сверлильному Zitrek’у пришлось временно подвинуться (он все равно не прикручен, куда этот 20 килограммовый гроб денется). Чуть позже надо будет выкинуть этот икеевский столик который был тут поставлен и сделать вместо него нормальный со слотом под стабилизатор для станка.

На том же балконе есть откидной стол для второго члена семьи, который я периодически экспроприирую и использую как верстак.

Ноутбук Thinkpad L560, который вроде бы и thinkpad, но вроде бы и нет. По крайней мере вертикальный нажим на вставленную зарядку он выдержал, сломав защелку в корпусе, но не сдохнув сам. Тач залит водой, поэтому вместо него используется клипипка. Логотип я случайно оторвал, поэтому вместо него стикер, чтобы внутрь не попадала влага (там дырочка для защелки логотипа). Под ноутбуком док-станция, раньше использовал на работе для второго монитора, сейчас дома чтобы он просто удобно стоял и не пришлось зарядку перетыкать. Такие доки больше не делают, все перешли на usb c и это бесит, потому что раздалбывается полезный разъем в самом ноутбуке.

 

PPP328
()

Как подобрать совместимый геймпад?

Форум — Desktop

У моего noname-китайца начали глючить контроллеры кнопок.
Как подобрать геймпад, который будет 100% совместим с Linux без плясок с бубном?
Пожелания:

  • Цена до 2000р
  • Форм-фактор Ps2-3 (привык к нему)
  • Сиськи нужны
  • Провода. У меня есть тенденция забывать батарейки внутри, прошлый беспроводной я так и погубил.

 ,

PPP328
()

Насколько OpenGL deprecated?

Форум — General

Сижу на Ubuntu 18.04 (intel карточка).

Попробовал скомилить и запустить вулкановский пример - компилится но сегфолтится на init. Вычитал что надо ставить отдельный драйвер (!) чтобы заработали vulkan приложения.

mesa-vulkan-drivers/bionic-updates 20.0.8-0ubuntu1~18.04.1 amd64
  Mesa Vulkan graphics drivers

Меня прекрасно устраивает текущий видеодрайвер, который работает без тиринга или еще каких артефактов.

Я так понимаю, что разрабатывая под вулкан мне нужно требовать от остальных пользователей чтобы они себе также ставили эти драйвера как под Linux так и под Windows.

Всвязи с этим вопрос - а насколько разработка под OpenGL ныне считается deprected?

А то получается как в «12 стульях» - немое кино уже не актуально, а кина со звуком еще нет.

 , ,

PPP328
()

Lorwiki умерло

Форум — Linux-org-ru
Domain "lorwiki.org.ru" not found
Домен продается!
Цена: 5000 руб. при оплате напрямую
Цена: 7000 руб. при оплате через магазин доменов nic.ru
По вопросу приобретения писать на email: moderator777rus@mail.ru

Оно с концами всё, даже базу не скопировали, да?

 

PPP328
()

Я снова пришел поблевать на единорога

Форум — Development
#include <zlib.h>
...
    if (method == FEN_COMPRESS_TYPE_GZIP)
        idata->ret = inflateInit2(&idata->strm, FEN_ENABLE_GZIP);
# pvs-studio report:
./projects/shared/libfenrir/code/utils/fen_gzip.c:140:1: warn	V1031 The 'inflateInit2' function is not declared. Passing data to or from this function can be affected.
./projects/shared/libfenrir/code/utils/fen_gzip.c:142:1: warn	V1031 The 'inflateInit2' function is not declared. Passing data to or from this function can be affected.

zlib.h:

#  define inflateInit2(strm, windowBits) \
          inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
                        (int)sizeof(z_stream))

Ну то есть понятно, да? Оно даже не пытается разворачивать макросы/препроцессить. Тупо видит xxx() - считает это функций.

600 000-∞р/год (в зависимости от того насколько вы большая компания) за херобору которая даже gcc -E не делает чтобы получить список актуальных функций.

Я понимаю, что когда делаешь сложный технический продукт можно чего-то не учесть, типа какие-нибудь auto shared_ptr с лямбдами и блекджеком. Но получение списка функций - это базовый функционал, епт!

P.S. косвенную проверку указателя на NULL также все еще не научились. «Либо == NULL либо её у вас нет.»

Кто там из клоунов незабаненный остался? @PVS-Studio_engineer, @Andrey_Karpov_2009, @AndreyKarpovN, @Andrey_Karpov_2020

Перемещено anonymous_incognito из talks

 ,

PPP328
()

Как починить конфликт libicu на Ubuntu 18.04?

Форум — Development

Эти [нет слов чтобы описать] умные люди сломали на Ubuntu 18.04 работу libicu-dev параллельно с libicu-dev:i386:

https://askubuntu.com/questions/1120326/install-libicu-dev-libicu-devi386-at-the-same-time-produce-error-at-ubuntu18-o

Сделав у них одинаковый пакет в одном и том же месте. Это даже в Debian починили, а в Ubuntu фикс не завезли уже два года как.

Как этот п****ц разгрести, если это мешает кросскомпилить и даже libxml2-dev из-за этого не поставить, потому что он зависит от libicu.

https://bugs.launchpad.net/ubuntu/+source/icu/+bug/1784135

Вроде как в debian это как-то починили, но не могу найти фикс.

 , , ,

PPP328
()

А почему никто не обсуждает, что Mozilla распространяет по техническим каналам политику?

Форум — Talks

Mozilla воспользовалась push-уведомлениями для распространения политической рекламы в Firefox

Пользователи мобильной версии Firefox для Android выражают возмущение нецелевым использованием функции доставки push-уведомлений для распространения рекламы публикации в блоге Mozilla с призывом подписать петицию StopHateForProfit, направленную против поддержки ненависти, расизма и дезинформации в Facebook. Уведомление было отправлено через активный по умолчанию канал «default2-notification-channel», предусмотренный для отправки важных технических уведомлений. Применение подобного канала для доставки политически ангажированной рекламы является неприемлемым и рассматривается некоторыми пользователями как нарушение миссии Mozilla.

Собсно сабж.

https://www.opennet.ru/opennews/art.shtml?num=53427

 ,

PPP328
()

Как самостоятельно проверить ssl-сертификат?

Форум — Development

Предположим, что у нас есть контрол-сервер с доменом на https. Какие действия нам нужно совершить чтобы проверить, что это не evil twin с сертификатом от «Дядя Вася и Ко»?

К серверу подключаемся сокетом, потом работаем при помощи библиотеки openssl.

 , ,

PPP328
()

Что сервер должен отвечать временно забаненному клиенту?

Форум — Desktop

Положим, что на сервере стоит авторизация и клиент использовал неверный ключ (речь не о живых людях, везде разговаривают машины Слава Роботам! Убить всех человеков!). Сервер банит клиента на какое-то время чтобы избежать подбора ключа (ждет когда ключ сменится). Так вот, какой код должен отвечать сервер (и должен ли отвечать вообще) если временно забаненный клиент продолжает долбиться на тот же апи с невалидным ключом.

 , ,

PPP328
()

Прошу подтверждения бага - не работает gdebi на 18.04

Форум — Desktop

Xubuntu 18.04.

При попытке установки пакета через gdebi-gtk он просто закрывается.

Если попробовать то же самое в консольной версии (на которой построен gdebi-gtk), то:

alex@ThinkPad-L560:~/downloads/dists$ sudo gdebi ./zoom_amd64_2.deb 
[sudo] пароль для alex: 
Reading package lists... Done
Building dependency tree        
Reading state information... Done
Reading state information... Done

Zoom, #1 Video Conferencing and Web Conferencing Service 
 Zoom, the cloud meeting company, unifies cloud video conferencing, simple online meetings, and group messaging into one easy-to-use platform. Our solution offers the best video, audio, and screen-sharing experience across Zoom Rooms, Windows, Mac, Linux, iOS, Android, and H.323/SIP room systems.
Вы хотите установить этот пакет? [д/Н]y

alex@ThinkPad-L560:~/downloads/dists$ echo $?
0

alex@ThinkPad-L560:~/downloads/dists$ sudo gdebi ./zoom_amd64_2.deb 
Reading package lists... Done
Building dependency tree        
Reading state information... Done
Reading state information... Done

Zoom, #1 Video Conferencing and Web Conferencing Service 
 Zoom, the cloud meeting company, unifies cloud video conferencing, simple online meetings, and group messaging into one easy-to-use platform. Our solution offers the best video, audio, and screen-sharing experience across Zoom Rooms, Windows, Mac, Linux, iOS, Android, and H.323/SIP room systems.
Вы хотите установить этот пакет? [д/Н]д
(Чтение базы данных … на данный момент установлено 277074 файла и каталога.)
Подготовка к распаковке ./zoom_amd64_2.deb …
Распаковывается zoom (5.0.418682.0603) на замену (3.5.361976.0301) …
run post uninstall script, action is upgrade ...
Настраивается пакет zoom (5.0.418682.0603) …
run post install script, action is configure...
Обрабатываются триггеры для gnome-menus (3.13.3-11ubuntu1.1) …
Обрабатываются триггеры для desktop-file-utils (0.23-1ubuntu3.18.04.2) …
Обрабатываются триггеры для mime-support (3.60ubuntu1) …
Обрабатываются триггеры для shared-mime-info (1.9-2) …

Предполагаю, что проблема в том, что он перестал реагировать на английские y/N, которые гуй ему и посылает.

 ,

PPP328
()

Нюансы запуска процессов через system/exec

Форум — Development

Случай #1:

Как известно, при вызове exec происходит завершение всех нитей вызывающего кроме той, что вызвала system. При этом открытые дескрипторы клонируются в новый процесс (если у них не указан флаг FD/SOCK_CLOEXEC).

Представим следующую гипотетическую ситуацию:

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

Положим, что так как эта строка может содержать переменные среды, какие-то выражения подстановки и shell-related команды и синтаксис программист, написавший эту программу посчитал, что самым оптимальным образом будет запускать эту строку с помощью команды system, которая не требует списка аргументов, как семейство exec*. Плюс, так как system «под капотом» вызывает sh -c ..., то автоматически подставятся переменные, а shell-related команды и синтаксис будут работать как нужно. Так вот, глянем исходник system, например, для glibc:

<Сначала хотел показать исходник glibc, но тут слишком дофига получается кода, поэтому сжато: clone + exec + waitpid, кстати ман говорит про fork + exec + waitpid, что не совсем то же самое>

При вызове clone/fork происходит копирование открытых дескрипторов, которые наследует процесс, который запустил system. Предположим, что кто-то передал для запуска строку, содержащую запуск программы (назовем ее evil), выполняющей следующие действия:

if (fork() != 0)
    exit(0);

Что превращает ее в отвязанного от родителя демона. Однако этот fork тоже наследует все открытые хэндлеры, что приводит нас к тому, что этот демонутый процесс evil получил копию всех открытых хендлеров супервизора, однако стал от него отвязан (system вернул 0, супервизор считает, что работа выполнена).

Теперь предположим, что это супервизор с управлением по сети. То есть супервизор открывает серверный сокет и слушает команды, которые ему приходят извне. Не будем обсуждать защищенность передачи или канала связи, всё можно сломать, суть сейчас не в этом. Суть в том, что на момент запуска system супервизор владел открытым серверным сокетом (!). Да, по совести и по правилам при его создании ему нужно было выставить SOCK_CLOEXEC, но скажем честно, кто своим серверным сокетам выставляет флаг, о котором даже в мануалах на socket из 153 строк отдано 2 (!), т.е. всего 1.3%?

Таким образом, пройдя через всю цепочку форков копия серверного сокета оказывается у демонутого evil:

super      9053 alex    3u  IPv4 11458560      0t0  TCP *:34002 (LISTEN)
super      9053 alex    4u  IPv4 11464960      0t0  TCP localhost:34002->localhost:41308 (ESTABLISHED)
evil       9257 alex    3u  IPv4 11458560      0t0  TCP *:34002 (LISTEN)

Положим, что процесс супервизора по какой-то причине завершился. Ну, например, выполнив свою работу или по ошибке. И теперь начинается самая мякотка. Ведь в системе уже открыт слушающий на порту 34002 сокет! И принадлежит он программе evil! Таким образом она может прикинуться сервером, а супервизор, в свою очередь, не сможет вернуть свой сокет, поэтому система не даст ему открыть второй сокет на том же порту без REUSEPORT:

SO_REUSEPORT (since Linux 3.9)
              Permits multiple AF_INET or AF_INET6 sockets to be bound to an identical socket address.  This option must be set on each socket (including the first socket) prior to calling bind(2) on the socket.  To prevent port hijacking, all of  the  pro‐
              cesses binding to the same address must have the same effective UID.  This option can be employed with both TCP and UDP sockets.

В общем случае, когда какая-то программа-сервер запускается и получает ALREADYINUSE то надо бы сказать мол, «не не могу работать, наверное другая копия меня уже запущена» и выключиться (ну или ожидать его освобождения).

Мы же не хотим port hijacking, верно? А вот все равно профукали. Ну и теперь evil может делать что угодно. Может получать данные от клиентов, может им даже что-то отвечать,может получать список команд для запуска и запускать вместо них что угодно, сообщая наверх что всё хорошо.

Собственно, вопрос #1: почему на серверный сокет автоматически при создании не вешается FD_CLOEXEC?

Случай #2:

Мы - супервизор, запускающий программы, забудем про сетевое взаимодействие, мы сами знаем, что нам запускать. Запускают нас от root, для того, чтобы мы могли делать какую-то очень важную вещь, ну, например, читать какой-то root-owned файл:

-rw-------  1 root root        7 июн  5 23:51 rootonly

Изобразим супервизор упрощенно:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>       
#include <sys/wait.h>
#include <errno.h>       
#include <pwd.h>


static void dowork(void) {
    int pid = fork();
    int status;
    switch (pid) {
        case -1 : exit(EXIT_FAILURE);
        case 0  :
            if (setuid(1000) == -1) {
                printf("u:%u\n", errno);
            }
            if (seteuid(1000) == -1) {
                printf("e:%u\n", errno);
            }
            execl("./hijack_evil.elf", "./hijack_evil.elf", NULL);
            printf("cannot run\n");
            exit(EXIT_FAILURE);
        default :
            wait(&status);
    }
}

int main(void) {
    FILE * fileroot = fopen("/tmp/rootonly", "r");
    printf("I am %s, #%u/%u\n", getpwuid(getuid())->pw_name, geteuid(), getuid());
    
    dowork();
    
    fclose(fileroot);
    return 0;
}
gcc hijack_root.c -o hijack_root.elf

И программу, которой нельзя давать рутовые права:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>       
#include <sys/wait.h>
#include <pwd.h>

int main(void) {
    printf("I am %s, #%u/%u\n", getpwuid(getuid())->pw_name, geteuid(), getuid());
    // my stdin is 0, stdout is 1, stderr is 2, therefore...
    char buf[1024];
    read(3, buf, 1024);
    printf("%s\n", buf);
    return 0;
}
gcc hijack_evil.c -o hijack_evil.elf

Проверяем, что просто так файл прочитать нельзя:

alex@ThinkPad-L560:~$ cat /tmp/rootonly 
cat: /tmp/rootonly: Отказано в доступе
alex@ThinkPad-L560:~$ echo $USER/$UID
alex/1000

И запускаем супервизор:

$ sudo ./hijack_root.elf 
I am root, #0/0
I am alex, #1000/1000
SECRET

При этом мы не можем ставить FD_CLOEXEC на каждый хендлер, открываемый в супервизоре, потому что он может понадобиться для целей супервизора в его форках. Соответственно вопрос #2: почему внешние программы, запускаемые через exec наследуют хендлеры? Ведь очевидно, что это может быть использовано только для «угона» файлов

 ,

PPP328
()

Как вызвать exec* без утечки памяти?

Форум — Development

Когда вызывается функция семейства exec, то параметры копируются в память нового процесса, который замещает текущий без возможности возврата.

Соответственно, если параметры выделены на куче - формально происходит утечка памяти (still reachable в формулировке valgrind). Да, система заберет память назад по завершению процесса (флаг on close). Но ведь формально это неправильно.

Речь про случай, когда мы делаем fork перед exec.

Если выделять на стеке - то тогда есть жесткое ограничение на размер аргументов (плюс стек не резиновый, команда формально может быть до 3.5 Гб длиной, а стек всего метр-4).

Или может можно как-то по другому выделить?

 ,

PPP328
()

Прочитать stderr и stdout запускаемого приложения

Форум — Development

Гугл завален инструкциями с переадресацией stderr в stdout и использованием popen. Адекватного описания как сделать то, что мне надо не нашел. Такая задача никогда передо мной не вставала, поэтому прошу пояснить, как сделать то, что мне надо.

Что мне надо:

  1. Запустить заданную программу с аргументами
  2. По ее завершению прочитать весь её stdout и stderr отдельно

Переадресовать их в физические файлы и потом их прочитать нельзя - саму команду редактировать нельзя (там могут быть и редиректы и всё прочее), нужно только актуально то, что она выплюнула в out/err.

Вангую что тут надо как-то совокупить dup2, exec а потом вычитать через fgets. Но чот оно у меня не стыкуется.

Кто может направить в правильную сторону?

 , ,

PPP328
()

RSS подписка на новые темы