Yousha
پنج شنبه 26 شهریور 1394, 18:30 عصر
همونطور که می دونید برنامه Git (http://git-scm.com/) برای کار با repository، پنج پروتکل در اختیار ما گذاشته که هرکدوم مزایا و معایب خودشونو دارن. این پروتکل ها:
1- File (یا همون Local protocol)
2- HTTP (یا همون Dumb protocol)
3- HTTPS (یا همون Smart protocol)
4- SSh
5- Git
هستند. اما از کدوم پروتکل باید استفاده کنیم؟ کدوم پروتکل امنیت بیشتری داره؟ و کدوم پرتکل سرعت بیشتری داره؟
پس وارد جزئیات میشیم!
//:File
این پروتکل برای کار با repository های داخل هارد(local) طراحی شده و ما در اینجا کاری بهش نداریم.
//:HTTP
این پروتکل بخاطر برخی کمبود ها و ضعفهای امنیتیش تقریباً منسوخ شده و هیچ سروری دیگه ازش استفاده نمی کنه و خود تیم Git هم ردش میکنه.
//:HTTPS
در حال حاضر، ساده ترین، محبوب ترین و سازگارترین(compatible) پروتکل استفاده از Git هستش.
هم قابلیت Read-only داره و هم Writable هه.
سرعتش برای انتقال اطلاعات نرماله.
سرور بصورت خودکار توسط certificate تایید می شه.
hand-shake بین کلاینت و سرور در 2-3 پروسه انجام میشه.
توسط X.509 certificate اطلاعات رو رمزنگاری می کنه.
نیاز به SSh Keys و آپلود Public Key در سرور نداره، پس از هر مکانی و سیستمی قابل استفادست. (web-based)
از Pr@xi پشتیبانی می کنه.
معمولاً در پورت 443 تنظیم میشه و توسط Firewall مسدود نشده.
گزینه مناسب برای repository های عمومی و خصوصی با ترافیک متوسط.
احراز هویت(authentication) توسط username و password حساب کاربر در سرور انجام میشه.
در صورت دزدیده شدن username و password، کل حساب کاربری در سرور از دست خواهد رفت.
اکثر سرورهای HTTPS اجازه pull و clone کردن بصورت anonymous رو میدن.
بیشتر فرایند های امنیتی در مرورگر/وب انجام میشه و نه در Git.
دستورات و عملیات بصورت POST/GET ارسال و دریافت میشن.
بدون تنظیم credential-caching در کلاینت، کاربر برای push کردن باید هربار احراز هویت کند. (clone و pull رو هم شامل میشه اگر دسترسیش محدود شده باشه)
برای راه اندازی سرور Git، به برنامه Git، یک TLS certificate معتبر و Web server نیاز داره. بنابراین راه اندازی سرور HTTPS کمی زمانبر هستش.
این پروتکل تقریباً در سال 1995 رونمایی شد.
نمونه URL:
کد:
git clone https://domain/project.git
//:SSh
نسبت به HTTPS از سادگی، محبوبیت و سازگاری(compability) کمتری برخورداره. (چون حرفه ای تر و قدرتمند تره)
هم قابلیت Read-only داره و هم Writable هه.
سرعتش برای انتقال اطلاعات سریعتر از HTTPS هه.
سرور با اجازه کاربر توسط Fingerprint کلید تایید می شه.
hand-shake بین کلاینت و سرور در 5-6 پروسه انجام میشه.
توسط AES, Blowfish, RC4, 3DES, CAST128 یا Arcfour اطلاعات رو رمزنگاری می کنه.
نیاز به SSh Keys و آپلود Public Key در سرور داره، پس کاربر باید به SSh مجهز باشه.
از Pr@xi پشتیبانی می کنه.
معمولاً در پورت 9418 تنظیم میشه و گاهاً توسط Firewall مسدود شده. (در سرورهای درجه 2-3 یا دولتی)
بهترین گزینه برای repository های خصوصی و حساس.
احراز هویت(authentication) توسط Key ها انجام میشه. (حداکثر امنیت)
در صورت دزدیده شدن Private Key، کافیست Public key از حساب کاربری در سرور حذف بشه.
اکثر سرورهای SSh اجازه pull و clone کردن بصورت anonymous رو نمیدن.
بیشتر فرایند های امنیتی در خود SSh و Git انجام میشه.
دستورات و عملیات بصورت پارامتری ارسال و دریافت میشن.
کد:
ssh -x git@domain "git-receive-pack 'project.git'"
کاربر برای push کردن کافیست فقط یکبار در کلاینتش احراز هویت کند. (clone و pull رو هم شامل میشه)
برای راه اندازی سرور Git، به برنامه Git، و SSh نیاز داره.
این پروتکل تقریباً در سال 1995 رونمایی شد.
نمونه URL:
کد:
git clone ssh://username@domain/project.git
یا
git clone username@domain:project.git
//:Git
نسبت به SSh از سادگی، محبوبیت و سازگاری(compability) بیشتری برخورداره.
در حالت معمول فقط قابلیت Read-only داره.
سرعتش برای انتقال اطلاعات بسیار سریعتر از HTTPS و SSh هه.
هیچ مکانیزمی برای تایید سرور نداره.
تقریباً هیچ hand-shake ای بین کلاینت و سرور انجام نمیشه.
هیچ مکانیزم رمزنگاری درکار نیست.
نیاز به SSh Keys و آپلود Public Key در سرور نداره، فقط به برنامه Git نیاز داره.
از Pr@xi پشتیبانی می کنه.
معمولاً در پورت 9418 تنظیم میشه و گاهاً توسط Firewall مسدود شده. (در سرورهای درجه 2-3 و دولتی)
بهترین گزینه برای repository های عمومی Read-only با ترافیک بالا یا پروژه های سنگین.
هیچ احراز هویت(authentication) ای انجام نمیشه. (حداقل امنیت)
هیج گونه اطلاعات حساسی برای دزدیده شدن وجود نداره.
همه سرورهای Git اجازه pull و clone کردن بصورت anonymous رو میدن.
هیچ فرایند امنیتی انجام نمیشه.
دستورات و عملیات بصورت پارامتری ارسال و دریافت میشن.
git domain "git-receive-pack 'project.git'"
در حالت معمول امکان write/push کردن وجود نداره.
برای راه اندازی سرور Git فقط به Git نیاز داره.
این پروتکل تقریباً در سال 2005 رونمایی شد.
نمونه URL:
کد:
git clone git://domain/project.git
توجه: شما خودتون هم میتونید دسترسی Read-Only یا Writable به هر پروتوکلی که خواستید بدید.
این نکته رو هم در نظر داشته باشید که هرکدوم مزایا و معایب خودشونو دارن و باید درجای مناسبش پروتکل مناسب رو انتخاب کنید.
این مقاله جامع ترین و کامترین در نوع خودشه، حتی در بین مقالات خارجی.
منبع: انجمن IranPHP (http://forum.iranphp.org/showthread.php?tid=10087)
1- File (یا همون Local protocol)
2- HTTP (یا همون Dumb protocol)
3- HTTPS (یا همون Smart protocol)
4- SSh
5- Git
هستند. اما از کدوم پروتکل باید استفاده کنیم؟ کدوم پروتکل امنیت بیشتری داره؟ و کدوم پرتکل سرعت بیشتری داره؟
پس وارد جزئیات میشیم!
//:File
این پروتکل برای کار با repository های داخل هارد(local) طراحی شده و ما در اینجا کاری بهش نداریم.
//:HTTP
این پروتکل بخاطر برخی کمبود ها و ضعفهای امنیتیش تقریباً منسوخ شده و هیچ سروری دیگه ازش استفاده نمی کنه و خود تیم Git هم ردش میکنه.
//:HTTPS
در حال حاضر، ساده ترین، محبوب ترین و سازگارترین(compatible) پروتکل استفاده از Git هستش.
هم قابلیت Read-only داره و هم Writable هه.
سرعتش برای انتقال اطلاعات نرماله.
سرور بصورت خودکار توسط certificate تایید می شه.
hand-shake بین کلاینت و سرور در 2-3 پروسه انجام میشه.
توسط X.509 certificate اطلاعات رو رمزنگاری می کنه.
نیاز به SSh Keys و آپلود Public Key در سرور نداره، پس از هر مکانی و سیستمی قابل استفادست. (web-based)
از Pr@xi پشتیبانی می کنه.
معمولاً در پورت 443 تنظیم میشه و توسط Firewall مسدود نشده.
گزینه مناسب برای repository های عمومی و خصوصی با ترافیک متوسط.
احراز هویت(authentication) توسط username و password حساب کاربر در سرور انجام میشه.
در صورت دزدیده شدن username و password، کل حساب کاربری در سرور از دست خواهد رفت.
اکثر سرورهای HTTPS اجازه pull و clone کردن بصورت anonymous رو میدن.
بیشتر فرایند های امنیتی در مرورگر/وب انجام میشه و نه در Git.
دستورات و عملیات بصورت POST/GET ارسال و دریافت میشن.
بدون تنظیم credential-caching در کلاینت، کاربر برای push کردن باید هربار احراز هویت کند. (clone و pull رو هم شامل میشه اگر دسترسیش محدود شده باشه)
برای راه اندازی سرور Git، به برنامه Git، یک TLS certificate معتبر و Web server نیاز داره. بنابراین راه اندازی سرور HTTPS کمی زمانبر هستش.
این پروتکل تقریباً در سال 1995 رونمایی شد.
نمونه URL:
کد:
git clone https://domain/project.git
//:SSh
نسبت به HTTPS از سادگی، محبوبیت و سازگاری(compability) کمتری برخورداره. (چون حرفه ای تر و قدرتمند تره)
هم قابلیت Read-only داره و هم Writable هه.
سرعتش برای انتقال اطلاعات سریعتر از HTTPS هه.
سرور با اجازه کاربر توسط Fingerprint کلید تایید می شه.
hand-shake بین کلاینت و سرور در 5-6 پروسه انجام میشه.
توسط AES, Blowfish, RC4, 3DES, CAST128 یا Arcfour اطلاعات رو رمزنگاری می کنه.
نیاز به SSh Keys و آپلود Public Key در سرور داره، پس کاربر باید به SSh مجهز باشه.
از Pr@xi پشتیبانی می کنه.
معمولاً در پورت 9418 تنظیم میشه و گاهاً توسط Firewall مسدود شده. (در سرورهای درجه 2-3 یا دولتی)
بهترین گزینه برای repository های خصوصی و حساس.
احراز هویت(authentication) توسط Key ها انجام میشه. (حداکثر امنیت)
در صورت دزدیده شدن Private Key، کافیست Public key از حساب کاربری در سرور حذف بشه.
اکثر سرورهای SSh اجازه pull و clone کردن بصورت anonymous رو نمیدن.
بیشتر فرایند های امنیتی در خود SSh و Git انجام میشه.
دستورات و عملیات بصورت پارامتری ارسال و دریافت میشن.
کد:
ssh -x git@domain "git-receive-pack 'project.git'"
کاربر برای push کردن کافیست فقط یکبار در کلاینتش احراز هویت کند. (clone و pull رو هم شامل میشه)
برای راه اندازی سرور Git، به برنامه Git، و SSh نیاز داره.
این پروتکل تقریباً در سال 1995 رونمایی شد.
نمونه URL:
کد:
git clone ssh://username@domain/project.git
یا
git clone username@domain:project.git
//:Git
نسبت به SSh از سادگی، محبوبیت و سازگاری(compability) بیشتری برخورداره.
در حالت معمول فقط قابلیت Read-only داره.
سرعتش برای انتقال اطلاعات بسیار سریعتر از HTTPS و SSh هه.
هیچ مکانیزمی برای تایید سرور نداره.
تقریباً هیچ hand-shake ای بین کلاینت و سرور انجام نمیشه.
هیچ مکانیزم رمزنگاری درکار نیست.
نیاز به SSh Keys و آپلود Public Key در سرور نداره، فقط به برنامه Git نیاز داره.
از Pr@xi پشتیبانی می کنه.
معمولاً در پورت 9418 تنظیم میشه و گاهاً توسط Firewall مسدود شده. (در سرورهای درجه 2-3 و دولتی)
بهترین گزینه برای repository های عمومی Read-only با ترافیک بالا یا پروژه های سنگین.
هیچ احراز هویت(authentication) ای انجام نمیشه. (حداقل امنیت)
هیج گونه اطلاعات حساسی برای دزدیده شدن وجود نداره.
همه سرورهای Git اجازه pull و clone کردن بصورت anonymous رو میدن.
هیچ فرایند امنیتی انجام نمیشه.
دستورات و عملیات بصورت پارامتری ارسال و دریافت میشن.
git domain "git-receive-pack 'project.git'"
در حالت معمول امکان write/push کردن وجود نداره.
برای راه اندازی سرور Git فقط به Git نیاز داره.
این پروتکل تقریباً در سال 2005 رونمایی شد.
نمونه URL:
کد:
git clone git://domain/project.git
توجه: شما خودتون هم میتونید دسترسی Read-Only یا Writable به هر پروتوکلی که خواستید بدید.
این نکته رو هم در نظر داشته باشید که هرکدوم مزایا و معایب خودشونو دارن و باید درجای مناسبش پروتکل مناسب رو انتخاب کنید.
این مقاله جامع ترین و کامترین در نوع خودشه، حتی در بین مقالات خارجی.
منبع: انجمن IranPHP (http://forum.iranphp.org/showthread.php?tid=10087)