Haruskah saya menandatangani kode sumber terbuka sendiri?

11

Saya menggunakan macOS 10.14 dan menemukan masalah ketika saya mencoba menginstal plugin open source untuk Vim yang saya temukan di Github. Saya mengunduh kode sumber dan mengkompilasinya sendiri, yang bekerja dengan baik, tetapi ketika saya menjalankannya, eksekusi terputus karena "tanda tangan kode [dari dieksekusi] tidak valid untuk digunakan dalam proses".

Ini telah memberi saya banyak pertanyaan yang saya tidak dapat membungkus kepala saya:

Saya bisa menandatanganinya sendiri, tetapi bukankah hal itu akan merusak tujuan penandatanganan kode? Apakah ada perbedaan kualitatif dalam menandatangani kode dari internet dan memungkinkan aplikasi dari pengembang yang tidak dikenal di kotak dialog "Aplikasi ini diunduh dari internet"?

Jika saya tidak melakukannya, "tanggung jawab" siapa yang harus ditandatangani? Pengelola repositori? Kontributor? Apakah Apple mengharapkan pengembang open source untuk selalu memiliki ID Pengembang Apple? Atau apakah saya salah memahami tujuan penandatanganan kode?

Edit:

Untuk memperjelas, pertanyaan saya adalah bagaimana saya harus menangani kode sumber yang tidak ditandatangani yang saya kompilasi sendiri, karena saya tidak mengharapkan kontributor untuk selalu dapat, atau ingat untuk, menandatangani kode mereka, terutama ketika menyangkut kontribusi kecil untuk proyek open source dengan banyak kontributor.

Sintaksis
sumber

Jawaban:

9

Penandatanganan Kode Ad-Hoc

Untuk aplikasi pihak ketiga dan binari yang Anda kompilasi sendiri, dan yang membutuhkan penandatanganan kode, gunakan tanda tangan kode ad hoc .

  • Saya mengasumsikan aplikasi tidak akan berjalan tanpa tanda tangan;
  • Saya mengasumsikan aplikasi tidak akan didistribusikan;
  • Saya berasumsi Anda tidak peduli tentang identitas tanda tangan yang valid.

Tanda tangan ad-hoc tidak memberikan manfaat keamanan yang andal. Ini dapat digunakan untuk menentukan apakah aplikasi telah diubah dan dapat digunakan untuk menerapkan batasan keamanan, seperti hak, untuk suatu aplikasi.

Tanda tangan ad-hoc akan divalidasi codesigntetapi tidak spctl. Ini mungkin atau tidak masalah tergantung pada biner yang ditandatangani. Untuk aplikasi dan executable, ini tidak menjadi masalah karena spctltidak dijalankan pada binari yang dibuat secara lokal.

Mengapa Kode Ditandatangani?

Mengenai pertanyaan yang disempurnakan:

Bagaimana saya harus menangani kode sumber yang tidak ditandatangani yang saya kompilasi sendiri, karena saya tidak mengharapkan kontributor untuk selalu dapat, atau ingat untuk, menandatangani kode mereka, terutama ketika menyangkut kontribusi kecil untuk proyek open source dengan banyak kontributor.

Untuk sebagian besar aplikasi yang dikompilasi sendiri, tidak perlu penandatanganan kode. Ini mengasumsikan Anda mempercayai kode aplikasi. Pada macOS, Anda dapat membuka aplikasi yang tidak tepercaya dari Finder, lihat Apple Membuka aplikasi dari pengembang yang tidak dikenal .

Jika Anda tidak mempercayai kode atau pengembang, jangan kompilasi atau jalankan aplikasi.

Tanggung jawabmu

Penyedia kode sumber tidak bertanggung jawab atau berkewajiban untuk menyediakan kode biner yang ditandatangani kode pra-dibangun. Disusun sendiri, semua penandatanganan kode adalah pilihan dan tanggung jawab Anda.

  • Apple meminta pengiriman ke App Store mereka untuk ditandatangani kode.

  • Apple meminta pengembang di luar App Store menandatangani kode mereka, tetapi belum diwajibkan.

Dalam kedua kasus, hanya binari terakhir yang ditandatangani. Kode sumber dan sumber daya asli tidak ditandatangani.

Kode Sumber Tidak Ditandatangani

Kode sumber itu sendiri tidak dapat berupa kode yang ditandatangani dengan cara yang berarti untuk macOS. File sumber dan kode dapat ditandatangani secara digital, seperti file lainnya, tetapi ini tidak berdampak pada bagaimana aplikasi atau biner yang dihasilkan diperlakukan oleh macOS.

Cara Kode Ad-Hoc Menandatangani Aplikasi Mac

Untuk menandatangani aplikasi pada macOS dengan tanda tangan ad-hoc, atur tanda identitas -ske -:

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

Semua aturan lain, persyaratan, dan permutasi dari codesignperintah tetap sama.

Bendera --forcedigunakan di sini untuk menimpa tanda tangan yang ada.

Anda mungkin perlu menambahkan --deeptanda pada codesignperintah untuk menandatangani sub-sumber daya seperti kerangka kerja dan layanan yang disematkan.

