| VISUDO(8) | راهنمای مدیر سیستم (System Manager's Manual) | VISUDO(8) |
نام (NAME)
visudo - ویرایش امن فایل sudoers
خلاصه دستور (SYNOPSIS)
visudo [-chIOPqsV] [[-f] sudoers]
توضیحات (DESCRIPTION)
دستور visudo فایل sudoers را به شیوهای امن و مشابه vipw(8) ویرایش میکند. visudo فایل sudoers را در برابر چندین ویرایش همزمان قفل میکند، بررسیهای اعتبارسنجی اولیه را انجام میدهد و پیش از نصب فایل ویرایششده، خطاهای نحوی را بررسی میکند. اگر فایل sudoers در حال حاضر توسط کاربر دیگری در حال ویرایش باشد، پیامی دریافت خواهید کرد مبنی بر اینکه بعداً دوباره تلاش کنید.
اگر فایل sudoers وجود نداشته باشد، ایجاد خواهد شد؛ مگر اینکه ویرایشگر بدون ذخیره و نوشتن در فایل خارج شود.
visudo فایل sudoers را پس از ویرایش تجزیه میکند و در صورت وجود خطای نحوی، تغییرات را ذخیره نخواهد کرد. به محض یافتن خطا، visudo پیامی مبنی بر شماره خط یا خطوطی که خطا در آنها رخ داده است چاپ میکند و کاربر اعلان “What now?” (اکنون چه کار کنیم؟) را دریافت خواهد کرد. در این مرحله کاربر میتواند با وارد کردن ‘e’ فایل sudoers را دوباره ویرایش کند، با وارد کردن ‘x’ بدون ذخیره تغییرات خارج شود، یا با وارد کردن ‘Q’ خارج شده و تغییرات را ذخیره کند. گزینه ‘Q’ باید با احتیاط بسیار زیاد استفاده شود؛ زیرا اگر visudo معتقد باشد خطای نحوی وجود دارد، sudo نیز دقیقاً همینطور فکر خواهد کرد. اگر پس از تشخیص خطای نحوی، برای ویرایش مجدد فایل sudoers کلید ‘e’ فشرده شود، مکاننما روی خطی که خطا در آن رخ داده است قرار میگیرد (در صورتی که ویرایشگر از این ویژگی پشتیبانی کند).
دو تنظیم در sudoers وجود دارد که مشخص میکند visudo کدام ویرایشگر را اجرا کند:
- editor
- فهرستی از ویرایشگرهای مجاز برای استفاده با visudo که با دونقطه (‘:’) از هم جدا شدهاند. visudo ویرایشگری را انتخاب میکند که با متغیر محیطی SUDO_EDITOR، VISUAL یا EDITOR کاربر مطابقت داشته باشد (در صورت امکان)، وگرنه اولین ویرایشگر موجود و قابلاجرا در فهرست را انتخاب میکند. دستور sudo متغیرهای محیطی SUDO_EDITOR، VISUAL یا EDITOR را حفظ نمیکند، مگر اینکه در فهرست env_keep حضور داشته باشند یا گزینه env_reset در فایل sudoers غیرفعال شده باشد. مسیر ویرایشگر پیشفرض در زمان کامپایل از طریق گزینه پیکربندی --with-editor تنظیم میشود.
- env_editor
- در صورت تنظیم بودن، visudo پیش از رجوع به فهرست پیشفرض ویرایشگرها، از مقدار متغیرهای محیطی SUDO_EDITOR، VISUAL یا EDITOR استفاده میکند. از آنجا که visudo معمولاً به عنوان کاربر ریشه (root) اجرا میشود، این گزینه ممکن است به کاربری با امتیازات visudo اجازه دهد دستورات دلخواه را بدون ثبت وقایع به عنوان کاربر ریشه اجرا کند. یک راهکار جایگزین این است که فهرستی از ویرایشگرهای “امن” (safe) که با دونقطه از هم جدا شدهاند در متغیر editor قرار داده شود. در این صورت visudo تنها در صورتی از متغیرهای SUDO_EDITOR، VISUAL یا EDITOR استفاده میکند که با مقداری مشخصشده در editor مطابقت داشته باشند. اگر فلگ env_reset فعال باشد، هنگام فراخوانی visudo از طریق sudo، متغیرهای محیطی SUDO_EDITOR، VISUAL و/یا EDITOR باید در فهرست env_keep موجود باشند تا فلگ env_editor کار کند. مقدار پیشفرض on است که میتواند در زمان کامپایل از طریق گزینه پیکربندی --with-env-editor تنظیم شود.
گزینهها (OPTIONS)
گزینهها به شرح زیر هستند:
- -c, --check
- حالت check-only (فقط بررسی) را فعال میکند. فایل موجود sudoers (و هر فایل مشمولشده در آن) برای خطاهای نحوی بررسی میشود. اگر مسیر فایل sudoers مشخص نشده باشد، visudo همچنین مالکیت و مجوزهای دسترسی فایل را نیز بررسی میکند (گزینههای -O و -P را ببینید). پیامی در خروجی استاندارد چاپ میشود که وضعیت sudoers را شرح میدهد، مگر اینکه گزینه -q مشخص شده باشد. اگر بررسی با موفقیت به پایان برسد، visudo با مقدار 0 خارج میشود. در صورت بروز خطا، visudo با مقدار 1 خارج خواهد شد.
- -f sudoers, --file=sudoers
- مکان فایل sudoers دیگری را مشخص میکند؛ در زیر ببینید. از نسخه 1.8.27 به بعد، مسیر فایل sudoers را میتوان بدون استفاده از گزینه -f نیز مشخص کرد.
- -h, --help
- نمایش یک پیام راهنمای کوتاه در خروجی استاندارد و خروج.
- -I, --no-includes
- ویرایش فایلهای مشمولشده (include files) را غیرفعال میکند، مگر اینکه یک خطای نحوی از قبل در آنها وجود داشته باشد. بهطور پیشفرض، visudo فایل اصلی sudoers و هر فایل مشمولشده از طریق دستورالعملهای @include یا #include را ویرایش میکند. فایلهای مشمولشده از طریق دستورالعملهای @includedir یا #includedir هرگز ویرایش نمیشوند، مگر اینکه حاوی یک خطای نحوی باشند.
- -O, --owner
- اعمال مالکیت پیشفرض (کاربر و گروه) بر فایل sudoers. در حالت ویرایش، مالک فایل ویرایششده روی مقدار پیشفرض تنظیم میشود. در حالت بررسی (-c)، اگر مالک نادرست باشد یک خطا گزارش داده میشود. اگر فایل sudoers مشخص نشده باشد، این گزینه بهطور پیشفرض فعال است.
- -P, --perms
- اعمال مجوزهای دسترسی پیشفرض (mode) بر فایل sudoers. در حالت ویرایش، مجوزهای فایل ویرایششده روی مقدار پیشفرض تنظیم میشود. در حالت بررسی (-c)، اگر مجوزهای دسترسی فایل نادرست باشد یک خطا گزارش داده میشود. اگر فایل sudoers مشخص نشده باشد، این گزینه بهطور پیشفرض فعال است.
- -q, --quiet
- حالت quiet (بیصدا) را فعال میکند. در این حالت جزئیات مربوط به خطاهای نحوی چاپ نمیشود. این گزینه فقط در ترکیب با گزینه -c کاربرد دارد.
- -s, --strict
- بررسی strict (سختگیرانه) فایل sudoers را فعال میکند. اگر به یک نام مستعار (alias) ارجاع داده شده باشد اما در واقع تعریف نشده باشد، یا اگر چرخهای (cycle) در یک نام مستعار وجود داشته باشد، visudo آن را یک خطای نحوی در نظر میگیرد. امکان تمایز قائل شدن بین یک نام مستعار و نام میزبان یا نام کاربری که صرفاً از حروف بزرگ، ارقام و کاراکتر زیرخط (‘_’) تشکیل شده باشد وجود ندارد.
- -V, --version
- نسخههای نگارش دستور visudo و گرامر sudoers را چاپ کرده و خارج میشود.
میتوان یک فایل sudoers دیگر را به جای فایل پیشفرض، /etc/sudoers، مشخص کرد. فایل موقت مورد استفاده، همان فایل sudoers مشخصشده است که عبارت “.tmp” به انتهای آن افزوده میشود. تنها در حالت check-only (فقط بررسی)، میتوان از ‘-’ استفاده کرد تا مشخص شود که sudoers از ورودی استاندارد خوانده خواهد شد. از آنجا که خطمشی به طور کامل و سراسری ارزیابی میشود، بررسی مجزای یک فایل مشمولشده sudoers برای خطاهای نحوی کافی نیست.
اشکالزدایی و آرگومانهای افزونه sudoers
نسخههای 1.8.4 و بالاتر visudo از یک چارچوب اشکالزدایی انعطافپذیر پشتیبانی میکنند که از طریق خطوط Debug در فایل sudo.conf(5) پیکربندی میشود.
با شروع از sudo 1.8.12، دستور visudo همچنین آرگومانهای افزونه sudoers را تجزیه میکند تا نام مسیر پیشفرض sudoers، شناسه کاربری (user-ID)، شناسه گروه (group-ID) و حالت دسترسی فایل (file mode) را بازنویسی کند. این آرگومانها، در صورت وجود، باید پس از مسیر افزونه (یعنی پس از sudoers.so) فهرست شوند. میتوان چندین آرگومان را با فاصله از یکدیگر مشخص کرد. برای مثال:
Plugin sudoers_policy sudoers.so sudoers_mode=0400
آرگومانهای زیر پشتیبانی میشوند:
- sudoers_file=pathname
- آرگومان sudoers_file میتواند برای جایگزینی مسیر پیشفرض فایل sudoers استفاده شود.
- sudoers_uid=user-ID
- آرگومان sudoers_uid میتواند برای جایگزینی مالک پیشفرض فایل sudoers استفاده شود. این آرگومان باید به عنوان یک شناسه کاربری عددی مشخص شود.
- sudoers_gid=group-ID
- آرگومان sudoers_gid میتواند برای جایگزینی گروه پیشفرض فایل sudoers استفاده شود. این آرگومان باید به عنوان یک شناسه گروه عددی (نه نام گروه) مشخص شود.
- sudoers_mode=mode
- آرگومان sudoers_mode میتواند برای جایگزینی حالت پیشفرض فایل sudoers استفاده شود. این آرگومان باید به صورت یک مقدار در مبنای هشت (اکتال) مشخص شود.
برای اطلاعات بیشتر در مورد پیکربندی sudo.conf(5)، به صفحه راهنمای آن مراجعه کنید.
محیط (ENVIRONMENT)
بسته به مقدار تنظیمات editor و env_editor در sudoers، ممکن است متغیرهای محیطی زیر بررسی شوند:
- SUDO_EDITOR
- توسط visudo به عنوان ویرایشگر مورد استفاده فراخوانی میشود
- VISUAL
- در صورتی که SUDO_EDITOR تنظیم نشده باشد، توسط visudo استفاده میشود
- EDITOR
- در صورتی که نه SUDO_EDITOR و نه VISUAL تنظیم نشده باشند، توسط visudo استفاده میشود
فایلها (FILES)
- /etc/sudo.conf
- پیکربندی پیشانه (front-end) دستور Sudo
- /etc/sudoers
- فهرست اینکه چه کسی چه دستوری را میتواند اجرا کند
- /etc/sudoers.tmp
- فایل موقت پیشفرض استفادهشده توسط visudo
پیامهای تشخیصی (DIAGNOSTICS)
علاوه بر گزارش خطاهای نحوی sudoers، دستور visudo ممکن است پیامهای زیر را تولید کند:
- sudoers file busy, try again later.
- شخص دیگری در حال حاضر در حال ویرایش فایل sudoers است.
- /etc/sudoers: Permission denied
- شما visudo را به عنوان کاربر ریشه (root) اجرا نکردهاید.
- you do not exist in the passwd database
- شناسه کاربری شما در پایگاهداده passwd سیستم وجود ندارد.
- Warning: {User,Runas,Host,Cmnd}_Alias referenced but not defined
- یا در تلاش برای استفاده از یک {User,Runas,Host,Cmnd}_Alias تعریفنشده هستید، یا یک نام کاربری یا نام میزبان در لیست دارید که صرفاً از حروف بزرگ، ارقام و کاراکتر زیرخط (‘_’) تشکیل شده است. در حالت دوم، میتوانید هشدارها را نادیده بگیرید (زیرا sudo ایرادی نخواهد گرفت). این پیام با نام مسیر فایل sudoers و شماره خطی که نام مستعار تعریفنشده در آن استفاده شده، پیشوندگذاری میشود. در حالت -s (strict یا سختگیرانه)، این موارد خطا محسوب میشوند، نه هشدار.
- Warning: unused {User,Runas,Host,Cmnd}_Alias
- مقدار مشخصشده برای {User,Runas,Host,Cmnd}_Alias تعریف شده اما هرگز استفاده نشده است. این پیام با نام مسیر فایل sudoers و شماره خطی که نام مستعار استفادهنشده در آن تعریف شده، پیشوندگذاری میشود. ممکن است بخواهید نام مستعار استفادهنشده را کامنت کرده یا حذف کنید.
- Warning: cycle in {User,Runas,Host,Cmnd}_Alias
- مقدار مشخصشده برای {User,Runas,Host,Cmnd}_Alias شامل ارجاعی به خودش است، چه به طور مستقیم یا از طریق یک نام مستعار که در آن گنجانده شده است. این پیام با نام مسیر فایل sudoers و شماره خطی که چرخه در آن شناسایی شده، پیشوندگذاری میشود. این مورد صرفاً یک هشدار است، مگر اینکه visudo در حالت -s (سختگیرانه) اجرا شود؛ زیرا sudo هنگام تجزیه فایل sudoers چرخهها را نادیده میگیرد.
- ignoring editor backup file
- هنگام پردازش یک @includedir یا #includedir، فایلی یافت شد که نام آن به ‘~’ یا .bak ختم میشود. چنین فایلهایی توسط sudo و visudo نادیده گرفته میشوند.
- ignoring file name containing '.'
- هنگام پردازش یک @includedir یا #includedir، فایلی یافت شد که نام آن حاوی نویسه ‘.’ است. چنین فایلهایی توسط sudo و visudo نادیده گرفته میشوند.
- unknown defaults entry "name"
- فایل sudoers حاوی یک تنظیم Defaults است که توسط visudo شناخته نمیشود.
همچنین ببینید (SEE ALSO)
vi(1), sudo.conf(5), sudoers(5), sudo(8), vipw(8)
نویسندگان (AUTHORS)
افراد زیادی در طول سالها روی sudo کار کردهاند؛ این نسخه اساساً از کدهایی تشکیل شده که توسط افراد زیر نوشته شده است:
برای مشاهده فهرست جامعی از افرادی که در توسعه sudo مشارکت داشتهاند، فایل CONTRIBUTORS.md را در توزیع sudo (https://www.sudo.ws/about/contributors) ببینید.
هشدارها (CAVEATS)
اگر ویرایشگر مورد استفاده توسط visudo امکان فرار به پوسته (shell escape) را فراهم کند، هیچ راه سادهای برای جلوگیری از دستیابی کاربر به یک پوسته با دسترسی ریشه (root shell) وجود ندارد.
گزارش باگها (BUGS)
اگر فکر میکنید باگی در visudo پیدا کردهاید، میتوانید یک گزارش باگ در پایگاهداده باگ sudo در https://bugzilla.sudo.ws ثبت کنید یا یک issue در https://github.com/sudo-project/sudo/issues باز کنید. اگر ترجیح میدهید از ایمیل استفاده کنید، پیامها میتوانند به فهرست پستی sudo-workers در https://www.sudo.ws/mailman/listinfo/sudo-workers (عمومی) یا به <sudo@sudo.ws> (خصوصی) ارسال شوند.
لطفاً آسیبپذیریهای امنیتی را از طریق issueهای عمومی GitHub، باگزیلا یا فهرستهای پستی گزارش ندهید. در عوض، آنها را از طریق ایمیل به <Todd.Miller@sudo.ws> ارسال کنید. در صورت تمایل میتوانید پیام خود را با استفاده از کلید موجود در https://www.sudo.ws/dist/PGPKEYS توسط PGP رمزگذاری کنید.
پشتیبانی (SUPPORT)
پشتیبانی رایگان محدود از طریق فهرست پستی sudo-users در دسترس است؛ برای عضویت یا جستجو در آرشیو به https://www.sudo.ws/mailman/listinfo/sudo-users مراجعه کنید.
سلب مسئولیت (DISCLAIMER)
دستور visudo به صورت “همانطور که هست” (AS IS) ارائه میشود و هرگونه ضمانت صریح یا ضمنی، از جمله، اما نه محدود به، ضمانتهای ضمنی قابلیت خرید و فروش و تناسب برای یک هدف خاص سلب میشود. برای جزئیات کامل، فایل LICENSE.md ارائهشده همراه با sudo یا نشانی https://www.sudo.ws/about/license را ببینید.
| July 27, 2023 | Sudo 1.9.17p2 |