Почему то, что, когда я загружаю двоичный файл с сети, ей не установили исполняемые полномочия, но когда я использую gcc для создания двоичного файла, она делает?

С awk можно постараться не читать огромную сумму текста сразу:

awk -vRS='http://' -vORS='\nhttp://' 1 urls.txt > urlsperline.txt

Успех может зависеть от используемого awk реализация. Например, gawk хорошо работает, но mawk катастрофические отказы.

5
11.07.2013, 16:41
4 ответа

Как мог curl знайте, что файл является исполняемым файлом? Хорошо технически это могло исследовать свое содержание, но это далеко за пределами какой curl предназначен, чтобы сделать.

Полномочия по умолчанию определяются umask (http://en.wikipedia.org/wiki/Umask) и сверху полномочий, полученных из umask программа может добавить исполняемый бит (или использовать различные полномочия в целом). Например, gcc знает, что это делает исполняемые файлы и поэтому устанавливает исполнительный бит. С другой стороны, curl не предназначен для создания исполняемых файлов, и поэтому только использует перманент по умолчанию.

9
27.01.2020, 20:34
  • 1
    file (главным образом) в состоянии сказать, был ли предназначен файл, чтобы быть исполняемым файлом или нет. Завихрение могло использовать вывод от file не имея необходимость реализовывать любой контент-анализ, затем зеркально отразите исполняемый бит. Кто-то должен записать патч для добавления флага для завихрения, который мог сделать это. –  Alexander 11.07.2013, 12:47
  • 2
    @Alexander кто-то должен несомненно нет. Если я хочу, чтобы файл был исполняемым файлом, я могу установить его, чтобы быть так, я не хочу, чтобы случайные двоичные файлы были загружены исполняемый файл по умолчанию, который является угрозой безопасности. –  terdon♦ 11.07.2013, 15:50
  • 3
    @terdon, Если Вы не хотите там быть исполняемым двоичным файлом на своем диске, Вы не должны загружать его. И если Вы действительно загружали его нарочно, что Вы планируете сделать с ним, который не включает включение исполняемого бита? Какой-либо сценарий, который имеет власть загружать такой файл также, имеет власть делать это исполняемым файлом, точно где дополнительная угроза безопасности? –  Alexander 11.07.2013, 17:18
  • 4
    @Alexander, Например, говорят, что Усера может загрузить файл, потому что у него есть доступ для записи. Если это - исполняемый файл, UserB (кто не имеет доступа для записи и не может измениться, полномочия) может теперь выполнить его, если у него есть доступ для чтения. В зависимости от системы Вы работаете, это может быть опасно. Я соглашаюсь, что это не грандиозное предприятие на однопользовательской машине, но это могло быть на большом сервере. –  terdon♦ 11.07.2013, 17:27
  • 5
    @terdon, Если userB и читал и исполняемый доступ к файлу, это не проблема безопасности, что userB может считать и выполнить файл. Я соглашаюсь, что не конфигурирование системы правильно может быть проблемой безопасности, но это - проблема безопасности независимо от того, если это - большой сервер или нет, и независимо от того, если завихрение включило исполняемый бит. –  Alexander 11.07.2013, 17:33

При загрузке файла по HTTP Вы только получаете содержание файла, не его метаданные, такое как его дата создания, полномочия, и т.д.

Используйте другой протокол, который включает эту метаинформацию, или, если у Вас есть доступ к серверу, служите файлу в контейнере, который включает информацию о метаданных, такую как файл tar.

Если это - серьезное повторяющееся разочарование, Вы могли бы также записать обертку для curl который пытается предположить корректные полномочия и установить их, когда загрузка заканчивается (подсказка: file типы файлов предположений).

2
27.01.2020, 20:34

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

Большинство файлов, которые Вы загружаете с сети, не предназначено, чтобы быть исполняемым файлом, таким образом, завихрение не пытается сделать исполняемый файл файла. Даже если бы файл был предназначен, чтобы быть выполненным, то Вы не могли бы хотеть выполнять его теперь; например, Вы могли бы хотеть рассмотреть его и только сделать исполняемый файл файла, если это передает Ваш обзор.

С другой стороны, gcc или любой другой компилятор намеревается произвести исполняемую программу, таким образом, не удивительно, что это сделало бы необходимые шаги. С gcc это - одна из последних стадий процесса компиляции. Можно наблюдать его с strace:

$ strace -f gcc a.c
…
23429 execve("/usr/bin/ld", ["/usr/bin/ld", "--eh-frame-hdr", "-m", "elf_i386", "--hash-style=both", "-dynamic-linker", "/lib/ld-linux.so.2", "-z", "relro", "/usr/lib/gcc/i486-linux-gnu/4.3."..., "/usr/lib/gcc/i486-linux-gnu/4.3."..., "/usr/lib/gcc/i486-linux-gnu/4.3."..., "-L/usr/lib/gcc/i486-linux-gnu/4."..., "-L/usr/lib/gcc/i486-linux-gnu/4."..., "-L/usr/lib/gcc/i486-linux-gnu/4."..., "-L/lib/../lib", ...], [/* 82 vars */]) = 0
…
23429 chmod("a.out", 0755)              = 0
23429 exit_group(0)                     = ?
…

Другими словами, компоновщик, который является последней стадией в компиляции и производит исполняемый файл, изменяет полномочия на выходном файле, чтобы быть исполняемым файлом как его самым последним шагом.

1
27.01.2020, 20:34
  1. "Двоичный файл" не является тем же как "исполняемым файлом". При обозначении файла, поскольку "двоичный файл" является просто эвристикой, означая, что содержание файла обычно не собирается быть человекочитаемым. При обозначении файла, поскольку "исполняемый файл" означает, что содержит какую-то программу (даже в недвоичной форме, такой как сценарий оболочки), который может быть "выполнен". Бесчисленные двоичные форматы являются просто контейнерами данных.
  2. Двоичный файл, произведенный Вашим gcc команда всегда будет файлом, прежде всего, используемым в качестве исполняемого файла.
  3. Вы не можете доверять файлам из Интернета. Вместо того, чтобы пытаться предположить, должен ли файл быть исполняемым файлом, который так или иначе невозможен с тех пор даже, проза может использоваться в качестве сценариев оболочки, curl и другие программы будут просто применяться umask и оставьте любого gun.shoot(self.foot) пользователю.
0
27.01.2020, 20:34

Теги

Похожие вопросы