برای برنامه نویسی ++C در لینوکس کافی است شما اطلاعاتی در مورد برنامه نویسی را داشته باشید.
برای نوشتن یک برنامه ++C ابتدا یک ادیتور مثل vim یا kate را باز کنید و یک برنامه خیلی ساده مثل برنامه خوش آمد گویی را تایپ کنید. مثال زیر یک برنامه بسیار ساده می باشد.
#include
int main()
{
cout << “welcome to c++n�?;
returne 0;
}
سپس این برنامه را با یک نام دلخواه و با پسوند cpp ذخیره کرده و از محیط ادیتور خارج شوید.
مرحله کد نویسی تمام شده حالا باید برنامه نوشته شده را کامپایل و اجرا کنید. برای این کار یک کنسول یا ترمینال باز کنید. برای کامپایل کردن برنامه از دستور ++g استفاده می کنیم.
[root@babapour]# g++ -o t2 test1.cpp
دستور مقابل از چند ستون تشکیل شده است. ستون اول ++g مربوط به دستور کامپایل کردن می باشد. در ستون دوم سوئیچ o- برای ساختن فایل خروجی یا اجرایی بعد از کامپایل کردن مورد استفاده قرار گرفته است. در ستون سوم t2 اسم فایلی است که بعد از کامپایل کردن ایجاد می شود و یک فایل اجرایی می باشد. و در ستون اخر test1.cpp اسم فایلی است که شما برنامه ++C را در آن ذخیره کرده اید.
بعد از اجرای دستور بالا ابتدا برنامه شما کامپایل شده و سپس یک فایل با اسم t2 ساخته می شود.
نکته: اگر برنامه شما خطا داشته باشد فایلی برای اجرا ساخته نمی شود و در مرحله کامپایل شماره خطهای دارای خطا را نمایش میدهد.
اگر برنامه بدون خطا اجرا شود کامپایل به صورت زیر در کنسول اجرا شده و یک فایل ساخته می شود.
[root@babapour]# g++ -o t2 test1.cpp
In file included from /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2/backward/iostream.h:31,
from test1.cpp:1:
/usr/lib/gcc/i386-redhatg-linux/3.4.2/../../../../include/c++/3.4.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the
test1.cpp:6:2: warning: no newline at end of file
حالا می توانید فایل ساخته شده را اجرا کنید و نتیجه کار را ببینید
کرنل لینوکس
کرنل، هستهی سیستم است، دسترسی به درایوهای سختافزاری، مکانیزمهای امنیتی، شبکه و خیلی چیزهای دیگر را نیز مدیریت میکند.
علاوه بر همهی اینها ما مشکلاتی مثل باگهای موجود در پنتیوم F00F داریم، و اشکالات به پروتکل TCP-IP منتقل خواهند شد.
نگارشهای کرنل به صورت X.Y.Z نامگذاری میشوند. Z، شمارههای تجدیدنظرهای فرعی است، Y، نشان میدهد که آیا کرنل آزمایشی است (شماره فرد)، یا به مرحله تولید و محصول رسیده است (شماره زوج)، و X، تجدیدنظرهای اصلی را نشان میدهد.
اکیداً توصیه شده است که از کرنلهای 2.2.x و بالاتر استفاده شود. سری 2.2.x نسبت به 2.0.x پیشرفتها و بهبودهای قابل ملاحظهای پیدا کرده است.
استفاده از کرنل 2.2.x همچنین امکان دسترسی به ویژگیهای جدیدتر، مثل ipchains (به جای ipfwadm) و دیگر قابلیتهای امنیتی پیشرفته را میدهد.
سری 2.0.x از ژوئن 1999 متوقف شده است. برای دریافت آخرین اخبار و پیشرفتها در مورد کرنل، دستور زیر را اجرا کنید:
[seifried@mail kernel-patches]$ finger @linux.kernel.org
[linux.kernel.org]
The latest stable version of the Linux kernel is: 2.2.13
The latest beta version of the Linux kernel is: 2.3.29
The latest prepatch (alpha) version *appears* to be: 2.3.30-3
ارتقاء کرنل و کامپایل آن
ارتقاء کرنل، عبارت است از: دریافت یک کرنل جدید به همراه ماژولها، ویرایش /etc/lilo.conf و اجرای مجدد LILO برای نوشتن یک MBR جدید. کرنل معمولاً در شاخه /boot و ماژولها نیز در /lib/modules/kernel.version.number/ جای خواهند گرفت.
دریافت کرنل جدید، و ماژولها به دو راه انجام میگیرد: با داونلود پکیج کرنل مربوطه و نصب آن، یا با داونلود کد منبع از آدرس ftp://ftp.kernel.org/ و کامپایل کردن آن.
• کامپایل کردن و نصب کرنل
cd /usr/src
یک symlink بنام “linux�?- که به دایرکتوری حاوی کرنل جاری اشاره میکند- در دایرکتوری فوق باید وجود داشته باشد، آن را حذف نمایید؛ اگر احیاناً نبود، مشکلی وجود ندارد.
ممکن است بخواهید با دستور “mv�?، دایرکتوری لینوکس را به /usr/src/linux-kernel.version.number منتقل کرده، لینکی اشارهکننده به /usr/src/linux در آن ایجاد نمایید.
کد منبع را با استفاده از Tar و gzip باز کنید، حال شما یک /usr/src/linux دارید که در حدود 50 مگابایت کد منبع در آن وجود دارد. مرحله بعدی، ایجاد پیکربندی کرنل لینوکس میباشد. (/usr/src/linux.config)، این امر با استفاده از دستورات “make config�?، “make menuconfig�? یا “make xconfig" انجام خواهد شد.
این مرحله به طور قابل ملاحظهای دشوار است و گزینههای زیادی برای انتخاب وجود دارد که به دو طبقه اصلی، تقسیم شدهاند: پشتیبانی سختافزار و پشتیبانی خدمات.
برای پشتیبانی سختافزار لیستی از سختافزارهایی که روی این کرنل اجرا خواهند شد را تهیه کنید
( به عنوان نمونه: P166, Adaptec 2940 SCSI Controller, NE2000 Ethernet card, etc.) و گزینههای مورد نظر را فعال نمایید. برای پشتیبانی خدمات، باید سیستم فایلها را معین کنید (fat، ext2، minix، و غیره).
حال که کار پیکربندی کرنل به اتمام رسید، یابد آنرا کامپایل کنید:
make dep #(makes dependencies)
make clean #(cleans out previous cruft)
make bzImage #(make zImage pukes if the kernel is to big, and 2.2.x kernels tend to be pretty big)
make modules #(creates all the modules you specified)
make modules_install #(installs the modules to /lib/modules/kernel.version.number/)
سپس باید /usr/src/linux/arch/i386/boot/bzImage یا (zImage) را در /boot/vmlinuz-kernel.version.number کپی نمایید. آنگاه، /etc/lilo.conf را ویرایش نمایید
و یک ورودی جدید برای کرنل جدید به آن اضافه کرده، آنرا در ایمنترین حالت، پیشفرضimage، تنظیم کنید.
(با استفاده از دستور defult=X، در غیر این صورت، اولین کرنل موجود در لیست، بوت خواهد شد.
اگر با مشکل مواجه شد، میتوانید دوباره بوت کنید و به کرنل در حال کار قبلی برگردید.
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux
image=/boot/vmlinuz-2.2.9
label=linux
root=/dev/hda1
read-only
image=/boot/vmlinuz-2.2.5
label=linuxold
root=/dev/hda1
read-only
حال که ویرایش /etc/lilo.conf را تمام کردهاید، باید /sbin/lili را جهت بازنویسی MBR، اجرا کنید. هنگامیکه LILO اجرا میشود، خروجی زیر را دارید:
Added linux *
Added linuxold
کلیه image-هایی که در دادههای موجود در MBR لیست شدهاند را- با علامت * که نشاندهنده پیشفرض است- برمیگرداند.
نگارشهای کرنل
در حال حاضر نگارشهای پایدار کرنل، سریهای 2.2.x، و نگارشهای در حال تولید، سریهای 2.3.x میباشند. سریهای 2.1.x، به دلیل اشکالات زیاد و ناپایداری، توصیه نمیشوند.
سری 2.0.x از کرنلها، خیلی قدیمی و فاقد برخی قابلیتها میباشد، متأسفانه، ارتقاء از 2.0.x به 2.2.x گام نسبتاً بزرگی است.
پکیجهای نرمافزاری زیادی باید بروز شوند، همچنین کتابخانهها، ماژولها و ... .
علاوه بر حفظ کرنل قدیمی در حال کار، باید یک ورودی به فایل lilo.conf، به عنوان “linuxold�? یا چیزی مشابه این، اضافه شود.
انتظار نداشته باشید که سریهای 2.2.x عاری از اشکال و خطا باشد؛ 2.2.9 شامل رخنههایی هست که آنرا منسوخ خواهد ساخت.
به هر حال،سطوح مختلفی از patch-های کرنل، موجود میباشد که امنیت سیستم لینوکس را بالا میبرد؛ برخی از آنها از موارد سرریز بافر جلوگیری میکنند و برخی دیگر، crypto-های قوی برای سیستم فراهم میکنند
Patch-های کرنل
Patch-های کرنل متنوعی وجود دارد که رابطه مستقیمی با امنیت دارند.
• Patch کرنل لینوکس امن
این patch تعداد زیادی از مشکلات را حل میکند و سطح امنیتی دیگری برای سیستم فراهم میآورد.
این patch برای سریهای کرنل 2.0 و 2.2 در دسترس میباشد و از اینجا قابل دریافت است.
• Patch کرنل بینالمللی
این patch (که اندازهی آن بیشتر از یک مگابایت است) حجم زیادی crypto-ی قوی و قدرتمند و آیتمهای مربوطه اضافه میکند.
این patch چندین الگوریتم رمزگشایی دارد که AES کاندید آن بود. از اینجا میتوانید آنرا دریافت کنید.
• LIDS (Linux Intrusion Detection System Patch)
این patch برخی قابلیتهای جالب و آشکارکنندههایی برای کشف حملات دارد.
میتوانید file mounts، firewall، و گزینههای متنوع و جالب دیگری را که موجودند، “lock�? کنید. این patch را از اینجا دریافت نمایید.
• RSBAC
Rule Set Based Access Control یک مجموعه جامع و کامل از patch-ها و ابزارهایی برای کنترل جنبههای مختلف سیستم است. آنرا از آدرس http://www.rsbac.de/rsbac دریافت کنید.
• LoMAC
LOMAC (Low Water-Mark Mandatory Access Control for Linux) مجموعهای از patch-ها کرنل برای افزایش امنیت سیستم لینوکس میباشد. آنرا از اینجا دریافت کنید.
• Audited
Audited به شما امکان استفاده از تسهیلات loging را میدهد. میتوانید پیغامهای mail، رخدادهای سیستم و آیتمهای نرمالی که syslog پوشش میدهد، را log کنید. برنامه در اینجا قابل دسترس میباشد.
• Fork Bomb Defuser
یک ماژول کرنل قابل لود شدن که به شما امکان میدهد تا حداکثر تعداد فرایند به ازای هر کاربر و حداکثر تعداد fork-ها را کنترل کنید؛ این ماژول برای سرورهایی که کاربران غیر قابل اطمینان دارد بسیار مفید میباشد. آنرا از اینجا دریافت کنید.
اشکالزدایی کرنل لینوکس
• KDB v0.6 (اشکالزدای کرنل Built-in)
یک اشکال زدای کرنل SGI، در این اینجا موجود میباشد.
• KGDB (اشکالزدای کرنل راه دور)
SGI ابزاری نوشته است که امکان اشکالزدایی کرنل را، از راه دور، میدهد
تانری آمانیندا
