Чи повинен я сам підписувати відкритий код?


11

Я використовую macOS 10.14 і зіткнувся з проблемою, коли я намагався встановити плагін з відкритим кодом для Vim, який я знайшов у Github. Я завантажив вихідний код і скомпілював його сам, що працювало добре, але коли я запустив його, виконання було перервано, оскільки "підпис коду [виконуваного файлу] недійсний для використання в процесі".

Це дало мені багато питань, про які я не можу обернути голову:

Я міг би сам це підписати, але хіба це не зіпсує мету підписання коду? Чи є якісна різниця у підписанні коду з Інтернету та дозволенні додатків від невстановлених розробників у діалоговому вікні "Цей додаток було завантажено з Інтернету"?

Якщо я цього не роблю, чия "відповідальність" це підписувати? Підтримувач репозиторію? Співавтори? Чи очікує Apple, що розробники з відкритим кодом завжди матимуть ідентифікатор розробника Apple? Або я неправильно зрозумів мету підписання коду?

Редагувати:

Щоб уточнити, моє запитання полягає в тому, як мені поводитися з непідписаним вихідним кодом, який я складаю сам, оскільки я не очікую, що внески завжди зможуть підписати свій код або запам'ятати його, особливо якщо мова йде про крихітні внески у проекти з відкритим кодом з багатьма внесками.

Відповіді:


9

Підписання спеціального коду

Для третіх додатків і двійкових файлів, які ви збираєте самостійно, і для яких потрібен підпис коду, використовуйте спеціальний підпис коду .

  • Я припускаю, що додаток не працюватиме без підпису;
  • Я припускаю, що програма не поширюватиметься;
  • Я припускаю, що вам не байдуже, що особа підпису є дійсною.

Спеціальний підпис не забезпечує надійних переваг для безпеки. З його допомогою можна визначити, чи змінено програму, і з її допомогою можна застосувати обмеження безпеки, такі як права, до програми.

Спеціальний підпис підтверджує, codesignале ні spctl. Це може не мати значення, залежно від підписаного двійкового файлу. Для програм та виконуваних файлів це навряд чи має значення, оскільки spctlне працює на локально створених бінарних файлах.

Чому кодовий знак?

Щодо уточненого питання:

Як мені поводитися з непідписаним вихідним кодом, який я складаю сам, оскільки я не очікую, що вкладники завжди зможуть підписати свій код або пам’ятають про них, особливо якщо мова йде про крихітні внески у проекти з відкритим кодом з багатьма внесками.

У більшості самостійно складених програм немає необхідності в підписанні коду. Це передбачає, що ви довіряєте коду програми. На macOS ви можете відкрити непідвладні додатки з Finder, див. Відкриття програми Apple від невстановленого розробника .

Якщо ви не довіряєте коду чи розробникам, не збирайте та не запускайте програму.

Ваша відповідальність

Постачальник вихідного коду не несе відповідальності чи зобов'язання надавати попередньо вбудовані бінарні файли, підписані кодом. Будучи самостійно складеним, усі підписи коду - це ваш вибір і відповідальність.

  • Компанія Apple вимагає підписи в своїх магазинах додатків для підпису коду.

  • Apple запитує розробників за межами своїх магазинів додатків, підписуючи їх код, але це ще не потрібно.

В обох випадках підписуються лише кінцеві бінарні файли. Оригінальний вихідний код та ресурси не підписані.

Вихідний код не підписаний

Сам вихідний код не може бути підписаний кодом змістовно для macOS. Вихідні файли та код можуть бути підписані в цифровому форматі, як і будь-який інший файл, але це не впливає на те, як макрос обробляє отриману програму або бінарний файл.

Як підписати спеціальний код Підписати заявку на Mac

Щоб кодувати дизайн програми на macOS із спеціальним підписом, встановіть -sпрапор ідентичності -:

codesign --force -s - </path/to/application>

Усі інші правила, вимоги та перестановки codesignкоманди залишаються тими ж.

Тут --forceвикористовується прапор для заміни будь-якого наявного підпису.

Можливо, вам потрібно буде додати --deepпрапор до codesignкоманди для підписання субресурсів, таких як фреймворки та вбудовані служби.


Чому ви рекомендуєте спеціальні підписи? Відповідь, яку ви пов’язали з твердженням, "На практиці створення спеціальних бінарних файлів, підписаних спеціально, має лише практичне значення для розробників Apple".
Wowfunhappy

