TFTPD(8) System Manager's Manual TFTPD(8)

tftpd - کارگزار پروتکل انتقال ساده پرونده (Trivial File Transfer Protocol)

in.tftpd [گزینه‌ها...] مسیر_پوشه...

tftpd یک کارگزار برای پروتکل انتقال ساده پرونده (TFTP) است. پروتکل TFTP به‌طور گسترده برای پشتیبانی از راه‌اندازی از راه دور (بوت شبکه) دستگاه‌های بدون دیسک استفاده می‌شود. این کارگزار معمولاً توسط inetd راه‌اندازی می‌شود، اما می‌تواند به‌صورت مستقل نیز اجرا شود.

فقط با IPv4 متصل شود، حتی اگر پشتیبانی از IPv6 در برنامه کامپایل شده باشد.
فقط با IPv6 متصل شود، در صورتی که پشتیبانی از آن کامپایل شده باشد.
اجرای کارگزار در حالت مستقل (شنود)، به جای اجرا از طریق inetd. در حالت شنود، گزینه --timeout نادیده گرفته می‌شود و از گزینه --address می‌توان برای تعیین نشانی محلی یا درگاه خاص جهت شنود استفاده کرد.
مشابه با --listen اما از فرآیند پیش‌زمینه جدا نمی‌شود (به پس‌زمینه نمی‌رود). متضمن --listen است.
تعیین یک نشانی و درگاه خاص برای شنود هنگام فراخوانی با گزینه --listen یا --foreground. حالت پیش‌فرض، شنود روی درگاه tftp مشخص‌شده در /etc/services روی تمامی نشانی‌های محلی است.

لطفاً توجه داشته باشید: نشانی‌های عددی IPv6 باید داخل براکت قرار گیرند تا از ابهام با اطلاعات اختیاری درگاه جلوگیری شود.

