Clam Daemon(8) Clam AntiVirus Clam Daemon(8)

clamd - دیمن ضدویروس

clamd [گزینه‌ها]

این دیمن به اتصالات ورودی روی سوکت یونیکس و/یا سوکت TCP گوش فرا می‌دهد و فایل‌ها یا دایرکتوری‌ها را بر حسب تقاضا اسکن می‌کند. این برنامه پیکربندی را از فایل /etc/clamav/clamd.conf می‌خواند.

توصیه می‌شود قبل از دستورهای clamd حرف z قرار داده شود (مانند zSCAN) تا مشخص کند که دستور با نویسه NULL پایان می‌یابد و clamd باید خواندن داده‌های دستور را تا زمان خواندن یک نویسه NULL ادامه دهد. جداکننده null تضمین می‌کند که دستور کامل و تمام آرگومان‌های آن به عنوان یک دستور واحد پردازش خواهد شد. همچنین می‌توان دستورها را با حرف n شروع کرد (مانند nSCAN) تا از نویسه خط جدید به عنوان جداکننده استفاده شود. پاسخ‌های clamd نیز به نوبه خود از پایان‌دهنده درخواستی پیروی خواهند کرد. اگر clamd دستور را تشخیص ندهد، یا دستور الزامات مشخص‌شده در زیر را رعایت نکند، با یک پیام خطا پاسخ می‌دهد و اتصال را می‌بندد.

برنامه clamd دستورهای زیر را تشخیص می‌دهد:

بررسی وضعیت سرور. سرور در پاسخ باید با "PONG" پاسخ دهد.
چاپ نسخه‌های برنامه و پایگاه داده. این دستور را می‌توان با گزینه EnableVersionCommand در clamd.conf غیرفعال کرد. در صورت غیرفعال بودن، clamd با عبارت COMMAND UNAVAILABLE پاسخ می‌دهد.
بارگذاری مجدد پایگاه‌های داده ویروس. این دستور را می‌توان با گزینه EnableReloadCommand در clamd.conf غیرفعال کرد. در صورت غیرفعال بودن، clamd با عبارت COMMAND UNAVAILABLE پاسخ می‌دهد.
انجام خروج تمیز. این دستور را می‌توان با گزینه EnableShutdownCommand در clamd.conf غیرفعال کرد. در صورت غیرفعال بودن، clamd با عبارت COMMAND UNAVAILABLE پاسخ می‌دهد.
اسکن یک فایل یا یک دایرکتوری (به صورت بازگشتی) در حالی که پشتیبانی از آرشیو فعال است (اگر در clamd.conf غیرفعال نشده باشد). ارائه مسیر کامل الزامی است.
اسکن فایل یا دایرکتوری (به صورت بازگشتی) با پشتیبانی فعال از آرشیو، بدون متوقف کردن اسکن هنگام یافتن ویروس.
اسکن یک دایرکتوری به صورت بازگشتی با استفاده از چندین ریسه (برای افزایش سرعت اسکن در ماشین‌های SMP). اگر هدف یک دایرکتوری نباشد، clamd به رفتار اسکن غیرچندریسه‌ای بازمی‌گردد.
قرار دادن پیشوند n یا z قبل از این دستور اجباری است.

دستور ALLMATCHSCAN درست مانند SCAN کار می‌کند، با این تفاوت که حالتی را تنظیم می‌کند که در آن اسکن پس از یافتن یک تطابق درون فایل ادامه می‌یابد. این دستور می‌تواند با گزینه AllowAllMatchScan در clamd.conf غیرفعال شود. در صورت غیرفعال بودن، clamd با خطای ALLMATCHSCAN پاسخ می‌دهد.

قرار دادن پیشوند n یا z قبل از این دستور اجباری است.

اسکن جریانی از داده‌ها. جریان داده پس از ارسال INSTREAM به صورت قطعه‌قطعه، روی همان سوکتی که دستور روی آن فرستاده شده بود، به clamd ارسال می‌شود. این کار از بار اضافی برقراری اتصالات جدید TCP و مشکلات ناشی از NAT جلوگیری می‌کند. قالب هر قطعه داده به صورت: '<length><data>' است که در آن <length> اندازه داده‌های بعدی بر حسب بایت است که به صورت یک عدد صحیح بی‌علامت ۴ بایتی با ترتیب بایت شبکه بیان می‌شود و <data> قطعه داده واقعی است. جریان داده با ارسال یک قطعه با طول صفر خاتمه می‌یابد. توجه: از مقدار StreamMaxLength تعیین‌شده در clamd.conf فراتر نروید، در غیر این صورت clamd با پیام INSTREAM size limit exceeded پاسخ داده و اتصال را می‌بندد.

پایان دادن به این دستور با نویسه خط جدید، یا قرار دادن پیشوند n یا z قبل از آن اجباری است.

این دستور تنها روی سوکت‌های دامنه یونیکس کار می‌کند. اسکن یک توصیف‌کننده فایل. پس از صدور دستور FILDES، یک بسته تکمیلی به سبک rfc2292/bsd4.4 (حاوی حداقل یک نویسه صوری) به clamd فرستاده می‌شود که توصیف‌کننده فایل مورد نظر برای اسکن را در داخل داده‌های کمکی (ancillary data) حمل می‌کند. همچنین توصیف‌کننده فایل می‌تواند در همان بسته همراه با نویسه اضافی ارسال شود.

پایان دادن به این دستور با نویسه خط جدید، یا قرار دادن پیشوند n یا z قبل از آن اجباری است؛ توصیه می‌شود تنها از پیشوند z استفاده کنید.