Graham Miln
sumber
Mengapa Anda merekomendasikan tanda tangan ad hoc? Jawaban yang Anda tautkan dengan menyatakan "Dalam praktiknya membuat binari yang ditandatangani ad-hoc hanya bernilai praktis bagi pengembang Apple".
Wowfunhappy
Itu tidak masuk akal bagi saya. Menambahkan tanda tangan ad-hoc berarti validasi tanda tangan akan gagal. Ini tidak membawa Anda sama sekali - program akan gagal dengan pesan kesalahan yang sama persis.
jksoegaard
Ya, saya melihat bahwa Anda menghapus tautan ke jawaban saya pada sign-in ad-hoc, dan menambahkan asumsi. Tetapi apakah asumsi-asumsi ini berlaku? - Anda sepertinya menjawab seolah-olah pertanyaannya adalah menjalankan aplikasi. Bukan itu. Ini adalah tentang memiliki aplikasi yang sudah ditandatangani bahwa OP ingin menambahkan plugin. Yaitu plugin harus lulus validasi perpustakaan dengan aplikasi yang ditandatangani awalnya (Vim) sebagai master.
jksoegaard
Pertanyaan asli telah diedit. Agak luas seperti apa adanya. Penanya dapat berkomentar, mengklarifikasi, dan mencoba jawaban ini untuk melihat apa yang cocok untuk mereka. Jawaban ini berupaya menjawab pertanyaan yang diedit dan memberikan pendekatan praktis. Jika itu tidak membantu, atau memiliki asumsi yang salah, si penanya dapat berharap berpadu dan menjelaskan maksud mereka.
Graham Miln
1
Jawaban ini sangat membantu. Pertanyaan saya cukup umum karena saya menemukan dokumen apel agak sulit dimengerti. Menggunakan penandatanganan ad-hoc memecahkan masalah khusus yang saya miliki.
Sintaks
5

Menandatangani program sendiri tidak merusak tujuan penandatanganan kode. Tujuan umum dari penandatanganan kode adalah untuk memungkinkan verifikasi bahwa program tersebut adalah salinan yang tidak dimodifikasi yang awalnya dibuat oleh entitas tertentu (orang atau perusahaan). Ketika Anda menandatangani sendiri program hanya untuk dijalankan di komputer Anda, Anda memungkinkan sistem untuk memeriksa apakah memang Anda yang membuat biner, dan belum dimodifikasi oleh orang lain.

Perbedaan kualitatif antara menandatangani sendiri aplikasi biner, dan hanya membolehkan aplikasi dari pengembang yang tidak dikenal di GateKeeper adalah bahwa dalam kasus sebelumnya Anda mengizinkan satu aplikasi spesifik untuk dijalankan - sedangkan yang kedua, Anda membuka kemungkinan bahwa Anda dapat membuka banyak aplikasi yang berbeda hanya dengan mengklik kanan pada mereka dan memilih Buka. Yaitu lebih membatasi dan dengan demikian agak lebih "aman" dengan menandatangani program khusus sendiri.

Tanggung jawab untuk menandatangani sepenuhnya milik Anda. Pengembang open source tidak dapat menandatangani kode sumber - hanya mungkin untuk menandatangani binari yang dikompilasi. Saat Anda membuat sendiri biner yang dikompilasi, Anda harus menandatanganinya.

Anda dapat mendaftar untuk akun pengembang di situs web Apple yang memungkinkan Anda membuat sertifikat yang dapat digunakan untuk masuk. Jika Anda seorang pengembang dan secara teratur menyusun binari untuk dijalankan di Mac, ini adalah cara yang disukai untuk melakukan sesuatu. Jika ini adalah satu hal yang mungkin tidak akan pernah Anda lakukan lagi, itu mungkin berlebihan untuk menjalani proses ini. YMMV.

Jawaban lain untuk pertanyaan Anda di sini merekomendasikan agar Anda menggunakan penandatanganan ad-hoc untuk biner Anda. Itu tidak akan berhasil. Anda perlu membuat tanda tangan yang valid untuk menjalankan biner dengan GateKeeper pada pengaturan yang paling aman.

jksoegaard
sumber
1

Haruskah saya menandatangani kode sumber terbuka sendiri?

Jika Anda bukan pengembang, maka tidak.

Penandatanganan kode, singkatnya, adalah metode untuk mengatakan Anda (pengembang) adalah siapa yang Anda katakan tentang Anda dan kode tidak berubah sejak Anda terakhir menandatanganinya.

Apakah ada perbedaan kualitatif dalam menandatangani kode dari internet dan memungkinkan aplikasi dari pengembang yang tidak dikenal di kotak dialog "Aplikasi ini diunduh dari internet"?

Kedengarannya seperti Penandatanganan Kode Anda yang membingungkan (apa yang diminta oleh Pengembang untuk menerbitkan Aplikasi di App Store) dan Gatekeeper (apa yang melindungi Mac Anda dari memasang perangkat lunak dari pengembang yang tidak dikenal).

Jika Anda mengizinkan Mac Anda menginstal perangkat lunak dari App Store dan pengembang yang teridentifikasi, Anda akan tetap mendapatkan popup yang memberi tahu Anda tentang fakta perangkat lunak akan diinstal

Dan jika itu dari pengembang yang tidak dikenal, Anda akan mendapatkan popup yang sama dengan "ikon peringatan"

Anda masih dapat menginstal perangkat lunak. Ini hanya mekanisme yang memaksa interaksi pengguna untuk benar-benar menginstal perangkat lunak yang memberi Anda lapisan keamanan terhadap malware yang diinstal sendiri.

Allan
sumber
Terima kasih, ini menjawab beberapa tetapi tidak semua pertanyaan. Saya telah mengedit pertanyaan saya untuk mencoba lebih spesifik dalam apa yang saya tanyakan
Sintaksis