اجازه ایجاد پرونده‌های جدید. به طور پیش‌فرض، tftpd فقط اجازه بارگذاری پرونده‌هایی را می‌دهد که از قبل وجود دارند. پرونده‌ها با مجوزهای پیش‌فرضی ایجاد می‌شوند که به هر کسی اجازه خواندن یا نوشتن آن‌ها را می‌دهد، مگر اینکه گزینه‌های --permissive یا --umask مشخص شده باشند.
تغییر دایرکتوری ریشه (chroot) هنگام راه‌اندازی. این بدان معناست که میزبان راه دور نیازی به ارسال نام پوشه به عنوان بخشی از انتقال ندارد و ممکن است امنیت را افزایش دهد. هنگامی که --secure مشخص می‌شود، دقیقاً یک دایرکتوری باید در خط فرمان قید شود. استفاده از این گزینه هم برای امنیت و هم برای سازگاری با برخی از رام‌های بوت (boot ROMs) که به سادگی نمی‌توانند نام پوشه را در درخواست خود بگنجانند، توصیه می‌شود.
تعیین نام کاربری که tftpd تحت آن اجرا می‌شود؛ پیش‌فرض "nobody" است. شناسه کاربر، شناسه گروه و (در صورت امکان در پلتفرم) شناسه‌های گروه تکمیلی بر اساس موارد مشخص‌شده در پایگاه‌داده دسترسی‌های سیستم برای این نام کاربری تنظیم خواهند شد.
تنظیم umask برای پرونده‌های تازه ایجادشده روی مقدار مشخص‌شده. اگر گزینه --permissive مشخص نشده باشد مقدار پیش‌فرض صفر است (هر کسی می‌تواند بخواند یا بنویسد)، یا اگر --permissive مشخص شده باشد از فرآیند فراخوان به ارث برده می‌شود.
عدم انجام بررسی‌های مجوز اضافی فراتر از کنترل‌های دسترسی عادی ارائه‌شده توسط سیستم برای کاربر مشخص‌شده از طریق گزینه --user.
هنگام اجرا در حالت مستقل، شناسه فرآیند (PID) کارگزار در حال شنود را در pidfile می‌نویسد. هنگام خاتمه عادی (SIGTERM یا SIGINT)، پرونده pid به طور خودکار حذف می‌شود.
هنگام اجرا از طریق inetd این گزینه مدت زمان انتظار (به ثانیه) برای اتصال دوم پیش از خاتمه کار کارگزار را مشخص می‌کند. inetd سپس با رسیدن درخواست دیگر، کارگزار را مجدداً راه‌اندازی می‌کند. مقدار پیش‌فرض ۹۰۰ (۱۵ دقیقه) است.
تعیین مهلت زمانی پیش‌فرض (به میکروثانیه) پیش از ارسال مجدد نخستین بسته. در صورتی که گزینه timeout یا utimeout مذاکره شود، این مقدار می‌تواند توسط کلاینت تغییر کند. مقدار پیش‌فرض ۱۰۰۰۰۰۰ (۱ ثانیه) است.
تعیین استفاده از نگاشت مجدد نام پرونده‌ها. پرونده remap-file پرونده‌ای شامل قوانین نگاشت مجدد است. بخش نگاشت مجدد نام پرونده‌ها در زیر را ببینید. این گزینه ممکن است در برنامه کامپایل نشده باشد، برای بررسی در دسترس بودن آن خروجی in.tftpd -V را بررسی کنید.
افزایش سطح جزئیات گزارش‌گیری tftpd. این فلگ را می‌توان چند بار برای جزئیات بیشتر تکرار کرد.
تنظیم مقدار سطح جزئیات گزارش‌گیری روی value.
مشخص می‌کند که یک گزینه خاص از گزینه‌های RFC 2347 TFTP هرگز نباید پذیرفته شود.
تعیین حداکثر اندازه مجاز بلوک داده. محدوده مجاز برای این پارامتر از ۵۱۲ تا ۶۵۴۶۴ است. برخی از کلاینت‌های تعبیه‌شده (embedded) اندازه بلوک بزرگی درخواست می‌کنند و در عین حال بسته‌های تکه‌تکه‌شده (fragmented) را به درستی مدیریت نمی‌کنند؛ برای این کلاینت‌ها توصیه می‌شود این مقدار روی کوچک‌ترین MTU شبکه منهای ۳۲ بایت تنظیم شود (۲۰ بایت برای IP، ۸ بایت برای UDP و ۴ بایت برای TFTP؛ در صورت استفاده از گزینه‌های IP در شبکه کمتر). برای مثال، روی یک اترنت استاندارد (MTU 1500) مقدار ۱۴۶۸ معقول است.
اجبار شماره درگاه کارگزار (شناسه تراکنش یا TID) برای قرار گرفتن در محدوده مشخص‌شده از شماره درگاه‌ها.
چاپ شماره نسخه و پیکربندی در خروجی استاندارد و سپس خروج تمیز.

این نسخه از tftpd از مذاکره گزینه‌های RFC 2347 پشتیبانی می‌کند. گزینه‌های پیاده‌سازی‌شده فعلی عبارتند از:

تنظیم اندازه بلوک انتقال روی هر مقداری کمتر یا مساوی با گزینه مشخص‌شده. این نسخه از tftpd می‌تواند از هر اندازه بلوک تا حداکثر تئوری ۶۵۴۶۴ بایت پشتیبانی کند.
تنظیم اندازه بلوک انتقال روی مقداری کمتر یا مساوی با گزینه مشخص‌شده، اما پاسخ‌های ممکن را به توان‌های ۲ محدود می‌کند. حداکثر مقدار ۳۲۷۶۸ بایت است (بزرگ‌ترین توان ۲ کمتر یا مساوی ۶۵۴۶۴).
گزارش اندازه پرونده‌ای که قرار است انتقال یابد. این نسخه از tftpd تنها از گزینه tsize برای انتقال‌های حالت باینری (octet) پشتیبانی می‌کند.
تنظیم مدت زمان پیش از ارسال مجدد بسته توسط کارگزار، به ثانیه.
تنظیم مدت زمان پیش از ارسال مجدد بسته توسط کارگزار، به میکروثانیه.
تنظیم شماره بلوکی که پس از سرریز شماره بلوک انتقال از آن ادامه می‌یابد. مقدار پیش‌فرض و توصیه‌شده صفر است.

