Hosts.allow - لینوکس فرمان - فرمان یونیکس

نام

hosts_access - فرمت فایل های کنترل دسترسی میزبان

شرح

این صفحه کتابچه راهنمای ساده زبان کنترل دسترسی است که بر اساس مشتری (نام میزبان / آدرس، نام کاربری) و سرور (نام پروسه، نام میزبان / آدرس) الگوهای مبتنی بر. مثال ها در انتهای داده می شود. خواننده بی قراری تشویق می شود که به مقدمه سریع به بخش EXAM ها بروید. نسخه پیشرفته زبان کنترل دسترسی در سند hosts_options (5) شرح داده شده است. پسوند با استفاده از -DPROCESS_OPTIONS، زمان ساخت برنامه را روشن می کند.

در متن زیر، daemon نام فرآیند یک پردازش شبح شبکه است و مشتری نام و / یا آدرس یک سرویس درخواست کننده میزبان است. نام پروسه های daemon daemon در فایل پیکربندی inetd مشخص شده است.

فایل های کنترل دسترسی

نرم افزار کنترل دسترسی به دو فایل کمک می کند . جستجو در اولین بازی متوقف می شود.

دسترسی به داده ها هنگامی که یک (daemon، client) جفت مربوط به یک ورودی در فایل /etc/hosts.allow است اعطا می شود.

در غیر این صورت، دسترسی به یک داده (daemon، client) با یک ورودی در فایل /etc/hosts.deny منطبق خواهد شد.

در غیر این صورت، دسترسی به آن اعطا خواهد شد.

یک فایل کنترل دسترسی غیرمستقیم مانند آن است که یک فایل خالی است. بنابراین، کنترل دسترسی را می توان بدون ارائه فایل های کنترل دسترسی غیرفعال کرد.

قوانین کنترل دسترسی

هر فایل کنترل دسترسی شامل صفر یا بیشتر از خطوط متن است. این خطوط به ترتیب ظاهر می شوند. جستجو زمانی پایان می یابد که یک بازی پیدا شود.

یک شخصیت جدید خطی که پیش از آن با یک کاراکتر بکسلش پیش گرفته شده نادیده گرفته می شود. این اجازه می دهد تا خطوط طولانی را به هم بچسبانید تا ویرایش آنها آسان تر شود.

خطوط یا خطوط خالی که با حرف "#" شروع می شوند، نادیده گرفته می شوند. این به شما اجازه می دهد تا نظرات و فضای خالی را وارد کنید تا جداول راحت تر بخوانند.

تمام خطوط دیگر باید فرمت زیر را برآورده کنند، مواردی که اختیاری است:

daemon_list: client_list [: shell_command]

daemon_list یک لیست از یک یا چند نام پروسه daemon است (ارزش argv [0]) و یا کلمات زیر (نگاه کنید به زیر).

client_list یک لیست از یک یا چند نام میزبان، آدرس میزبان، الگوها یا علامت های ستاره دار (نگاه کنید به زیر) است که با نام میزبان یا آدرس مشتری مطابقت دارد.

اشکال پیچیده تر daemon @ host و user @ میزبان در بخش های مربوط به الگوهای انتهای سرور و در جستجوی نام کاربری مشتری به ترتیب توضیح داده شده است.

عناصر لیست باید با حروف و یا کاما جدا شوند.

به استثنای جستجوی NIS (YP) netgroup، تمام چک های کنترل دسترسی غیر حساس به حروف هستند.

الگوها

زبان کنترل دسترسی الگوهای زیر را اجرا می کند:

رشته ای که با یک `. 'شروع می شود. شخصیت. نام میزبان همسان است اگر آخرین اجزای نام آن مطابق با الگوی مشخص شده باشد. برای مثال، الگوی `.tue.nl 'با نام میزبان' wzv.win.tue.nl 'مطابقت دارد.

رشته ای که با "." به پایان می رسد. شخصیت. یک آدرس میزبان همسان است اگر اولین فیلد عددی آن با رشته داده شده مطابقت داشته باشد. به عنوان مثال، الگوی 131.155. مطابق با آدرس (تقریبا) هر میزبان در شبکه دانشگاه Eindhoven (131.155.xx).

