فصل 36- گوناگون

‎36.8‎- مسائل امنیت

‎36.8.1‎- اسکریپت‌های پوسته آلوده

یک هشدار کوتاه در باره امنیت اسکریپت بیان می‌شود. یک اسکریپت پوسته ممکن است محتوی یک کرم، تروجان، یا حتی یک ویروس باشد. به این دلیل، هرگز یک اسکریپت را به عنوان root اجرا نکنید (یا به آن اجازه درج شدن در فایل‌های راه‌اندازی اولیه سیستم در ‎/etc/rc.d‎ را ندهید) مگر اینکه اسکریپت مذکور را از منبع قابل اعتمادی به دست آورده‌اید یا برای کسب اطمینان از اینکه هیچ عمل زیانباری انجام نمی‌دهد به طور دقیق آن را تجزیه و تحلیل نموده باشید.

پژوهشگران مختلف در آزمایشگاه‌های Bell و سایر پایگاه‌ها، از جمله ‎M. Douglas McIlroy‎‏، و ‎Tom Duff‎، و ‎Fred Cohen‎ ویروس‌های اسکریپت پوسته را کند و کاو نموده‌اند. آنها نتیجه‌گیری کرده‌اند که حتی برای یک نوآموز نوشتن یکی از این «اسکریپت‌های آسیب رسان» بسیار آسان است. ‎[1]‎

این هم یک دلیل دیگر برای آموختن اسکریپت‌نویسی. کسب توانایی کالبدشکافی و فهمیدن اسکریپت‌ها، می‌تواند سیستم شما را از به خطر افتادن به وسیله یک اسکریپت هرزه محافظت نماید.

‎36.8.2‎- پنهان‌سازی Source اسکریپت پوسته

ممکن است بواسطه اهداف امنیتی ارایه دادن یک اسکریپت غیر قابل خواندن لازم باشد. ای کاش برنامه سودمندی برای تولید یک فایل باینری قابل اجرا از یک اسکریپت وجود داشت. برنامه shc -- generic shell script compiler نوشته ‎Francisco Rosales‎ دقیقاً این کار را انجام می‌دهد.

متاسفانه، بر طبق یک مقاله در نشریه ‎Linux Journal‎ اکتبر ‎2005‎ این باینری حداقل در برخی موارد می‌تواند برای بازیابی source اسکریپت اولیه رمزگشایی بشود. بازهم، این می‌تواند شیوه‌ای برای در امان نگهداشتن اسکریپت از عموم، اما نه از اکثر هکرهای ماهر باشد.

‎36.8.3‎- نوشتن اسکریپت‌های پوسته ایمن

‎Dan Stromberg‎ راهنمایی‌های زیر را برای نوشتن اسکریپت‌های (نسبتاً) ایمن پیشنهاد می‌نماید.

  • داده‌های محرمانه را در متغیرهای محیط قرار ندهید.

  • داده‌های محرمانه را در شناسه‌های یک فرمان خارجی عبور ندهید (در عوض آنها را از طریق یک pipe یا تغییر مسیر عبور بدهید).

  • متغیر ‎$PATH‎ را با دقت تنظیم کنید. اگر اسکریپت شما به عنوان root اجرا می‌شود، به هر path که از فراخواننده ارث می‌برید اعتماد نکنید. در واقع، هنگامی که شما از یک متغیر محیط به ارث رسیده از فراخوانی کننده استفاده می‌کنید، در باره آنکه اگر فراخونی کننده مورد گمراه کننده‌ای را در متغیر قرار بدهد چه اتفاقی می‌تواند رخ بدهد، بیاندیشید، به عنوان مثال اگر فراخواننده ‎$HOME‎ را به ‎/etc‎ تنظیم نماید.

یادداشت‌ها

[1]

مقاله Unix Shell Scripting Malware نوشته ‎Marius van Oers‎ و همچنین Denning reference بخش کتابشناسی را ملاحظه کنید.