Bash برای Oracle DBAها — بخش ۱: مبانی Bash و محیط Oracle
در این مقاله، با پایهایترین مفاهیم Bash آشنا میشویم؛ مفاهیمی که هم برای یک Oracle DBA ضروریاند و هم برای خواندن و درک اسکریپتهای Audit و Remediation در پروژههای Hardening لازم هستند. هدف این بخش این است که خواننده بتواند ساختار یک اسکریپت Bash را بشناسد، محیط Oracle را درست تنظیم کند و متغیرهای مهمی مثل ORACLE_SID، ORACLE_HOME و PATH را بهدرستی در اسکریپتها بهکار ببرد.
۱) Bash چیست و چرا مهم است؟
Bash یکی از رایجترین shellها در لینوکس است و بخش بزرگی از اسکریپتهای عملیاتی Oracle روی آن نوشته میشود. DBAها از Bash برای کارهایی مثل بررسی وضعیت سرویسها، اجرای ابزارهای Oracle، بکاپگیری از فایلهای تنظیمات، اعتبارسنجی تنظیمات، و خودکارسازی مراحل Hardening استفاده میکنند.
اگر اسکریپتهای امنیتی و عملیاتی را نگاه کنید، معمولاً با همین ساختار شروع میشوند:
#!/bin/bash
این خط را shebang مینامند و به سیستم میگوید که این فایل باید با Bash اجرا شود.
۲) اجرای اسکریپت در لینوکس
یک اسکریپت Bash معمولاً به یکی از این دو روش اجرا میشود:
bash script.sh
./script.sh
روش دوم نیاز دارد فایل permission اجرایی داشته باشد:
chmod +x script.sh
برای Oracle DBAها، درک این موضوع مهم است چون بسیاری از اسکریپتهای operational و hardening باید با permission مناسب و معمولاً با root اجرا شوند.
۳) کامنتگذاری در Bash
هر چیزی بعد از # تا انتهای همان خط، کامنت است. کامنتها برای توضیح منطق اسکریپت، ثبت دلیل یک تصمیم، و نگهداری بهتر کد بسیار مفید هستند.
# Check Oracle environment
# Validate configuration file
# Remediate insecure SSH settings
۴) متغیرها در Bash
متغیرها برای نگهداری مقدارها استفاده میشوند. در اسکریپتهای Oracle معمولاً از آنها برای مسیرها، نام سرویسها، فایلها و پیامهای لاگ استفاده میشود.
ORACLE_SID=ORCL
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
LOG_FILE=/var/log/oracle_hardening.log
اگر مقدار متغیر فاصله داشته باشد، باید آن را داخل کوتیشن قرار دهید:
BACKUP_DIR="/u01/backups/oracle hardening"
در Bash، فاصلهگذاری نادرست یکی از رایجترین علتهای خطاست.
۵) Export کردن Environment Variables
بعضی متغیرها باید به subprocessها هم منتقل شوند. برای این کار از export استفاده میکنیم. این موضوع در Oracle بسیار مهم است، چون ابزارهایی مثل sqlplus، rman، یا scriptهای کمکی ممکن است به محیط جاری وابسته باشند.
export ORACLE_SID
export ORACLE_HOME
export PATH="$ORACLE_HOME/bin:$PATH"
در اسکریپتهای DBA، معمولاً مسیر bin اوراکل باید در ابتدای PATH قرار بگیرد تا نسخه درست ابزارها اجرا شود.
۶) متغیرهای مهم Oracle
سه متغیر بسیار رایج در محیط Oracle عبارتاند از:
ORACLE_SID: نام instance دیتابیسORACLE_HOME: مسیر نصب نرمافزار OraclePATH: مسیر جستوجوی commandها
نمونه:
export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH="$ORACLE_HOME/bin:$PATH"
۷) Command Substitution
با $(...) میتوان خروجی یک command را داخل متغیر ذخیره کرد. این قابلیت در اسکریپتهای audit بسیار رایج است.
CURRENT_HOST=$(hostname)
CURRENT_DATE=$(date +%F)
در remediationها هم ممکن است خروجی دستورهایی مثل update-crypto-policies --show در متغیر ذخیره شود.
۸) Quoting یا کوتیشنگذاری
یکی از مهمترین قواعد Bash این است که همیشه متغیرها را در کوتیشن استفاده کنیم مگر اینکه عمداً بخواهیم word splitting انجام شود.
echo "$ORACLE_HOME"
cd "$BACKUP_DIR"
نمونه اشتباه:
cd $BACKUP_DIR
اگر مسیر فاصله داشته باشد، این دستور میشکند.
۹) یک نمونه اسکریپت ساده برای DBA
مثال زیر یک الگوی ساده برای آشنایی با مبانی Bash است:
#!/bin/bash
ORACLE_SID="ORCL"
ORACLE_HOME="/u01/app/oracle/product/19.0.0/dbhome_1"
export ORACLE_SID ORACLE_HOME
export PATH="$ORACLE_HOME/bin:$PATH"
echo "Oracle SID: $ORACLE_SID"
echo "Oracle Home: $ORACLE_HOME"
echo "Current user: $(whoami)"
۱۰) جمعبندی
در این مقاله با پایههای Bash و محیط Oracle آشنا شدیم. اگر این مفاهیم را خوب یاد بگیرید، درک مقالههای بعدی که درباره شرطها، فایلها، خطاها، پردازش متن، سرویسها و اسکریپتهای Hardening هستند بسیار سادهتر خواهد شد.
در مقاله بعدی، وارد شرطها و مقایسهها میشویم؛ جایی که منطق تصمیمگیری در Bash شروع میشود.
مقاله بعدی: Bash برای Oracle DBAها — بخش ۲: شرطها و مقایسهها در Bash