یک رشته که با یک کاراکتر `@ 'آغاز می شود، به عنوان یک نام شبکه توزیع NIS (قبلا YP) رفتار می شود. نام میزبان همسان است اگر عضو میزبان گروه خالص مشخص شده باشد. مسابقات Netgroup برای نام پرونده daemon و یا برای نام کاربری کاربر پشتیبانی نمی شود.

بیان فرم 'nnnn / mmmm' به عنوان جفت 'net / mask' تفسیر می شود. یک نشانی میزبان IPv4 همسان است اگر 'net' برابر با bitwise AND آدرس و ماسک باشد. به عنوان مثال، الگوی خالص / ماسک `131.155.72.0/255.255.254.0 'هر آدرس را در محدوده' 131.155.72.0 'از طریق 131.155.73.255 مطابقت می دهد.

بیان فرم '[n: n: n: n: n: n: n: n] / m' به عنوان یک جفت "[net] / prefixlen" تفسیر میشود. یک آدرس میزبان IPv6 همسان است اگر بیت های prefixlen از net برابر با بیت های prefixlen آدرس باشد. برای مثال، الگوی [net] / prefixlen `[3ffe: 505: 2: 1 ::] / 64 'هر آدرس در محدوده' 3ffe: 505: 2: 1 :: 'را از طریق 3ffe: 505: 2: 1: ffff: ffff: ffff: ffff '.

یک رشته که با یک شخصیت `/ 'آغاز می شود به عنوان نام فایل مورد بررسی قرار می گیرد . نام میزبان یا آدرس هماهنگ شده است اگر آن را با هر نام میزبان یا الگوی آدرس ذکر شده در فایل نام شده مطابقت داشته باشد. فرمت فایل صفر و یا بیشتر با صفر یا بیشتر نام میزبان یا آدرس الگوهای جدا شده توسط فضای خالی است. الگوی نام فایل می تواند در هر نقطه از یک نام میزبان یا الگوی آدرس استفاده شود.

Wildcards * و `؟ ' می تواند برای نامیدن نام های میزبان یا آدرس های IP مورد استفاده قرار گیرد. این روش تطبیق را نمی توان در رابطه با تطبیق 'net / mask' استفاده کرد، نام میزبان با شروع با `. ' یا پیروی از آدرس IP با پایان دادن به `. '.

WILDCARDS

زبان کنترل دسترسی از واژگان صریح پشتیبانی می کند:

همه

کلمات کلیدی جهانی همیشه مطابقت دارد.

محلی

مسابقات هر میزبان که نام آن یک شخصیت نقطه ای ندارد.

ناشناخته

هر کاربر که نام نامشخص است، مطابقت دارد و هر میزبان که نام یا آدرس نامشخص است، مطابقت دارد. این الگوی باید با دقت مورد استفاده قرار گیرد: به دلیل مشکلات موقت نام سرور، نام میزبان ممکن است در دسترس نباشد. هنگامی که نرمافزار نمی تواند دریابید که چه نوع شبکه ای با آن صحبت می کند، یک آدرس شبکه در دسترس نخواهد بود.

شناخته شده

هر کاربری که نام آن شناخته شده است مطابقت دارد و هر میزبان که نام و آدرس آن شناخته شده است مطابقت دارد. این الگوی باید با دقت مورد استفاده قرار گیرد: به دلیل مشکلات موقت نام سرور، نام میزبان ممکن است در دسترس نباشد. هنگامی که نرمافزار نمی تواند دریابید که چه نوع شبکه ای با آن صحبت می کند، یک آدرس شبکه در دسترس نخواهد بود.

PARANOID

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

اپراتورها

بجز

استفاده پیش بینی از فرم است: `list_1 EXCEPT list_2 '؛ این ساز با هر چیزی که منطبق با list_1 دارد ملاقات می کند مگر آنکه لیست_2 مطابقت داشته باشد. اپراتور EXCEPT را می توان در daemon_lists و client_lists استفاده کرد. اپراتور EXCEPT میتواند توزیع شود: اگر زبان کنترل اجازه استفاده از پرانتز را داشته باشد، EXCEPT b EXCEPT c را تجزیه می کند به عنوان `(EXCEPT (b EXCEPT c)) '.

