Основная проблема - то, что file
ожидает имена файлов как параметры командной строки, не на stdin. Когда Вы пишете ls | file
, вывод ls
передается как вход file
. Не как аргументы, как введено.
, Каково различие?
Параметры командной строки - когда Вы пишете флаги и имена файлов после команды, как в cmd arg1 arg2 arg3
. В сценариях оболочки эти аргументы доступны как переменные $1
, $2
, $3
, и т.д. В C, Вы получили бы доступ к ним через char **argv
и int argc
аргументы [1 111].
Стандартный вход, stdin, является потоком данных. Некоторые программы как [1 112] или wc
чтение от stdin, когда им не дают параметров командной строки. В сценарии оболочки можно использовать read
для получения одной строки входа. В C можно использовать scanf()
или getchar()
среди различных вариантов.
file
обычно не читает из stdin. Это ожидает, что по крайней мере одно имя файла будет передано как аргумент. Вот почему это распечатывает использование, когда Вы пишете ls | file
, потому что Вы не передали аргумент.
Вы могли использовать xargs
для преобразования stdin в аргументы, как в [1 120]. Однако, как [1 122] упоминания terdon , анализируя ls
плохая идея. Самый прямой способ сделать это просто:
file *
Короче говоря, да, они безопасны из-за криптографии с открытым ключом, используемой для подписи файлов.
Все файлы, загруженные APT, имеют подпись, которая позволяет проверять загруженный файл по открытым ключам, хранящимся на вашем компьютере, как подписанным Ubuntu и только Ubuntu. Это подтверждает, что полученный вами файл был авторизован Ubuntu на каком-то этапе и с тех пор не изменялся и не изменялся
.Техническое объяснение того, как это работает, доступно из Ubuntu (и из Debian , который использует ту же систему).
Из-за использования HTTP вместо HTTPS, да, злоумышленники могли видеть, какие файлы вы загружаете, но в этом случае вам вряд ли стоит беспокоиться о конфиденциальности. Попытка «человека посередине» изменить пакеты, чтобы внедрить вредоносный код, все равно потерпит неудачу, потому что это нарушит механизм подписи.
Один из возможных недостатков этого механизма подписания заключается в том, что он не гарантирует, что вы получаете самую последнюю версию пакета (действительно, иногда зеркала обновляются медленно). Чтобы помочь решить эту проблему, подписанный файл выпуска содержит дату «Действителен до», после которой все файлы, на которые он ссылается, должны считаться устаревшими. Человек в середине мог бы иметь возможность заменить архив неизмененной более ранней версией архива в течение этой даты, действительной до тех пор, пока ваш APT не поверит в отсутствие обновлений. Но они не могут вносить какие-либо произвольные изменения в пакеты и не могут вернуться назад во времени после определенного момента.
Механизмы подписи обеспечивают гораздо лучшую безопасность, чем HTTPS, в распределенной среде такого типа, где файлы зеркально отражаются на многих серверах, не контролируемых Ubuntu. По сути, вам нужно доверять только Ubuntu, а не зеркалу, поэтому вам нужно доказать, что файлы изначально были из Ubuntu и с тех пор не были изменены - нет необходимости проверять подлинность зеркала.
Обратите внимание, что при добавлении неофициального репозитория в список источников, такого как PPA, вы будете получать файлы, которые не подписаны Ubuntu. APT должен предупредить вас об этом, потому что они не были подписаны сертификатом, соответствующим любому из открытых ключей, установленных на вашем компьютере, как это было разрешено Ubuntu.
Лучший ответ здесь явно устарел. С тех пор в apt было обнаружено 2 серьёзных эксплойта по удалённому выполнению кода из-за ошибки в проверке пакета. Бюллетени безопасности здесь и здесь .
Это гораздо хуже, чем опасения по поводу конфиденциальности / утечки информации и устаревшей версии пакета; это позволяет выполнять произвольный код как root, полный сбой безопасности. И дело в том: эти атаки были бы предотвращены, если бы вместо http использовался https.
Это доказывает, что принцип глубокоэшелонированной защиты применяется здесь так же, как и везде. Многочисленные утверждения о том, что https не предоставляет никаких или минимальных преимуществ для безопасности в контексте apt, просто неверны, как показали эти эксплойты.
Тогда возникает вопрос, стоит ли польза от безопасности https с точки зрения кэширования, увеличения накладных расходов и т. Д. Я не могу ответить на это, но, по крайней мере, я думаю, что Ubuntu / Canonical / Launchpad должен предоставлять дополнительные конечные точки https для их хранилищ.
Важное дополнение: на самом деле, поскольку обновление и первоначальная установка загружаются онлайн, это требует много трафика, и источник этого трафика, то есть потоки двоичного и текстового кода, воспроизводим. Таким образом, в Интернете существует большое количество шлюзов и кеш-устройств. Значительное количество интернет-провайдеров настроили кэш на основе протокола http, чтобы сохранить пропускную способность экспорта, и протокол https не может существовать в качестве прозрачного кэша.
Другая причина заключается в том, что программа зеркального отображения на основе http намного проще: нет необходимости проверять сертификат tls-ssl и не нужно беспокоиться о недействительности сертификата или о проблемах конфигурации веб-сервера.
Не так давно, около 20 лет, в начале Интернета, https и интернет-трафик все еще были очень дорогими игровыми процессами. Поэтому http также включил протокол ftp, который почти устарел, в качестве основного способа доставки установки и обновления для распространения пакетов программного обеспечения в Интернете.
Аналогично, Microsoft Windows и Office также обновляются с использованием http. Вы можете заметить, что обычно это не установочный пакет, загруженный с сервера Microsoft, а самодельный кеш-сервер вашего интернет-провайдера.