ارائه آماری درباره صف اسکن، محتویات صف اسکن و میزان مصرف حافظه. قالب دقیق پاسخ ممکن است در نگارش‌های آینده تغییر کند. این دستور را می‌توان با گزینه EnableStatsCommand در clamd.conf غیرفعال کرد. در صورت غیرفعال بودن، clamd با عبارت COMMAND UNAVAILABLE پاسخ می‌دهد.

قرار دادن پیشوند n یا z قبل از این دستور اجباری است، و تمام دستورهای درون IDSESSION نیز باید دارای پیشوند باشند.

شروع/پایان یک نشست clamd. درون یک نشست می‌توان چندین دستور SCAN ،INSTREAM ،FILDES ،VERSION ،VERSIONCOMMANDS ،PING و STATS را روی همان سوکت بدون باز کردن اتصالات جدید ارسال کرد. دستورهای CONTSCAN ،MULTISCAN ،ALLMATCHSCAN ،RELOAD و SHUTDOWN درون یک IDSESSION پذیرفته نمی‌شوند. پاسخ‌های clamd در قالب '<id>: <response>' خواهد بود که در آن <id> شماره درخواست (در قالب اسکی، شروع از ۱) و <response> همان پاسخ معمول clamd است. خطوط پاسخ دارای همان جداکننده‌ای خواهند بود که دستور مربوطه داشت. برنامه clamd دستورها را به صورت ناهمگام پردازش کرده و به محض اتمام پردازش پاسخ می‌دهد.

برنامه clamd از کلاینت‌ها می‌خواهد که پیش از ارسال دستورهای بیشتر، تمام پاسخ‌های ارسالی را بخوانند تا از بن‌بست‌های send() جلوگیری شود. روش توصیه‌شده برای پیاده‌سازی کلاینتی که از IDSESSION استفاده می‌کند، استفاده از سوکت‌های غیرمسدودکننده و یک حلقه select()/poll() است: هر زمان که ارسال با انسداد مواجه شد، در select/poll منتظر بمانید تا بتوانید داده‌های بیشتری بنویسید، یا پاسخ‌های بیشتری را بخوانید. توجه داشته باشید که استفاده از سوکت‌های مسدودنشدنی بدون حلقه select/poll و جابجایی متناوب میان recv()/send() با الزامات clamd سازگار نیست.

اگر clamd تشخیص دهد که کلاینت دچار بن‌بست شده است، اتصال را خواهد بست. توجه داشته باشید که اگر الزامات پروتکل رعایت نشود، clamd ممکن است اتصال IDSESSION را نیز ببندد. کلاینت می‌تواند از دستور PING برای زنده نگه داشتن اتصال استفاده کند.

قرار دادن یکی از پیشوندهای n یا z قبل از این دستور اجباری است. توصیه می‌شود از nVERSIONCOMMANDS استفاده شود.

چاپ نسخه برنامه و پایگاه داده، و در ادامه "| COMMANDS:" و فهرستی از دستورهای پشتیبانی‌شده که با فاصله از هم جدا شده‌اند. نگارش‌های clamd قدیمی‌تر از 0.95 این دستور را به عنوان دستور VERSION تشخیص داده و تنها نسخه خود را بدون فهرست دستورها برمی‌گردانند.

این دستور می‌تواند به عنوان راهکاری آسان مثلاً برای بررسی پشتیبانی از IDSESSION استفاده شود.

دستورهای حذف‌شده (REMOVED COMMANDS)
دستور سنتی STREAM دیگر پشتیبانی نمی‌شود. به جای آن از INSTREAM استفاده کنید.
دستورهای پشتیبانی‌نشده (NOT SUPPORTED COMMANDS)
شروع/پایان یک نشست clamd که به شما امکان می‌داد چندین دستور را در هر نشست TCP اجرا کنید. (به جای آن از IDSESSION استفاده کنید)

نمایش اطلاعات راهنما و خروج.
چاپ شماره نسخه و خروج.
اجرا در پیش‌زمینه؛ عدم تبدیل به دیمن.
فعال‌سازی حالت اشکال‌زدایی.
خواندن پیکربندی از FILE.
در صورتی که پایگاه داده ویروس قدیمی‌تر از تعداد روزهای مشخص‌شده باشد، با یک کد خطای غیرصفر خارج می‌شود.
بارگذاری امضاها از DIRECTORY.
نوشتن شناسه پردازه (PID) دیمن در FILE.
مشخص کردن دایرکتوری حاوی گواهی ریشه CA مورد نیاز برای اعتبارسنجی امضاهای دیجیتال مجزای CVD. در صورت مشخص نشدن، clamd در دایرکتوری پیش‌فرض جستجو خواهد کرد.

برنامه clamd از متغیرهای محیطی زیر استفاده می‌کند:

می‌تواند هنگام راه‌اندازی برای یافتن ماژول کتابخانه مشترک libclamunrar_iface جهت فعال‌سازی پشتیبانی از آرشیوهای RAR استفاده شود.
مشخص کردن دایرکتوری حاوی گواهی ریشه CA مورد نیاز برای اعتبارسنجی امضاهای دیجیتال مجزای CVD. در صورت مشخص نشدن، clamd در دایرکتوری پیش‌فرض جستجو خواهد کرد.

برنامه clamd سیگنال‌های زیر را تشخیص می‌دهد:

بازگشایی مجدد فایل گزارش (logfile).
بارگذاری مجدد پایگاه‌های داده امضا.
انجام خروج تمیز.

/etc/clamav/clamd.conf

لطفاً برای مشاهده فهرست قدردانی‌ها و مشارکت‌کنندگان، به مستندات کامل برنامه مراجعه کنید.

Tomasz Kojm <tkojm@clamav.net>

clamd.conf(5), clamdscan(1), freshclam(1), freshclam.conf(5), clamav-milter(8)

February 12, 2009 ClamAV 1.5.4