اسلحه ها

اگر قانون حاكمیت كنترل دسترسی هماهنگ شامل یک دستور پوسته باشد، این فرمان به٪ تعویض اعمال می شود (نگاه کنید به بخش بعدی). نتیجه با فرآیند bin / sh با ورودی، خروجی و خطای متصل به / dev / null اجرا می شود . اگر شما نمی خواهید صبر کنید تا آن را تکمیل کنید، یک && را در انتهای دستور مشخص کنید.

دستورات شل نباید بر روی تنظیمات PATH inetd تکیه کنند. در عوض، آنها باید از نامهای مسیر مطلق استفاده کنند یا باید با یک دستور صریح PATH = whatever شروع شوند.

سند Hosts_options (5) یک زبان جایگزین را توصیف می کند که از دستور فرمان shell در یک شیوه متفاوت و ناسازگار استفاده می کند.

٪ EXPANSIONS

گسترش زیر در دستورات پوسته در دسترس است:

٪ a (٪ A)

آدرس سرور میزبان (سرور).

٪ c

اطلاعات مشتری: کاربر @ میزبان، کاربر @ آدرس، نام میزبان، و یا فقط یک آدرس، بسته به میزان اطلاعات موجود است.

٪ d

نام پروسه daemon (مقدار argv [0]).

٪ h (٪ H)

نام میزبان یا آدرس سرور (سرور)، اگر نام میزبان در دسترس نیست.

٪ n (٪ N)

نام میزبان مشتری (سرور) (یا "ناشناخته" یا "paranoid").

٪پ

daemon process id.

٪ s

اطلاعات سرور: daemon @ host، daemon @ address، یا فقط یک نام daemon، بسته به میزان اطلاعات موجود است.

٪ u

نام کاربری مشتری (یا نامشخص).

٪٪

