مقدمه
هنگام تعامل با سرور از طریق یک جلسه شل، شل مجموعهای از تنظیمات مختلف را برای تعیین نحوه عملکرد و دسترسی به منابع جمعآوری میکند. برخی از این تنظیمات از فایلهای پیکربندی بهدست میآید و برخی دیگر توسط ورودیهای کاربر تعیین میشوند.
یکی از راههایی که شل برای پیگیری این تنظیمات استفاده میکند، محیط است؛ فضایی که متغیرهایی که خصوصیات سیستم را تعریف میکنند، در آن ذخیره میشوند. محیط هر بار که یک جلسه شل آغاز میشود، دوباره ساخته میشود و متغیرهای آن میتوانند رفتار سیستم و فرآیندهای فرزند را تحت تأثیر قرار دهند.
در این راهنما، نحوه تعامل با محیط و خواندن و تنظیم متغیرهای محیطی و شل را بهطور تعاملی و از طریق فایلهای پیکربندی بررسی خواهیم کرد.
نکات کلیدی
-
متغیرهای محیطی رفتار سیستم را تحت تأثیر قرار میدهند و توسط فرآیندهای فرزند به ارث برده میشوند، در حالی که متغیرهای شل فقط برای جلسه شل جاری معتبر هستند.
-
از دستورات
printenvیاenvبرای مشاهده متغیرهای محیطی و از دستورsetبرای مشاهده تمام متغیرهای شل و محیطی استفاده کنید. -
دستور
exportمتغیرهای شل را به متغیرهای محیطی تبدیل میکند و آنها را برای فرآیندهای فرزند قابل دسترسی میکند. -
برای ماندگاری متغیرها در جلسات بعدی، آنها را به فایلهای پیکربندی مانند
~/.bashrcیا~/.profileاضافه کنید. -
درک دامنه و وراثت متغیرها برای مدیریت صحیح پیکربندی و امنیت اهمیت زیادی دارد.
نحوه عملکرد محیط و متغیرهای محیطی
هر بار که یک جلسه شل آغاز میشود، اطلاعاتی از منابع مختلف جمعآوری میشود و یک محیط ساخته میشود که برای شل و فرآیندهای فرزند آن در دسترس خواهد بود. این محیط مجموعهای از جفتهای کلید-مقدار است.
برای مثال:
اگر مقدار دارای فاصلههای زیادی باشد، از نقلقولها استفاده میشود:
این جفتها به دو دسته تقسیم میشوند:
-
متغیرهای محیطی: این متغیرها به فرآیندهای فرزند منتقل میشوند و برای ارتباط پیکربندی میان فرآیندهای لینوکس استفاده میشوند.
-
متغیرهای شل: این متغیرها فقط در جلسه شل فعلی وجود دارند و به فرآیندهای فرزند منتقل نمیشوند مگر اینکه بهطور صریح صادر شوند.
متغیرها معمولاً با حروف بزرگ نوشته میشوند تا از سایر موارد در اسکریپتها یا جلسات ترمینال قابل تشخیص باشند.
چاپ متغیرهای شل و محیطی
برای مشاهده متغیرهای محیطی، میتوانید از دستور printenv یا env استفاده کنید. برای نمایش یک متغیر خاص، از دستور زیر استفاده کنید:
برای مشاهده متغیرهای شل، از دستور set استفاده کنید که لیستی کامل از متغیرها، از جمله متغیرهای محیطی و توابع شل را نشان میدهد:
برای تسهیل کار و مشاهده بهتر لیستهای طولانی، میتوانید آن را به برنامههای صفحهبندی مانند less ارسال کنید:
ایجاد متغیرهای شل
برای تعریف یک متغیر شل، بهسادگی باید یک نام و مقدار تعیین کنید. به عنوان مثال:
در اینجا، از نقلقولها استفاده کردهایم چون مقدار متغیر دارای فاصله است. همچنین از نقلقولهای تکگانه استفاده شده چون علامت تعجب یک کاراکتر خاص در شل است که اگر فرار نشده باشد، معمولاً به تاریخچه شل گسترش پیدا میکند.
این متغیر فقط در جلسه شل فعلی وجود دارد و به فرآیندهای فرزند منتقل نمیشود. برای اطمینان از این موضوع، میتوانید دستور زیر را اجرا کنید:
هیچ خروجیای نباید نشان داده شود.
ایجاد متغیرهای محیطی
برای تبدیل یک متغیر شل به یک متغیر محیطی، باید از دستور export استفاده کنید:
این دستور متغیر را به متغیر محیطی تبدیل میکند و اکنون این متغیر برای تمام فرآیندهای فرزند قابل دسترسی خواهد بود. برای تست این موضوع، میتوانید یک شل جدید ایجاد کرده و متغیر را مشاهده کنید:
در این حالت، مقدار متغیر باید نمایش داده شود.
لغو و حذف متغیرها
اگر بخواهید متغیرها را از بین ببرید، میتوانید از دستور unset استفاده کنید:
برای حذف یک متغیر محیطی، کافی است آن را از فایلهای پیکربندی حذف کنید و دستور unset را در جلسه شل اجرا کنید.
تنظیم متغیرهای محیطی در زمان ورود به سیستم
برای اینکه متغیرهای محیطی در هر جلسه شل جدید بهطور خودکار تنظیم شوند، باید آنها را در فایلهای پیکربندی مانند ~/.bashrc یا ~/.profile قرار دهید. برای این کار، فایل ~/.bashrc را ویرایش کرده و متغیرهای مورد نظر را در آن اضافه کنید.
سپس با دستور زیر فایل را بارگذاری کنید:
ملاحظات امنیتی برای متغیرهای محیطی
متغیرهای محیطی میتوانند حاوی اطلاعات حساس مانند کلیدهای API، پسوردهای پایگاه داده و توکنهای احراز هویت باشند. بنابراین، مدیریت امنیتی آنها بسیار مهم است.
-
هیچگاه دادههای حساس را بهصورت متنی ساده در فایلهای پیکربندی که به سیستمهای کنترل نسخه ارسال میشوند، ذخیره نکنید.
-
از مجوزهای مناسب برای فایلهای پیکربندی استفاده کنید (معمولاً
600برای فایلهای خاص کاربر). -
از متغیرهای محیطی حساس فقط در صورت نیاز استفاده کنید و آنها را صادر کنید.
-
از سیستمهای امن برای عبور از اعتبارنامهها مانند مدیران اعتبار یا فایلهای پیکربندی رمزگذاری شده استفاده کنید.
نتیجهگیری
متغیرهای محیطی و شل در تمامی جلسات شل شما وجود دارند و میتوانند بسیار مفید باشند. آنها روشی برای تنظیم جزئیات پیکربندی برای فرآیندهای فرزند فراهم میکنند، بدون اینکه نیازی به تغییر فایلها باشد.
با درک دامنه متغیرها، وراثت آنها و ملاحظات امنیتی، میتوانید سیستم لینوکس خود را بهطور مؤثر پیکربندی کرده و در عین حال از امنیت آن محافظت کنید.

