یک هشدار کوتاه در باره امنیت اسکریپت بیان میشود. یک اسکریپت پوسته ممکن است محتوی یک کرم، تروجان، یا حتی یک ویروس باشد. به این دلیل، هرگز یک اسکریپت را به عنوان root اجرا نکنید (یا به آن اجازه درج شدن در فایلهای راهاندازی اولیه سیستم در /etc/rc.d را ندهید) مگر اینکه اسکریپت مذکور را از منبع قابل اعتمادی به دست آوردهاید یا برای کسب اطمینان از اینکه هیچ عمل زیانباری انجام نمیدهد به طور دقیق آن را تجزیه و تحلیل نموده باشید.
پژوهشگران مختلف در آزمایشگاههای Bell و سایر پایگاهها، از جمله M. Douglas McIlroy، و Tom Duff، و Fred Cohen ویروسهای اسکریپت پوسته را کند و کاو نمودهاند. آنها نتیجهگیری کردهاند که حتی برای یک نوآموز نوشتن یکی از این «اسکریپتهای آسیب رسان» بسیار آسان است. [1]
این هم یک دلیل دیگر برای آموختن اسکریپتنویسی. کسب توانایی کالبدشکافی و فهمیدن اسکریپتها، میتواند سیستم شما را از به خطر افتادن به وسیله یک اسکریپت هرزه محافظت نماید.
ممکن است بواسطه اهداف امنیتی ارایه دادن یک اسکریپت غیر قابل خواندن لازم باشد. ای کاش برنامه سودمندی برای تولید یک فایل باینری قابل اجرا از یک اسکریپت وجود داشت. برنامه shc -- generic shell script compiler نوشته Francisco Rosales دقیقاً این کار را انجام میدهد.
متاسفانه، بر طبق یک مقاله در نشریه Linux Journal اکتبر 2005 این باینری حداقل در برخی موارد میتواند برای بازیابی source اسکریپت اولیه رمزگشایی بشود. بازهم، این میتواند شیوهای برای در امان نگهداشتن اسکریپت از عموم، اما نه از اکثر هکرهای ماهر باشد.
Dan Stromberg راهنماییهای زیر را برای نوشتن اسکریپتهای (نسبتاً) ایمن پیشنهاد مینماید.
دادههای محرمانه را در متغیرهای محیط قرار ندهید.
دادههای محرمانه را در شناسههای یک فرمان خارجی عبور ندهید (در عوض آنها را از طریق یک pipe یا تغییر مسیر عبور بدهید).
متغیر $PATH را با دقت تنظیم کنید. اگر اسکریپت شما به عنوان root اجرا میشود، به هر path که از فراخواننده ارث میبرید اعتماد نکنید. در واقع، هنگامی که شما از یک متغیر محیط به ارث رسیده از فراخوانی کننده استفاده میکنید، در باره آنکه اگر فراخونی کننده مورد گمراه کنندهای را در متغیر قرار بدهد چه اتفاقی میتواند رخ بدهد، بیاندیشید، به عنوان مثال اگر فراخواننده $HOME را به /etc تنظیم نماید.
[1] | مقاله Unix Shell Scripting Malware نوشته Marius van Oers و همچنین Denning reference بخش کتابشناسی را ملاحظه کنید. |