به یک کاراکتر `٪ 'تکامل می یابد.

کاراکتر در٪ گسترش که ممکن است پوسته را اشتباه بگیرند، با تاکید بر جایگزینی.

الگوهای سرورهای سرور

برای تشخیص مشتریان از طریق آدرس شبکه ای که آنها به آن متصل می شوند، از الگوهای فرم استفاده کنید:

process_name @ host_pattern: client_list ...

الگوهای مشابه این می تواند مورد استفاده قرار گیرد زمانی که دستگاه دارای آدرس های اینترنتی مختلف با نام های میزبان اینترنت مختلف است. ارائه دهندگان خدمات می توانند از این امکانات برای ارائه آرشیوهای FTP، GOPHER یا WWW با نام های اینترنتی استفاده کنند که ممکن است حتی متعلق به سازمان های مختلف باشد. گزینه 'twist' را در سند hosts_options (5) نیز مشاهده کنید. برخی از سیستم ها (Solaris، FreeBSD) می توانند بیش از یک آدرس اینترنتی را در یک رابط فیزیکی داشته باشند؛ با سیستم های دیگر شما ممکن است مجبور به استفاده از رابط های شبه SLIP یا PPP که در یک فضای نشانی اختصاص داده شده شبکه زندگی می کنند.

host_pattern همان قوانین نحو را به عنوان نام میزبان و آدرس در context client_ مطابق می کند. معمولا اطلاعات پایانی سرور تنها با خدمات ارتباطی گرا در دسترس است.

مشتری USERNAME LOOKUP مشتری

هنگامی که میزبان سرویس گیرنده پروتکل RFC 931 یا یکی از نسل های آن (TAP، IDENT، RFC 1413) را پشتیبانی می کند، برنامه های wrapper می توانند اطلاعات اضافی در مورد صاحب یک اتصال را بازیابی کنند. اطلاعات نام کاربری مشتری، زمانی که در دسترس است، همراه با نام میزبان مشتری ثبت نام می شود و می تواند برای رعایت الگوهای مانند:

daemon_list: ... user_pattern @ host_pattern ...

پلاگین های daemon را می توان در زمان کامپایل پیکربندی کرد تا جستجوگرهای نام کاربری (به طور پیش فرض) تحت نام Rule-driven یا به طور پیش فرض برای میزبان مشتری بازجویی کند. در مورد جستجوگرهای نام کاربری که تحت حاکمیت قانون است، قاعده فوق می تواند فقط در هنگام جستجوی نام کاربری، زمانی که هر دو daemon_list و host_pattern مطابقت می کنند.

الگوی کاربر دارای همان نحو به عنوان یک الگوریتم روند Daemon است، بنابراین همان wildcards اعمال می شود (عضو شبکه گروه پشتیبانی نمی شود). با این حال، باید با جستجوهای نام کاربری انجام شود.

اطلاعات نام کاربری مشتری را نمی توان مورد اعتماد زمانی که آن را بیشتر مورد نیاز است، یعنی زمانی که سیستم مشتری شده است به خطر بیافتد. به طور کلی، ALL و (UN) KNOWN تنها الگوهای نام کاربری هستند که معنی دارند.

جستجوهای نام کاربری تنها با خدمات مبتنی بر TCP ممکن است، و تنها زمانی که میزبان سرویس گیرنده یک سرویس دهی مناسب را اجرا می کند؛ در تمام موارد دیگر نتیجه "ناشناخته" است.

یک اشکال هسته یونیکس شناخته شده ممکن است از دست دادن سرویس هنگام جستجوی نام کاربری توسط یک فایروال متوقف شود. سند README wrapper شرح روش برای پیدا کردن اگر هسته شما این اشکال است.

جستجوهای نام کاربری ممکن است تاخیر قابل ملاحظه ای برای کاربران غیر UNIX ایجاد کند. مدت زمان پیش فرض برای جستجوی نام کاربری 10 ثانیه است: برای مقابله با شبکه های آهسته خیلی کوتاه است، اما به اندازه کافی برای تحریک کاربران کامپیوتر.

جستجوی نام کاربری انتخابی می تواند آخرین مشکل را کاهش دهد. به عنوان مثال، یک قانون مانند:


daemon_list:pcnetgroup ALL @ ALL

کاربران شبکه Netgroup را بدون انجام جستجوی نام کاربری مطابقت می دهد، اما جستجوهای نام کاربری را با تمام سیستم های دیگر انجام می دهد.

شناسایی حمله اتفاقی ADDRESS

یک نقص در ژنراتور شماره سریال بسیاری از پیاده سازی های TCP / IP اجازه می دهد تا نفوذ کنندگان به راحتی میزبان های قابل اعتماد را جعل کنند و از طریق، به عنوان مثال، سرویس پوسته از راه دور، از بین بروند. سرویس IDENT (RFC931 و غیره) می تواند برای شناسایی چنین و دیگر آدرس های دروغ گویی آدرس های میزبان استفاده شود.

قبل از پذیرش یک درخواست مشتری، کلاهبرداران می توانند از سرویس IDENT استفاده کنند تا متوجه شوند مشتری درخواستی را ارسال نکرده است. هنگامی که میزبان سرویس گیرنده سرویس IDENT را فراهم می کند، نتیجه یابی IDENT منفی (مشتری با نام `UNKNOWN @ host ') شواهد محکمی در مورد حملات دروغگو میزبان است.

یک نتیجه یابی مثبت IDENT (مشتری مطابقت با KNOWN @ host) کمتر قابل اعتماد است. ممکن است یک نفوذگر بتواند هر دو اتصال مشتری و جستجوی IDENT را جعل کند، هرچند این کار بسیار سخت تر از جاسوسی فقط اتصال مشتری است. همچنین ممکن است سرور IDENT مشتری دروغ باشد.

توجه داشته باشید: جستجوی IDENT با سرویس های UDP کار نمی کند.

مثال ها

زبان به اندازه کافی انعطاف پذیر است که انواع مختلفی از سیاست کنترل دسترسی را می توان با حداقل اضطراب بیان کرد. اگر چه زبان از دو جدول کنترل دسترسی استفاده می کند، معمول ترین سیاست ها را می توان با استفاده از یکی از جداول های بی اهمیت یا حتی خالی انجام داد.

