Подмена layman`а [РЕШЕНО]

Какая-то дичь произошла с моей системой:

~ $ sudo layman -l
usage: layman [-h] [--indent INDENT] [-v] FILE1 FILE2
layman: error: the following arguments are required: FILE1, FILE2
~ $ sudo emerge -av layman
usage: emerge [-h] [--indent INDENT] [-v] FILE1 FILE2
emerge: error: argument FILE1: can't open 'layman': [Errno 2] No such file or directory: 'layman'
~ $ sudo layman -h
usage: layman [-h] [--indent INDENT] [-v] FILE1 FILE2

Diff two JSON files

positional arguments:
  FILE1
  FILE2

optional arguments:
  -h, --help       show this help message and exit
  --indent INDENT  Indent output by n spaces
  -v, --version    show program's version number and exit

Что вообще произошло и как это можно вылечить? Я даже пакеты одноимённые не ставил, откуда такая напасть?

Сергей Клюйков wrote:

Какая-то дичь произошла с моей системой:

[…]

Что вообще произошло и как это можно вылечить? Я даже пакеты одноимённые не ставил, откуда такая напасть?

Для полноты печальности картины:

~ $ sudo ebuild /usr/portage/app-portage/layman/layman-2.4.2.ebuild merge
usage: ebuild [-h] [--indent INDENT] [-v] FILE1 FILE2
ebuild: error: argument FILE2: can't open 'merge': [Errno 2] No such file or directory: 'merge'
~ $ ls -la /usr/bin/layman
lrwxrwxrwx 1 root root 31 фев 16 01:52 /usr/bin/layman -> ../lib/python-exec/python-exec2
~ $ ls -la /usr/bin/emerge
lrwxrwxrwx 1 root root 31 май  2 09:35 /usr/bin/emerge -> ../lib/python-exec/python-exec2

Это что-то новенькое.

Итог расследования:

Кто-то пакетом или скриптом или фиг знает чем подменяет /usr/lib/python-exec/python-exec2 и вставляет какую-то ерунду.
Починить можно:

sudo /usr/lib/python-exec/python2.7/emerge -av python-exec

Так проявилась какая-то очень неоднозначная уязвимость.

Кто-то пакетом или скриптом или фиг знает чем подменяет /usr/lib/python-exec/python-exec2 и вставляет какую-то ерунду.

а не подскажете, что за “ерунда” вместо python-exec2-а была?

ну и чтоб понять это пакет какой-то поставил, или злобный хакер:
/bin/grep -E '/usr/\S*/python-exec2' /var/db/pkg/*/*/CONTENTS

и вообще, какой-либо бэкап поломавшейся системы вы, случайно, не сделали для дальнейших разбирательств?

У меня тоже подменилось, только у меня генту и систему я уже давненько не обновлял. При попытке запуска утулит emerge, equery и т.п. вызывается youtube-dl.

/bin/grep -E ‘/usr/\S*/python-exec2’ /var/db/pkg/*/*/CONTENTS

/var/db/pkg/dev-lang/python-exec-2.4.4/CONTENTS:obj /usr/lib/python-exec/python-exec2 7157717ea4b74eedcebcf2d33869972a 1486315446
/var/db/pkg/dev-lang/python-exec-2.4.4/CONTENTS:obj /usr/bin/python-exec2c ae4bcabc3190d5f962d35c6c03f069b1 1486315446

Владислав Хороший wrote:

У меня тоже подменилось, только у меня генту и систему я уже давненько не обновлял. При попытке запуска утулит emerge, equery и т.п. вызывается youtube-dl.

/bin/grep -E ‘/usr/S*/python-exec2’ /var/db/pkg/*/*/CONTENTS

/var/db/pkg/dev-lang/python-exec-2.4.4/CONTENTS:obj /usr/lib/python-exec/python-exec2 7157717ea4b74eedcebcf2d33869972a 1486315446
/var/db/pkg/dev-lang/python-exec-2.4.4/CONTENTS:obj /usr/bin/python-exec2c ae4bcabc3190d5f962d35c6c03f069b1 1486315446

Нее, у меня подменилось на какой-то просмотрщик файлов с сравнением. Тоже странно конечно.

Эпопея продолжается, но это уже в другой ветке. Я не обновлялся, кстати, всего неделю.

Михаил Гагауз wrote:

Кто-то пакетом или скриптом или фиг знает чем подменяет /usr/lib/python-exec/python-exec2 и вставляет какую-то ерунду.

а не подскажете, что за “ерунда” вместо python-exec2-а была?

ну и чтоб понять это пакет какой-то поставил, или злобный хакер:
/bin/grep -E '/usr/S*/python-exec2' /var/db/pkg/*/*/CONTENTS

и вообще, какой-либо бэкап поломавшейся системы вы, случайно, не сделали для дальнейших разбирательств?

А вот знаете, подскажу:

#!/usr/bin/python2.7
 # -*- coding: utf-8 -*-

from __future__ import print_function

import sys
import os.path
import json
import jsonpatch
import argparse


parser = argparse.ArgumentParser(description='Diff two JSON files')
parser.add_argument('FILE1', type=argparse.FileType('r'))
parser.add_argument('FILE2', type=argparse.FileType('r'))
parser.add_argument('--indent', type=int, default=None,
                    help='Indent output by n spaces')
parser.add_argument('-v', '--version', action='version',
                    version='%(prog)s ' + jsonpatch.__version__)


def main():
    try:
        diff_files()
    except KeyboardInterrupt:
        sys.exit(1)


def diff_files():
    """ Diffs two JSON files and prints a patch """
    args = parser.parse_args()
    doc1 = json.load(args.FILE1)
    doc2 = json.load(args.FILE2)
    patch = jsonpatch.make_patch(doc1, doc2)
    if patch.patch:
        print(json.dumps(patch.patch, indent=args.indent))
        sys.exit(1)

if __name__ == "__main__":
    main()

Случился рецидив. Вот как отследить, что за пакет портит всё?

После последнего обновления:

$ sudo pip2 install -r requirements.txt 
ERROR: (Gentoo) Please run pip with the --user option to avoid breaking python-exec

Gentoo - молодцы!

<code>$ sudo pip2 install -r requirements.txt 
...
</code>

а вот и причину, кажется, нашли.
из-под rootа выполнять pip install ... мягко говоря… неправильно

советую вам посмотреть в сторону dev-python/virtualenv и/или dev-python/virtualenvwrapper
и кастомные пакеты ставить из-под пользователя с урезанными привилегиями (кстати, для разработки - самое то)

Михаил Гагауз wrote:

[…]

а вот и причину, кажется, нашли.
из-под rootа выполнять pip install ... мягко говоря… неправильно

советую вам посмотреть в сторону dev-python/virtualenv и/или dev-python/virtualenvwrapper
и кастомные пакеты ставить из-под пользователя с урезанными привилегиями (кстати, для разработки - самое то)

Вообще для разработки так и используем;)
Это набор пакетов для системы: ansible и openstack клиентские пакеты. Так что от рута им самое оно.
Вообще это системные утилиты бы в virtualenv какой-нибудь отправлять… Было бы безопаснее.