Це не має для мене сенсу. Додавання спеціального підпису означає, що перевірка підпису не вдасться. Це взагалі нікуди не потрапляє - програма вийде з ладу з точно таким же повідомленням про помилку.
jksoegaard

Так, я бачу, що ви видалили посилання на мою відповідь на спеціальній реєстрації та додали припущення. Але чи дотримуються ці припущення взагалі? - Ви, здається, відповідаєте так, ніби питання стосується запуску програми. Це не так. Йдеться про наявність вже підписаної програми, до якої ОП хоче додати плагін. Тобто плагіну потрібно пройти перевірку бібліотеки з оригінально підписаним додатком (Vim) як головним.
jksoegaard

Оригінальне запитання відредаговано. Він досить широкий, як є. Запитуючий може прокоментувати, уточнити та спробувати ці відповіді, щоб побачити, що для них працює. Ця відповідь намагається відповісти на відредаговане запитання та забезпечити практичний підхід. Якщо це не допомагає або має неправильні припущення, запитуючий може сподіватися зазвучити та уточнити свої наміри.
Грем Мілн

1
Ця відповідь була корисною. Моє запитання було досить загальним, тому що я знайшов яблучні документи трохи важкими для розуміння. Використання спеціального підпису вирішило конкретну проблему.
Синтаксис

5

Підписання програми самостійно не руйнує мету підписання коду. Загальна мета підписання коду - це дати можливість перевірити, що програма - це немодифікована копія, яка була створена спочатку певним суб'єктом (особою чи компанією). Коли ви самостійно підписуєте програму, яку потрібно запускати на своєму комп’ютері, ви даєте можливість системі перевірити, чи справді ви створили двійковий файл, і що його не змінили інші.

Якісна різниця між підписанням бінарного додатка і просто дозволом додатків від невстановлених розробників у GateKeeper полягає в тому, що в першому випадку ви дозволяєте запускати одну конкретну програму - тоді як в останньому ви відкриваєте для того, що ви можете відкрити безліч різних додатків, просто клацнувши по них правою кнопкою миші та вибравши Відкрити. Тобто вона більш обмежена і, таким чином, дещо більш "захищена", підписуючи конкретну програму самостійно.

Відповідальність за підпис повністю від вас. Розробник з відкритим кодом не може підписати вихідний код - підписати його можна лише під час складання бінарних файлів. Коли ви самі виробляєте складені бінарні файли, вам належить підписати їх.

Ви можете зареєструвати обліковий запис розробника на веб-сайті Apple, що дозволить вам створити сертифікат, який можна використовувати для підписання. Якщо ви розробник і регулярно збираєте бінарні файли для запуску на Mac, це найкращий спосіб робити. Якщо це разова річ, яку ви, ймовірно, більше ніколи не зробите, ймовірно, зайвим буде пройти цей процес. YMMV.

Інші відповіді на ваше запитання тут рекомендують використовувати спеціальний підпис для двійкового файлу. Це не вийде. Вам потрібно буде створити дійсну підпис для того, щоб бінарний запуск з GateKeeper був найбезпечнішим.


1

Чи повинен я сам підписувати відкритий код?

Якщо ви не розробник, то ні.

Коротше кажучи, підписання коду - це спосіб сказати, що ви (розробник) - це той, про кого ви говорите, а код не змінився з моменту останнього його підписання.

Чи є якісна різниця у підписанні коду з Інтернету та дозволенні додатків від невстановлених розробників у діалоговому вікні "Цей додаток було завантажено з Інтернету"?

Це здається вашим заплутаним підписом коду (що вимагає розробників для публікації програм у App Store) та Gatekeeper (що захищає ваш Mac від встановлення програмного забезпечення від невідомих розробників).

Якщо ви дозволите вашому Mac встановлювати програмне забезпечення як із App Store, так і від визначених розробників, ви все одно отримаєте спливаюче вікно, яке сповістить вас про те, що програмне забезпечення буде встановлено

І якщо це від невстановленого розробника, ви отримаєте те саме спливаюче вікно із "іконою попередження"

Ви все ще можете встановити програмне забезпечення. Це лише механізм, який змушує взаємодію користувачів реально встановити програмне забезпечення, що забезпечує вам рівень захисту від самовстановлених зловмисних програм.


Дякую, це відповідає на деякі, але не на всі питання. Я відредагував своє запитання, щоб спробувати бути більш конкретним у тому, про що я питаю
Syntaxén
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.