هنگام خواندن مثال های زیر مهم است که متوجه شوید که میز قابل قبول قبل از جدول انکار اسکن شده است، زمانی که یک مسابقه پیدا می شود، جستجو متوقف می شود و دسترسی به آن اعطا می شود در صورتی که هیچ نتیجه ای پیدا نشود.

مثالها از نام میزبان و دامنه استفاده می کنند. آنها می توانند با استفاده از اطلاعات مربوط به آدرس و / یا شبکه / netmask بهبود یابد تا تاثیر ناموفق سرورهای جستجو موقت کاهش یابد.

خیلی نزدیک

در این حالت، دسترسی به طور پیش فرض ممنوع است. تنها مجوز صریح مجاز دسترسی مجاز است.

خط مشی پیش فرض (بدون دسترسی) با یک فایل deny بی اهمیت پیاده سازی شده است:

/etc/hosts.deny: ALL: ALL

این همه سرویس را به تمام میزبان ها رد می کند، مگر اینکه آنها با دسترسی به ورودی ها در پرونده مجاز دسترسی داشته باشند.

میزبان صراحتا مجاز در پرونده مجاز است. مثلا:

/etc/hosts.allow: ALL: LOCAL @ some_netgroup
ALL: .foobar.edu EXCEPT terminalalserver.foobar.edu

اولین قاعده اجازه دسترسی از میزبان ها را در حوزه محلی می دهد (نه `. 'در نام میزبان) و از اعضای netgroup some_netgroup. قانون دوم اجازه دسترسی از تمام میزبان ها در دامنه foobar.edu (توجه به نقطه پیشرو) را دارد، به استثنای terminalalserver.foobar.edu .

بیشتر باز شده

در اینجا، دسترسی به طور پیش فرض اعطا می شود؛ تنها صراحتا میزبان مشخص شده سرویس را رد می کنند

خط مشی پیش فرض (دسترسی به مجوز) فایل اجازه داده شده را غیرفعال می کند تا بتوان آن را حذف کرد. میزبان صریح غیر مجاز در پرونده انصراف ذکر شده است. مثلا:

/etc/hosts.deny: ALL: some.host.name، .some.domain
ALL EXCEPT in.fingerd: other.host.name، .other.domain

اولین قاعده برخی از میزبان ها و دامنه ها را تمام خدمات را رد می کند؛ قانون دوم هنوز درخواست های انگشت از میزبان ها و دامنه های دیگر را می پذیرد.

تله های بوبی

مثال بعدی اجازه می دهد درخواست tftp از میزبان در دامنه محلی (توجه به نقطه پیشرو). درخواستهای هر میزبان دیگر انکار می شود به جای فایل درخواست شده، یک پروب انگشت به میزبان مجرم ارسال می شود. نتیجه به سوپر کاربر ارسال می شود.

/etc/hosts.allow:

in.tftpd: LOCAL، mymy.domain /etc/hosts.deny: in.tftpd: ALL: spawn (/ some / where / safe_finger -l @٪ h | \ / usr / ucb / mail -s٪ d-٪ h ریشه) &

دستور safe_finger با بسته بندی tcpd همراه است و باید در جای مناسب نصب شود. این آسیب احتمالی را از داده های فرستاده شده توسط سرور انگشت از راه دور محدود می کند. این حفاظت بهتر از دستور انگشت استاندارد است.

گسترش٪ h (میزبان مشتری) و٪ d (نام سرویس) توالی در قسمت دستورات پوسته شرح داده شده است.

هشدار: از دست دادن انگشت خود دست نکشید، مگر اینکه برای انگشتان بی نهایت آماده شوید.

سیستم فایروال شبکه این ترفند را می توان حتی بیشتر انجام داد. فایروال شبکه معمولی تنها مجموعه ای محدود از خدمات را به دنیای بیرونی ارائه می دهد. تمام سرویس های دیگر را می توان به درستی مانند مثال tftp بالا "bugged" کرد. نتیجه یک سیستم عالی زودگذر عالی است.

همچنین ببینید

tcpd (8) tcp / ip برنامه wrapper daemon. tcpdchk (8)، tcpdmatch (8)، برنامه های تست.

مهم: از دستور man ( ٪ man ) برای دیدن نحوه استفاده از دستور در رایانه خاص خود استفاده کنید.