گزینه --refuse می‌تواند برای غیرفعال کردن گزینه‌های خاص به کار رود؛ این ممکن است برای رفع باگ‌های موجود در برخی پیاده‌سازی‌های کلاینت‌های TFTP لازم باشد. برای نمونه مشاهده شده است که برخی کلاینت‌های TFTP گزینه blksize را درخواست می‌کنند، اما اگر این گزینه توسط کارگزار پذیرفته شود، با خطا از کار می‌افتند.

گزینه --mapfile پرونده‌ای را تعیین می‌کند که شامل قوانین نگاشت مجدد نام پرونده‌ها است. هر خط غیرتوضیحی (خطوط توضیحی با علامت هش # آغاز می‌شوند) شامل یک عمل(operation) است که در زیر مشخص شده؛ یک regex، یک عبارت باقاعده به سبک egrep؛ و اختیاری یک الگوی جایگزینی (replacement pattern). عملی که توسط operation مشخص شده در صورتی اجرا می‌شود که regex با تمام یا بخشی از نام پرونده مطابقت داشته باشد. قوانین از بالا به پایین پردازش می‌شوند و به طور پیش‌فرض همه قوانین حتی در صورت وجود تطابق پردازش خواهند شد.

عمل operation می‌تواند هر ترکیبی از حروف زیر باشد:

جایگزینی زیررشته تطبیق‌یافته با regex توسط الگوی جایگزینی. الگوی جایگزینی ممکن است حاوی توالی‌های گریز باشد؛ زیر را ببینید.
تکرار این قانون تا زمانی که دیگر تطابقی وجود نداشته باشد. این گزینه همیشه همراه با r به کار می‌رود.
تطبیق regex بدون حساسیت به حروف کوچک و بزرگ. به طور پیش‌فرض تطبیق حساس به حروف است.
اگر این قانون مطابقت داشت، پردازش قوانین پس از اجرای این قانون پایان یابد.
اگر این قانون مطابقت داشت، پس از اجرای این قانون پردازش قوانین دوباره از اولین قانون آغاز شود.
اگر این قانون مطابقت داشت، درخواست رد شده و خطای دسترسی غیرمجاز به کلاینت فرستاده شود.
این قانون فقط برای درخواست‌های GET (RRQ) اعمال شود.
این قانون فقط برای درخواست‌های PUT (WRQ) اعمال شود.
~
معکوس کردن مفهوم این قانون، یعنی اجرای operation تنها در صورتی که regex مطابقت نداشته باشد . نمی‌تواند همراه با r استفاده شود.

توالی‌های گریز زیر به عنوان بخشی از الگوی جایگزینی شناخته می‌شوند:

\0
کل رشته‌ای که با regex تطبیق یافته است.
\1 تا \9
رشته‌هایی که با هر یک از نه زیرعبارت اول درون پرانتز، \( ... \)، در الگوی regex تطبیق یافته‌اند.
\i
نشانی IP میزبان درخواست‌کننده در قالب نقطه‌دار چهارگانه (مانند 192.0.2.169).
\x
نشانی IP میزبان درخواست‌کننده در قالب شانزده‌شانزدهی (مانند C00002A9).
\\
نویسه اسلش معکوس واقعی.
\whitespace
نویسه فاصله خالی واقعی.
\#
نویسه هش واقعی.
\U
تبدیل تمام حروف بعدی به حروف بزرگ.
\L
تبدیل تمام حروف بعدی به حروف کوچک.
\E
لغو اثر \U یا \L.

اگر پرونده نگاشت تغییر کند، باید سیگنال SIGHUP را به تمامی فرآیندهای در حال اجرای tftpd ارسال کنید.

استفاده از خدمات TFTP نیازمند حساب کاربری یا گذرواژه روی سیستم کارگزار نیست. به دلیل نبود اطلاعات احراز هویت، tftpd تنها به پرونده‌هایی با دسترسی خواندن عمومی (o+r) اجازه دسترسی می‌دهد، مگر اینکه گزینه --permissive مشخص شده باشد. پرونده‌ها تنها در صورتی قابل نوشتن هستند که از قبل وجود داشته و به صورت عمومی قابل نوشتن باشند، مگر اینکه گزینه --create مشخص شده باشد. توجه داشته باشید که این موضوع مفهوم «عمومی» را به همه کاربران در تمامی میزبان‌هایی که از طریق شبکه قابل دسترسی هستند گسترش می‌دهد؛ این ممکن است در همه سیستم‌ها مناسب نباشد و پیامدهای آن پیش از فعال‌سازی سرویس TFTP باید در نظر گرفته شود. معمولاً باید نوعی راهکار دیوار آتش (firewall) یا فیلتر بسته به کار گرفته شود. اگر به طور مناسب کامپایل شده باشد (خروجی in.tftpd --version را ببینید)، tftpd پایگاه‌داده hosts_access(5) را برای اطلاعات کنترل دسترسی پرس‌وجو می‌کند. این ممکن است کُند باشد؛ محیط‌هایی که به حداکثر کارایی نیاز دارند ممکن است ترجیح دهند برنامه را بدون این گزینه کامپایل کرده و به جای آن به دیوار آتش یا فیلترهای بسته مبتنی بر هسته اتکا کنند.

کارگزار باید طوری تنظیم شود که با کاربری دارای کمترین امتیاز ممکن اجرا شود؛ لطفاً فلگ --user را ببینید. احتمالاً ایده خوبی است که یک حساب کاربری اختصاصی برای tftpd تنظیم شود، به جای اینکه اجازه داده شود به عنوان "nobody" اجرا شود، تا از نشت امتیاز بین برنامه‌ها جلوگیری گردد.

دسترسی به پرونده‌ها می‌تواند و باید از طریق فراخوانی tftpd با فهرستی از پوشه‌ها و قرار دادن مسیرها به عنوان آرگومان‌های برنامه کارگزار در خط فرمان محدود شود. در این حالت دسترسی به پرونده‌هایی محدود می‌شود که ابتدای نام کامل آن‌ها با یکی از پوشه‌های ارائه‌شده مطابقت دارد. در صورت امکان، توصیه می‌شود از فلگ --secure برای راه‌اندازی یک محیط ()chroot برای اجرای کارگزار پس از برقراری اتصال استفاده شود.

در نهایت، پشتیبانی از نگاشت مجدد نام پرونده‌ها (فلگ --mapfile) می‌تواند برای ارائه سطح محدودی از کنترل دسترسی اضافی مورد استفاده قرار گیرد.

RFC 1123, Requirements for Internet Hosts - Application and Support.
RFC 1350, The TFTP Protocol (revision 2).
RFC 2347, TFTP Option Extension.
RFC 2348, TFTP Blocksize Option.
RFC 2349, TFTP Timeout Interval and Transfer Size Options.

این نسخه از tftpd توسط H. Peter Anvin <hpa@zytor.com> نگهداری می‌شود. این ابزار از پایگاه کد OpenBSD مشتق شده اما تفاوت‌های اساسی با آن یافته است، به همراه وصله‌های افزوده شده توسط Markus Gutschke و Gero Kulhman.

tftp(1), egrep(1), umask(2), hosts_access(5), regex(7), inetd(8).

14 September 2009 tftp-hpa 5.2