'\" t .\" .\" SPDX-License-Identifier: ISC .\" .\" Copyright (c) 1994-1996, 1998-2005, 2007-2023 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" .\" Sponsored in part by the Defense Advanced Research Projects .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" .nr SL 1 .nr AA 0 .nr BA 0 .nr LC 0 .nr PS 0 .Dd January 16, 2023 .Dt SUDOERS 5 .Os Sudo 1.9.13p3 .SH "نام (NAME)" .Nm sudoers .Nd پلاگین پیش‌فرض خط‌مشی امنیتی sudo .SH "خلاصه دستور (SYNOPSIS)" .Pa /etc/sudoers .SH "توضیحات (DESCRIPTION)" پلاگین خط‌مشی .Nm امتیازات .Nm sudo کاربر را تعیین می‌کند. این پلاگین، خط‌مشی پیش‌فرض .Nm sudo است. خط‌مشی توسط پرونده‌ی .Pa /etc/sudoers یا به صورت اختیاری از طریق LDAP هدایت می‌شود. قالب خط‌مشی با جزئیات در بخش .Sx SUDOERS FILE FORMAT شرح داده شده است. برای اطلاعات درباره ذخیره‌سازی اطلاعات خط‌مشی .Nm در LDAP، به .Xr sudoers.ldap 5 مراجعه کنید. .Ss "پیکربندی sudo.conf برای sudoers" .Nm sudo برای تعیین این‌که کدام پلاگین‌ها بارگیری شوند به پرونده‌ی .Xr sudo.conf 5 مراجعه می‌کند. اگر پرونده‌ی .Xr sudo.conf 5 وجود نداشته باشد یا شامل هیچ خط .Em Plugin نباشد، .Nm برای حسابرسی، تصمیم‌گیری‌های خط‌مشی و ثبت I/O استفاده خواهد شد. برای پیکربندی صریح .Xr sudo.conf 5 جهت استفاده از پلاگین .Nm می‌توان از پیکربندی زیر استفاده کرد. .Bd -literal -offset 4n Plugin sudoers_audit sudoers.so Plugin sudoers_policy sudoers.so Plugin sudoers_io sudoers.so .Ed .Pp از نسخه‌ی .Nm sudo 1.8.5 به بعد، امکان مشخص کردن آرگومان‌های اختیاری برای پلاگین .Nm در پرونده‌ی .Xr sudo.conf 5 وجود دارد. آرگومان‌های پلاگین در صورت وجود باید پس از مسیر پلاگین (یعنی پس از .Pa sudoers.so ) فهرست شوند. این آرگومان‌ها تنها برای پلاگینی اعمال می‌شوند که پرونده‌ی .Em sudoers را باز (و تجزیه) می‌کند. .Pp برای .Nm sudo نسخه‌ی 1.9.1 و بالاتر، این پلاگین .Em sudoers_audit است. برای نسخه‌های قدیمی‌تر، پلاگین .Em sudoers_policy است. می‌توان چندین آرگومان را با فاصله از یکدیگر مشخص کرد. برای نمونه: .Bd -literal -offset 4n Plugin sudoers_audit sudoers.so sudoers_mode=0400 error_recovery=false .Ed .Pp آرگومان‌های پلاگین زیر پشتیبانی می‌شوند: .Bl -tag -width 4n .It error_recovery=bool آرگومان .Em error_recovery می‌تواند برای کنترل این‌که آیا .Nm باید برای بازیابی از خطاهای نحوی در پرونده‌ی .Em sudoers تلاش کند یا خیر استفاده شود. در صورت تنظیم روی .Em true (پیش‌فرض)، .Nm با نادیده گرفتن بخشی از خط که دارای خطا است تا انتهای آن خط، برای بازیابی از خطای نحوی تلاش خواهد کرد. مقدار .Em false بازیابی خطا را غیرفعال می‌کند. پیش از نسخه‌ی 1.9.3، هیچ بازیابی خطایی انجام نمی‌شد. .It ldap_conf=pathname آرگومان .Em ldap_conf می‌تواند برای جایگزینی مسیر پیش‌فرض پرونده‌ی .Pa ldap.conf استفاده شود. .It ldap_secret=pathname از آرگومان .Em ldap_secret می‌توان برای تغییر مسیر پیش‌فرض پروندهٔ .Pa ldap.secret استفاده کرد. .It sudoers_file=pathname از آرگومان .Em sudoers_file می‌توان برای تغییر مسیر پیش‌فرض پروندهٔ .Em sudoers استفاده کرد. .It sudoers_uid=user-ID از آرگومان .Em sudoers_uid می‌توان برای تغییر مالک پیش‌فرض پروندهٔ sudoers استفاده کرد. باید به صورت یک شناسهٔ کاربری عددی (user-ID) مشخص شود. .It sudoers_gid=group-ID از آرگومان .Em sudoers_gid می‌توان برای تغییر گروه پیش‌فرض پروندهٔ sudoers استفاده کرد. باید به صورت یک شناسهٔ گروه عددی (group-ID) مشخص شود (نه نام گروه). .It sudoers_mode=mode از آرگومان .Em sudoers_mode می‌توان برای تغییر حالت دسترسی پیش‌فرض پروندهٔ sudoers استفاده کرد. باید به صورت یک مقدار در مبنای هشت (اکتال) مشخص شود. .El .Pp برای اطلاعات بیشتر دربارهٔ پیکربندی .Xr sudo.conf 5 , به راهنمای آن مراجعه کنید. .Ss "احراز هویت کاربر" سیاست امنیتی .Nm الزام می‌کند که بیشتر کاربران پیش از استفاده از .Nm sudo احراز هویت شوند. در صورتی که کاربر فراخواننده .Sy root باشد، یا کاربر هدف همان کاربر فراخواننده باشد، یا سیاست، احراز هویت را برای کاربر یا دستور غیرفعال کرده باشد، نیازی به گذرواژه نیست. برخلاف .Xr su 1 , هنگامی که .Nm نیاز به احراز هویت دارد، اعتبارنامه‌های کاربر فراخواننده را بررسی می‌کند، نه اعتبارنامه‌های کاربر هدف (یا .Sy root Ns No ) را. این رفتار از طریق پرچم‌های .Em rootpw , .Em targetpw و .Em runaspw که بعداً شرح داده شده‌اند، قابل تغییر است. .Pp اگر کاربری که در سیاست ثبت نشده تلاش کند دستوری را از طریق .Nm sudo اجرا کند، نامه‌ای به مسئولان مربوطه ارسال می‌شود. نشانی مورد استفاده برای چنین نامه‌ای از طریق مدخلِ پیش‌فرض‌های .Em mailto (که بعداً شرح داده می‌شود) قابل تنظیم بوده و مقدار پیش‌فرض آن .Em root است. .Pp اگر کاربر غیرمجاز تلاش کند .Nm sudo را با گزینهٔ .Fl l یا .Fl v اجرا کند، نامه‌ای ارسال نخواهد شد مگر اینکه خطای احراز هویت رخ دهد و یکی از پرچم‌های .Em mail_always یا .Em mail_badpass فعال باشد. این ویژگی به کاربران اجازه می‌دهد تا بررسی کنند که آیا مجاز به استفاده از .Nm sudo هستند یا خیر. به‌طور پیش‌فرض، تمامی تلاش‌ها برای اجرای .Nm sudo (موفق یا ناموفق)، صرف‌نظر از ارسال یا عدم ارسال نامه، ثبت می‌شوند. .Pp اگر .Nm sudo توسط .Sy root اجرا شود و متغیر محیطی .Ev SUDO_USER تنظیم شده باشد، خط‌مشی .Nm از این مقدار برای تعیین کاربر واقعی استفاده خواهد کرد. این قابلیت می‌تواند برای ثبت دستورها از طریق sudo استفاده شود، حتی زمانی که یک پوستهٔ .Sy root فراخوانی شده باشد. همچنین اجازه می‌دهد تا گزینهٔ .Fl e حتی هنگام فراخوانی از طریق اسکریپت یا برنامهٔ اجراشده با sudo همچنان کاربردی بماند. با این حال توجه داشته باشید که جستجو در پروندهٔ .Em sudoers همچنان برای .Sy root انجام می‌شود، نه کاربری که با .Ev SUDO_USER مشخص شده است. .Pp .Nm از پرونده‌های برچسب زمان به ازای هر کاربر برای ذخیره‌سازی موقت اعتبارنامه‌ها استفاده می‌کند. پس از احراز هویت کاربر، رکوردی نوشته می‌شود شامل شناسهٔ کاربریِ استفاده‌شده برای احراز هویت، شناسهٔ نشست پایانه، زمان شروع رهبر نشست (یا فرایند والد) و یک برچسب زمان (با استفاده از ساعت یکنواخت در صورت در دسترس بودن). کاربر سپس می‌تواند بدون گذرواژه برای مدت کوتاهی از .Nm sudo استفاده کند (۱۵ دقیقه، مگر اینکه توسط گزینهٔ .Em timestamp_timeout تغییر داده شود). به‌طور پیش‌فرض، .Nm از یک رکورد جداگانه برای هر پایانه استفاده می‌کند؛ بدین معنا که نشست‌های ورود کاربر به‌طور جداگانه احراز هویت می‌شوند. از گزینهٔ .Em timestamp_type می‌توان برای انتخاب نوع رکورد برچسب زمان مورد استفادهٔ .Nm استفاده کرد. .Ss "ثبت وقایع (Logging)" به‌طور پیش‌فرض، .Nm هر دو تلاش موفق و ناموفق (و همچنین خطاها) را ثبت می‌کند. پرچم‌های .Em log_allowed و .Em log_denied می‌توانند برای کنترل این رفتار استفاده شوند. پیام‌ها می‌توانند در .Xr syslog 3 ، یک پروندهٔ وقایع، یا هر دو ثبت شوند. پیش‌فرض، ثبت در .Xr syslog 3 است اما این مورد از طریق تنظیمات .Em syslog و .Em logfile قابل پیکربندی است. برای شرح قالب پروندهٔ وقایع، به .Sx "EVENT LOGGING" مراجعه کنید. .Pp .Nm همچنین قادر به اجرای دستور در یک شبه‌پایانه و ثبت ورودی و/یا خروجی است. ورودی استاندارد، خروجی استاندارد و خطای استاندارد حتی در صورت عدم وابستگی به یک پایانه قابل ثبت هستند. برای اطلاعات بیشتر در مورد ثبت ورودی/خروجی، به بخش .Sx "I/O LOGGING" مراجعه کنید. .Pp از نسخهٔ 1.9 به بعد، از تنظیم .Em log_servers می‌توان برای ارسال داده‌های وقایع و داده‌های ثبت ورودی/خروجی به کارساز راه دورِ اجراکنندهٔ .Nm sudo_logsrvd یا سرویس دیگری که پروتکل شرح داده‌شده در .Xr sudo_logsrv.proto 5 را پیاده‌سازی می‌کند، استفاده کرد. .Ss "محیط دستور" از آنجا که متغیرهای محیطی می‌توانند رفتار برنامه را تحت تأثیر قرار دهند، .Nm راهکاری را برای محدود کردن متغیرهایی از محیط کاربر که توسط دستورِ در حال اجرا به ارث برده می‌شوند، فراهم می‌کند. دو روش مجزا وجود دارد که .Nm می‌تواند از طریق آن‌ها با متغیرهای محیطی رفتار کند. .Pp به‌طور پیش‌فرض، پرچم .Em env_reset فعال است. این باعث می‌شود دستورها با یک محیط جدید و کمینه اجرا شوند. در AIX (و سیستم‌های لینوکس بدون PAM)، محیط با محتوای پروندهٔ .Pa /etc/environment مقداردهی اولیه می‌شود. .if \n(LC \{\ در سیستم‌های .Bx اگر پرچم .Em use_loginclass فعال باشد، محیط بر اساس تنظیمات .Em path و .Em setenv در .Pa /etc/login.conf . مقداردهی اولیه می‌گردد. .\} متغیرهای محیطی .Ev HOME , .Ev MAIL , .Ev SHELL , .Ev LOGNAME و .Ev USER بر پایهٔ کاربر هدف مقداردهی اولیه می‌شوند و متغیرهای .Ev SUDO_* بر اساس کاربر فراخواننده تنظیم می‌گردند. متغیرهای اضافی، مانند .Ev DISPLAY , .Ev PATH و .Ev TERM , از محیط کاربر فراخواننده حفظ می‌شوند اگر توسط گزینه‌های .Em env_check , یا .Em env_keep مجاز شده باشند. با چند متغیر محیطی به‌طور ویژه رفتار می‌شود. اگر متغیرهای .Ev PATH و .Ev TERM از محیط کاربر حفظ نشوند، روی مقادیر پیش‌فرض تنظیم خواهند شد. متغیرهای .Ev LOGNAME و .Ev USER به‌عنوان یک موجودیت واحد مدیریت می‌شوند. اگر یکی از آن‌ها از محیط کاربر حفظ (یا حذف) شود، دیگری نیز چنین خواهد شد. اگر قرار باشد .Ev LOGNAME و .Ev USER حفظ شوند اما تنها یکی از آن‌ها در محیط کاربر موجود باشد، دیگری با همان مقدار تنظیم خواهد شد. این کار از ایجاد محیطی ناهمگون جلوگیری می‌کند که در آن یکی از متغیرهای توصیف‌کنندهٔ نام کاربر روی کاربر فراخواننده و دیگری روی کاربر هدف تنظیم شده باشد. متغیرهای محیطی با مقداری که با .Ql () شروع می‌شود حذف می‌گردند، مگر اینکه هم بخش نام و هم مقدار توسط .Em env_keep یا .Em env_check , مطابقت داده شوند، زیرا ممکن است توسط پوستهٔ .Sy bash به‌عنوان تابع تفسیر گردند. پیش از نسخهٔ 1.8.11، چنین متغیرهایی همیشه حذف می‌شدند. .Pp اگر پرچم .Em env_reset غیرفعال باشد، متغیرهایی که به‌صراحت توسط گزینه‌های .Em env_check و .Em env_delete رد نشده‌اند مجاز بوده و مقادیرشان از فرآیند فراخوان به ارث برده می‌شود. پیش از نسخه 1.8.21، متغیرهای محیطی با مقداری که با .Ql () آغاز می‌شد همواره حذف می‌شدند. از نسخه 1.8.21، الگویی در .Em env_delete برای تطبیق با توابع پوسته .Sy bash استفاده می‌شود. از آنجا که مسدود کردن تمام متغیرهای محیطی بالقوه خطرناک ممکن نیست، استفاده از رفتار پیش‌فرض .Em env_reset توصیه می‌شود. .Pp متغیرهای محیطی مشخص‌شده توسط .Em env_check , .Em env_delete , یا .Em env_keep می‌توانند شامل یک یا چند نویسه .Ql * باشند که با صفر یا چند نویسه تطبیق می‌یابند. هیچ نویسه عمومی دیگری پشتیبانی نمی‌شود. .Pp به‌طور پیش‌فرض، متغیرهای محیطی با نام تطبیق داده می‌شوند. با این حال، اگر الگو شامل علامت مساوی .Pq Ql =\& باشد، باید هم نام و هم مقدار متغیر تطبیق یابد. به‌عنوان مثال، یک تابع پوسته .Sy bash می‌تواند به‌صورت زیر تطبیق داده شود: .Bd -literal -offset 4n env_keep += "BASH_FUNC_my_func%%=()*" .Ed .Pp بدون پسوند .Ql =()* این الگو مطابقت نخواهد داشت، زیرا توابع پوسته .Sy bash به‌طور پیش‌فرض حفظ نمی‌شوند. .Pp فهرست کامل متغیرهای محیطی حفظ‌شده یا حذف‌شده طبق تغییرات پارامترهای سراسری Defaults در .Em sudoers , هنگامی که .Nm sudo توسط .Sy root با گزینه .Fl V اجرا شود نمایش داده می‌شود. فهرست متغیرهای محیطی حذفی بر اساس سیستم‌عاملی که .Nm sudo روی آن اجرا می‌شود متفاوت است. .Pp سایر گزینه‌های .Nm مانند .Em always_set_home , .Em secure_path , .Em set_logname , و .Em set_home ممکن است بر محیط دستور تأثیر بگذارند. .Pp در سیستم‌های پشتیبانی‌کننده از PAM که ماژول .Sy pam_env برای .Nm sudo فعال است، متغیرهای موجود در محیط PAM ممکن است در محیط ادغام شوند. اگر متغیری در محیط PAM از قبل در محیط کاربر وجود داشته باشد، مقدار آن تنها در صورتی بازنویسی می‌شود که متغیر توسط .Nm حفظ نشده باشد. هنگامی که .Em env_reset فعال باشد، متغیرهای حفظ‌شده از محیط کاربر فراخوان توسط فهرست .Em env_keep بر متغیرهای محیط PAM اولویت دارند. هنگامی که .Em env_reset غیرفعال باشد، متغیرهای موجود در محیط کاربر فراخوان بر متغیرهای محیط PAM اولویت دارند مگر اینکه با الگویی در فهرست .Em env_delete تطبیق داشته باشند. .Pp پیونددهنده پویا در اکثر سیستم‌های عامل متغیرهایی را که می‌توانند پیوند پویا را کنترل کنند از محیط اجرایی برنامه‌های set-user-ID از جمله .Nm sudo . حذف خواهد کرد. بسته به سیستم عامل این موارد ممکن است شامل .Ev _RLD* , .Ev DYLD_* , .Ev LD_* , .Ev LDR_* , .Ev LIBPATH , .Ev SHLIB_PATH , و موارد دیگر باشد. این نوع متغیرها پیش از آنکه .Nm sudo حتی اجرای خود را آغاز کند از محیط حذف می‌شوند و بنابراین امکان حفظ آن‌ها برای .Nm sudo وجود ندارد. .Pp به عنوان یک حالت خاص، اگر گزینه .Fl i (ورود اولیه) مشخص شده باشد، .Nm صرف‌نظر از مقدار .Em env_reset . محیط را مقداردهی اولیه می‌کند. متغیرهای .Ev DISPLAY , .Ev PATH و .Ev TERM بدون تغییر باقی می‌مانند؛ .Ev HOME , .Ev MAIL , .Ev SHELL , .Ev USER , و .Ev LOGNAME بر اساس کاربر هدف تنظیم می‌شوند. در AIX (و سیستم‌های لینوکسی بدون PAM)، محتویات .Pa /etc/environment نیز گنجانده می‌شوند. .if \n(LC \{\ در سیستم‌های .Bx اگر پرچم .Em use_loginclass فعال باشد، متغیرهای .Em path و .Em setenv در .Pa /etc/login.conf نیز اعمال می‌شوند. .\} سایر متغیرهای محیطی حذف می‌شوند مگر آنکه توسط .Em env_keep یا .Em env_check , که در بالا توضیح داده شد مجاز شده باشند. .Pp در نهایت، پرونده‌های .Em restricted_env_file و .Em env_file در صورت وجود اعمال می‌شوند. متغیرهای موجود در .Em restricted_env_file ابتدا اعمال شده و مشمول همان محدودیت‌های محیط کاربر فراخواننده هستند، همان‌طور که در بالا توضیح داده شد. متغیرهای موجود در .Em env_file در آخر اعمال شده و مشمول این محدودیت‌ها نیستند. در هر دو حالت، متغیرهای موجود در پرونده‌ها تنها در صورتی روی مقادیر مشخص‌شده خود تنظیم می‌شوند که با یک متغیر محیطیِ موجود تداخل نداشته باشند. .Sh "قالب پرونده SUDOERS (SUDOERS FILE FORMAT)" پروندهٔ .Em sudoers از دو نوع مدخل تشکیل شده است: نام‌های مستعار (اساساً متغیرها) و مشخصات کاربر (که تعیین می‌کنند چه کسی مجاز به اجرای چه چیزی است). .Pp هنگامی که چندین مدخل با یک کاربر مطابقت داشته باشد، به ترتیب اعمال می‌شوند. در صورت وجود چندین مطابقت، آخرین مورد استفاده می‌شود (که الزاماً خاص‌ترین مطابقت نیست). .Pp دستور زبان پروندهٔ .Em sudoers در ادامه در قالب فرم باکوس-نائور گسترش‌یافته (EBNF) شرح داده خواهد شد. اگر با EBNF ناآشنا هستید نگران نباشید؛ ساختار آن نسبتاً ساده است و تعاریف زیر حاشیه‌نویسی شده‌اند. .Ss "محدودیت‌های منابع" به‌طور پیش‌فرض، .Nm از روش بومی سیستم‌عامل برای تنظیم محدودیت‌های منابع برای کاربر هدف استفاده می‌کند. در سیستم‌های لینوکس، محدودیت‌های منابع معمولاً توسط ماژول PAM به نام .Pa pam_limits.so تنظیم می‌شوند. در برخی از سیستم‌های BSD، پروندهٔ .Pa /etc/login.conf محدودیت‌های منابع را برای کاربر تعیین می‌کند. در سیستم‌های AIX، محدودیت‌های منابع در پروندهٔ .Pa /etc/security/limits پیکربندی می‌شوند. اگر مکانیزمی در سیستم برای تنظیم محدودیت‌های منابع به ازای هر کاربر وجود نداشته باشد، دستور با همان محدودیت‌های کاربر فراخواننده اجرا خواهد شد. تنها استثنا در این مورد، اندازهٔ پروندهٔ core dump است که توسط .Nm به‌طور پیش‌فرض روی 0 تنظیم شده است. غیرفعال‌سازی core dumpها به‌طور پیش‌فرض، امکان جلوگیری از مشکلات امنیتی احتمالی را فراهم می‌سازد که در آن‌ها با پروندهٔ core به عنوان ورودی قابل‌اعتماد برخورد می‌شود. .Pp محدودیت‌های منابع همچنین می‌توانند در خود پروندهٔ .Em sudoers تنظیم شوند، که در این حالت محدودیت‌های اعمال‌شده توسط سیستم را لغو می‌کنند. گزینه‌های .Em rlimit_as, .Em rlimit_core, .Em rlimit_cpu, .Em rlimit_data, .Em rlimit_fsize, .Em rlimit_locks, .Em rlimit_memlock, .Em rlimit_nofile, .Em rlimit_nproc, .Em rlimit_rss, .Em rlimit_stack که در زیر شرح داده شده‌اند را ببینید. محدودیت‌های منابع در .Nm می‌توانند به یکی از قالب‌های زیر تعیین شوند: .Bl -tag -width 6n .It Dq value هر دو محدودیت منابع نرم (soft) و سخت (hard) روی یک مقدار یکسان تنظیم می‌شوند. مقدار ویژهٔ .Dq infinity می‌تواند برای تعیین نامحدود بودن مقدار استفاده شود. .It Dq soft,hard دو مقدار که با کاما از هم جدا شده‌اند. محدودیت نرم روی مقدار اول و محدودیت سخت روی مقدار دوم تنظیم می‌شود. هر دو مقدار باید درون یک جفت گیومهٔ دوگانه قرار گیرند، یا کاما باید با یک بک‌اسلش گریز داده شود .Pq Ql \e . مقدار ویژهٔ .Dq infinity می‌تواند به جای هر یک از این مقادیر استفاده شود. .It Dq default محدودیت منابع پیش‌فرض برای کاربر استفاده خواهد شد. این مقدار ممکن است یک مقدار مختص به کاربر باشد (به بالا مراجعه کنید) یا مقدار محدودیت منابع در زمان اجرای .Nm sudo برای سیستم‌هایی که از محدودیت‌های به ازای هر کاربر پشتیبانی نمی‌کنند. .It Dq user محدودیت‌های منابع کاربر فراخواننده هنگام اجرای دستور حفظ خواهند شد. .El .Pp به عنوان مثال، برای بازگرداندن رفتار تاریخی اندازهٔ پروندهٔ core dump، می‌توان از خطی مانند زیر استفاده کرد: .sp .Dl Defaults rlimit_core=default .Pp محدودیت‌های منابع در .Nm تنها در نسخهٔ 1.8.7 یا بالاتر پشتیبانی می‌شوند. .Ss "راهنمای فشرده EBNF" EBNF روشی فشرده و دقیق برای توصیف دستور زبان (گرامر) یک زبان است. هر تعریف EBNF از .Em قواعد تولید . تشکیل شده است. برای نمونه: .Bd -literal -offset 4n symbol ::= definition | alternate1 | alternate2 ... .Ed .Pp هر .Em قاعدهٔ تولید به قواعد دیگر ارجاع می‌دهد و بدین ترتیب دستور زبان را برای زبان مورد نظر تشکیل می‌دهد. همچنین EBNF شامل عملگرهای زیر است که بسیاری از خوانندگان آن‌ها را از عبارت‌های باقاعده می‌شناسند. با این حال، نباید آن‌ها را با نویسه‌های .Dq wildcard اشتباه گرفت، چرا که دارای معانی متفاوتی هستند. .Bl -tag -width 4n .It \&? نشان می‌دهد که نماد (یا گروه نمادهای) قبلی اختیاری است. یعنی ممکن است یک بار ظاهر شود یا اصلاً ظاهر نشود. .It * نشان می‌دهد که نماد (یا گروه نمادهای) قبلی ممکن است صفر یا چند بار ظاهر شود. .It + نشان می‌دهد که نماد (یا گروه نمادهای) قبلی ممکن است یک یا چند بار ظاهر شود. .El .Pp از پرانتز می‌توان برای گروه‌بندی نمادها با یکدیگر استفاده کرد. برای شفافیت، از نقل‌قول تکی .Pq '' برای مشخص کردن یک رشته نویسه‌ای دقیق (در مقایسه با نام یک نماد) استفاده می‌شود. .Ss "نام‌های مستعار (Aliases)" چهار نوع نام مستعار وجود دارد: .Em User_Alias , .Em Runas_Alias , .Em Host_Alias و .Em Cmnd_Alias . با شروع از .Nm sudo 1.9.0، .Em Cmd_Alias می‌تواند در صورت تمایل به جای .Em Cmnd_Alias استفاده شود. .Bd -literal Alias ::= 'User_Alias' User_Alias_Spec (':' User_Alias_Spec)* | 'Runas_Alias' Runas_Alias_Spec (':' Runas_Alias_Spec)* | 'Host_Alias' Host_Alias_Spec (':' Host_Alias_Spec)* | 'Cmnd_Alias' Cmnd_Alias_Spec (':' Cmnd_Alias_Spec)* | 'Cmd_Alias' Cmnd_Alias_Spec (':' Cmnd_Alias_Spec)* User_Alias ::= NAME User_Alias_Spec ::= User_Alias '=' User_List Runas_Alias ::= NAME Runas_Alias_Spec ::= Runas_Alias '=' Runas_List Host_Alias ::= NAME Host_Alias_Spec ::= Host_Alias '=' Host_List Cmnd_Alias ::= NAME Cmnd_Alias_Spec ::= Cmnd_Alias '=' Cmnd_List NAME ::= [A-Z]([A-Z][0-9]_)* .Ed .Pp هر تعریف .Em alias به شکل زیر است: .Bd -literal Alias_Type NAME = item1, item2, ... .Ed .Pp که در آن .Em Alias_Type یکی از .Em User_Alias , .Em Runas_Alias , .Em Host_Alias , یا .Em Cmnd_Alias . است. یک .Dv NAME رشته‌ای از حروف بزرگ لاتین، ارقام و نویسه‌های خط زیرین .Pq Ql _ . است. یک .Dv NAME .Sy باید با یک حرف بزرگ لاتین آغاز شود. امکان قرار دادن چندین تعریف نام مستعار از یک نوع در یک خط وجود دارد، متصل با دو نقطه .Pq Ql :\& . برای نمونه: .Bd -literal Alias_Type NAME = item1, item2, item3 : NAME = item4, item5 .Ed .Pp تعریف مجدد یک .Em alias موجود، خطای نحوی است. استفاده از نام یکسان برای .Em aliases از انواع مختلف امکان‌پذیر است، اما توصیه نمی‌شود. .Pp تعاریف آنچه که یک عضو معتبر .Em alias را تشکیل می‌دهد در ادامه آمده است. .Bd -literal User_List ::= User | User ',' User_List User ::= '!'* user name | '!'* #user-ID | '!'* %group | '!'* %#group-ID | '!'* +netgroup | '!'* %:nonunix_group | '!'* %:#nonunix_gid | '!'* User_Alias .Ed .Pp یک .Em User_List از یک یا چند نام کاربری، شناسه‌های کاربری (با پیشوند .Ql # ) , نام‌ها و شناسه‌های گروه سیستم (به‌ترتیب با پیشوند .Ql % و .Ql %# )، نت‌گروه‌ها (با پیشوند .Ql + ) , نام‌ها و شناسه‌های گروه غیر یونیکس (به‌ترتیب با پیشوند .Ql %: و .Ql %:# ) و .Em User_Alias Ns ها تشکیل شده است. هر مورد از فهرست می‌تواند صفر یا چند عملگر .Ql \&! به عنوان پیشوند داشته باشد. تعداد فرد از عملگرهای .Ql \&! مقدار مورد را نفی می‌کنند؛ تعداد زوج فقط یکدیگر را خنثی می‌کنند. تطبیق نت‌گروه‌های کاربری فقط با استفاده از اعضای user و domain انجام می‌شود؛ عضو host هنگام تطبیق استفاده نمی‌شود. .Pp یک .Em user name , .Em user-ID , .Em group , .Em group-ID , .Em netgroup , .Em nonunix_group یا .Em nonunix_gid می‌تواند داخل گیومه دوگانه قرار گیرد تا نیاز به گریزدهی نویسه‌های خاص برطرف شود. به‌علاوه، نویسه‌های خاص می‌توانند در حالت هگزادسیمال گریزدهی‌شده مشخص شوند، مانند \ex20 برای فاصله. هنگام استفاده از گیومه دوگانه، هر نویسهٔ پیشوند باید درون گیومه قرار گیرد. .Pp ساختار واقعی .Em nonunix_group و .Em nonunix_gid به افزایهٔ ارائه‌دهندهٔ گروه زیرین بستگی دارد. برای نمونه، افزایهٔ QAS AD از قالب‌های زیر پشتیبانی می‌کند: .Bl -bullet -width 1n .It گروه در همان دامنه: "%:Group Name" .It گروه در هر دامنه‌ای: "%:Group Name@FULLY.QUALIFIED.DOMAIN" .It شناسهٔ SID گروه: "%:S-1-2-34-5678901234-5678901234-5678901234-567" .El .Pp برای اطلاعات بیشتر .Sx "GROUP PROVIDER PLUGINS" را ببینید. .Pp قراردادن نام‌های گروه در نقل‌قول اختیاری است. رشته‌های بدون نقل‌قول باید از بک‌اسلش .Pq Ql \e برای گریز دادن فاصله‌ها و نویسه‌های خاص استفاده کنند. برای فهرستی از نویسه‌هایی که باید گریز داده شوند .Sx Other special characters and reserved words را ببینید. .Bd -literal Runas_List ::= Runas_Member | Runas_Member ',' Runas_List Runas_Member ::= '!'* user name | '!'* #user-ID | '!'* %group | '!'* %#group-ID | '!'* %:nonunix_group | '!'* %:#nonunix_gid | '!'* +netgroup | '!'* Runas_Alias | '!'* ALL .Ed .Pp یک .Em Runas_List مشابه یک .Em User_List است با این تفاوت که به جای .Em User_Alias Ns ها می‌تواند شامل .Em Runas_Alias Ns ها باشد. نام‌های کاربری و گروه‌ها به عنوان رشته تطبیق داده می‌شوند. به عبارت دیگر، دو کاربر (یا گروه) با شناسهٔ کاربری (یا شناسهٔ گروه) یکسان متمایز در نظر گرفته می‌شوند. اگر می‌خواهید تمام نام‌های کاربری با شناسهٔ کاربری یکسان (مانند .Sy root و .Sy toor ) را تطبیق دهید، می‌توانید به جای نام از شناسهٔ کاربری استفاده کنید (#0 در مثال ارائه‌شده). شناسهٔ کاربری یا شناسهٔ گروه مشخص‌شده در یک .Em Runas_Member نیازی به فهرست شدن در پایگاه دادهٔ گذرواژه‌ها یا گروه‌ها ندارد. .Bd -literal Host_List ::= Host | Host ',' Host_List Host ::= '!'* host name | '!'* ip_addr | '!'* network(/netmask)? | '!'* +netgroup | '!'* Host_Alias | '!'* ALL .Ed .Pp یک .Em Host_List از یک یا چند نام میزبان، نشانی IP، شماره شبکه، netgroupها (با پیشوند .Ql + ) ، و سایر نام‌های مستعار تشکیل شده است. مجدداً، مقدار یک مورد می‌تواند با عملگر .Ql \&! نفی شود. تطبیق netgroupهای میزبان تنها با استفاده از اعضای میزبان (هم کامل و هم نامحدود) و دامنه انجام می‌شود؛ عضو کاربر در تطبیق به کار نمی‌رود. اگر شماره شبکه را بدون netmask مشخص کنید، .Nm sudo هر یک از رابط‌های شبکه میزبان محلی را بررسی کرده و اگر شماره شبکه با یکی از رابط‌های شبکه میزبان مطابقت داشته باشد، از netmask آن رابط استفاده خواهد کرد. می‌توان netmask را با نمادگذاری استاندارد نشانی IP (مانند 255.255.255.0 یا ffff:ffff:ffff:ffff::)، یا نمادگذاری CIDR (تعداد بیت‌ها، مانند 24 یا 64) مشخص کرد. نام میزبان می‌تواند شامل نویسه‌های عام به سبک پوسته باشد (بخش .Sx Wildcards در زیر را ببینید)، اما مگر اینکه دستور .Em hostname روی سیستم شما نام کامل میزبان را برگرداند، نیاز است از پرچم .Em fqdn استفاده کنید تا نویسه‌های عام قابل استفاده باشند. .Nm sudo تنها رابط‌های شبکه واقعی را بررسی می‌کند؛ این یعنی نشانی IP 127.0.0.1 (localhost) هرگز مطابقت نخواهد داشت. همچنین، نام میزبان .Dq localhost تنها در صورتی مطابقت داده می‌شود که نام واقعی میزبان باشد، که معمولاً تنها برای سیستم‌های جدا از شبکه صادق است. .Bd -literal digest ::= [A-Fa-f0-9]+ | [A-Za-z0-9\e+/=]+ Digest_Spec ::= "sha224" ':' digest | "sha256" ':' digest | "sha384" ':' digest | "sha512" ':' digest Digest_List ::= Digest_Spec | Digest_Spec ',' Digest_List Cmnd_List ::= Cmnd | Cmnd ',' Cmnd_List command name ::= regex | file name command ::= command name | command name args | command name regex | command name '""' | ALL Edit_Spec ::= "sudoedit" file name+ | "sudoedit" regex | "sudoedit" List_Spec ::= "list" Cmnd ::= Digest_List? '!'* command | '!'* directory | '!'* Edit_Spec | '!'* List_Spec | '!'* Cmnd_Alias .Ed .Pp یک .Em Cmnd_List فهرستی از یک یا چند دستور، دایرکتوری یا نام مستعار است. یک دستور، نام کامل فایل است که می‌تواند شامل جانشین‌های سبک پوسته باشد (بخش .Sx Wildcards زیر را ببینید)، یا عبارت باقاعده‌ای که با .Ql ^ شروع شده و با .Ql $ پایان می‌یابد (بخش .Sx Regular expressions زیر را ببینید). یک دایرکتوری، نام مسیر کاملی است که به .Ql / . ختم می‌شود. هنگامی که یک دایرکتوری را در .Em Cmnd_List , مشخص می‌کنید، کاربر قادر خواهد بود هر فایلی را درون آن دایرکتوری اجرا کند (اما نه در هیچ‌یک از زیردایرکتوری‌های آن). اگر هیچ آرگومان خط فرمانی مشخص نشده باشد، کاربر می‌تواند دستور را با هر آرگومان دلخواهی اجرا کند. آرگومان‌های خط فرمان می‌توانند شامل جانشین‌ها یا یک عبارت باقاعده باشند که با .Ql ^ آغاز شده و با .Ql $ . پایان می‌یابد. اگر آرگومان‌های خط فرمان شامل .Ql \&"" , باشند، دستور تنها می‌تواند .Em بدون هیچ آرگومانی اجرا شود. .Pp اگر یک .Em Cmnd دارای آرگومان‌های خط فرمان مرتبط باشد، آرگومان‌های موجود در .Em Cmnd باید با موارد ارائه‌شده توسط کاربر در خط فرمان مطابقت داشته باشند. اگر آرگومان‌ها در یک .Em Cmnd با نویسهٔ .Ql ^ آغاز شوند، به عنوان عبارت باقاعده تفسیر شده و بر همان اساس تطبیق داده می‌شوند. در غیر این صورت، هنگام تطبیق از جانشین‌های سبک پوسته استفاده می‌شود. مگر در صورت تعیین عبارت باقاعده، نویسه‌های زیر در صورت استفاده در آرگومان‌های دستور باید با یک .Ql \e گریز داده شوند: .Ql ,\& , .Ql :\& , .Ql =\& , .Ql \e . برای جلوگیری از اینکه آرگومان‌های درون یک .Em Cmnd که با نویسهٔ .Ql ^ شروع می‌شوند به عنوان عبارت باقاعده تفسیر شوند، نویسهٔ .Ql ^ باید با یک .Ql \e . گریز داده شود. .Pp دو دستور توکار درون خودِ .Nm sudo وجود دارند: .Dq list و .Dq sudoedit . برخلاف سایر دستورها، این دو باید در پروندهٔ .Em sudoers به صورت .Em بدون مسیر ابتدایی مشخص شوند. .Pp دستور توکار .Dq list می‌تواند برای مجاز ساختن کاربر جهت فهرست کردن امتیازات کاربری دیگر با گزینهٔ .Nm sudo Ns 's .Fl U استفاده شود. برای نمونه، .Dq sudo -l -U otheruser . کاربری با امتیاز .Dq list قادر است امتیازات کاربر دیگری را فهرست کند حتی اگر مجوزی برای اجرای دستورها به عنوان آن کاربر نداشته باشد. به‌طور پیش‌فرض، تنها root یا کاربری با توانایی اجرای هر دستوری به عنوان root یا .Ar user مشخص‌شده روی میزبان فعلی می‌تواند از گزینهٔ .Fl U استفاده کند. هیچ آرگومان خط فرمانی نباید همراه با دستور توکار .Dq list مشخص شود. .Pp دستور توکار .Dq sudoedit برای اجازه دادن به کاربر جهت اجرای .Nm sudo با گزینهٔ .Fl e (یا به عنوان .Nm sudoedit ) به کار می‌رود. این دستور می‌تواند درست مانند یک دستور معمولی، آرگومان‌های خط فرمان بپذیرد. برخلاف سایر دستورها، .Dq sudoedit در درون خود .Nm sudo تعبیه شده است و باید در پروندهٔ .Em sudoers .Em بدون مسیر ابتدایی مشخص شود. اگر مسیر ابتدایی وجود داشته باشد، برای نمونه .Pa /usr/bin/sudoedit ، نام مسیر بدون اعلان خطا به .Dq sudoedit تبدیل می‌شود. یک مسیر کامل برای .Nm sudoedit توسط .Nm visudo به عنوان خطا در نظر گرفته می‌شود. .Pp یک .Em command می‌تواند با یک .Em Digest_List پیشوند شود؛ فهرستی از یک یا چند مدخل .Em Digest_Spec که با کاما از هم جدا شده‌اند. اگر یک .Em Digest_List وجود داشته باشد، دستور تنها در صورتی با موفقیت مطابقت داده می‌شود که بتوان آن را با استفاده از یکی از خلاصه پیام‌های SHA-2 در فهرست تأیید کرد. از نسخهٔ 1.9.0، کلمهٔ کلیدی .Sy ALL می‌تواند در ترکیب با یک .Em Digest_List استفاده شود. قالب‌های خلاصهٔ زیر پشتیبانی می‌شوند: sha224، sha256، sha384 و sha512. رشته می‌تواند در قالب hex یا base64 مشخص شود (base64 فشرده‌تر است). چندین ابزار کمکی قادر به تولید خلاصه پیام‌های SHA-2 در قالب hex هستند مانند openssl، shasum، sha224sum، sha256sum، sha384sum، sha512sum. .Pp برای نمونه، با استفاده از openssl: .Bd -literal $ openssl dgst -sha224 /bin/ls SHA224(/bin/ls)= 118187da8364d490b4a7debbf483004e8f3e053ec954309de2c41a25 .Ed .Pp همچنین می‌توان از openssl برای تولید خروجی base64 استفاده کرد: .Bd -literal $ openssl dgst -binary -sha224 /bin/ls | openssl base64 EYGH2oNk1JC0p9679IMATo8+BT7JVDCd4sQaJQ== .Ed .Pp هشدار: اگر کاربر دسترسی نوشتن به خود دستور را داشته باشد (مستقیم یا از طریق یک دستور .Nm sudo )، ممکن است کاربر بتواند پس از بررسی خلاصه پیام اما پیش از اجرای دستور، آن را جایگزین کند. شرایط رقابتی مشابهی در سیستم‌های فاقد فراخوان سیستمی .Xr fexecve 2 وجود دارد، در صورتی که دایرکتوری حاوی دستور توسط کاربر قابل نوشتن باشد. برای اطلاعات بیشتر در مورد نحوهٔ اجرای دستورهای دارای خلاصه توسط .Nm sudo ، توضیحات مربوط به تنظیم .Em fdexec را ببینید. .Pp خلاصه پیام‌های دستور تنها در نسخهٔ 1.8.7 یا بالاتر پشتیبانی می‌شوند. .Ss "پیش‌فرض‌ها (Defaults)" برخی گزینه‌های پیکربندی ممکن است در زمان اجرا از مقادیر پیش‌فرض خود از طریق یک یا چند خط .Em Default_Entry تغییر یابند. این موارد می‌توانند بر همهٔ کاربران در هر میزبانی، همهٔ کاربران در یک میزبان خاص، یک کاربر خاص، یک دستور خاص یا دستورهایی که تحت عنوان کاربری خاص اجرا می‌شوند اثر بگذارند. ورودی‌های به ازای دستور نباید شامل آرگومان‌های خط فرمان باشند. اگر نیاز به تعیین آرگومان دارید، یک .Em Cmnd_Alias تعریف کرده و به جای آن به همان ارجاع دهید. .Bd -literal Default_Type ::= 'Defaults' | 'Defaults' '@' Host_List | 'Defaults' ':' User_List | 'Defaults' '!' Cmnd_List | 'Defaults' '>' Runas_List Default_Entry ::= Default_Type Parameter_List Parameter_List ::= Parameter | Parameter ',' Parameter_List Parameter ::= Parameter '=' Value | Parameter '+=' Value | Parameter '-=' Value | '!'* Parameter .Ed .Pp پارامترها می‌توانند .Sy flags ، مقادیر .Sy integer ، .Sy strings ، یا .Sy lists باشند. پرچم‌ها به‌صورت ضمنی بولی هستند و می‌توان آن‌ها را از طریق عملگر .Ql \&! غیرفعال کرد. برخی پارامترهای عددی، رشته‌ای و فهرستی نیز ممکن است در یک زمینهٔ بولی برای غیرفعال کردنشان به کار روند. مقادیر در صورتی که شامل چند کلمه باشند می‌توانند درون نقل‌قول جفتی .Pq \&"" قرار گیرند. نویسه‌های خاص را می‌توان با یک بک‌اسلش .Pq Ql \e گریز داد. .Pp برای گنجاندن یک نویسهٔ بک‌اسلش دقیق در یک آرگومان خط فرمان، باید بک‌اسلش را دوبار گریز دهید. برای نمونه، برای تطابق با .Ql \en به‌عنوان بخشی از یک آرگومان خط فرمان، باید از .Ql \e\e\e\en در پروندهٔ .Em sudoers استفاده کنید. این به دلیل وجود دو سطح از گریز است، یکی در خود تجزیه‌گر .Em sudoers و دیگری هنگامی که آرگومان‌های خط فرمان توسط تابع .Xr fnmatch 3 یا .Xr regexec 3 مطابقت داده می‌شوند. .Pp فهرست‌ها دارای دو عملگر انتساب اضافی هستند: .Ql += و .Ql -= . این عملگرها به ترتیب برای افزودن به فهرست و حذف از آن استفاده می‌شوند. استفاده از عملگر .Ql -= برای حذف عنصری که در فهرست وجود ندارد خطا محسوب نمی‌شود. .Pp ورودی‌های Defaults به ترتیب زیر تجزیه می‌شوند: ابتدا پیش‌فرض‌های سراسری، میزبان، کاربر و runas، سپس پیش‌فرض‌های دستور. اگر چندین تنظیم Defaults از یک نوع وجود داشته باشد، آخرین تنظیم منطبق استفاده می‌شود. تنظیمات Defaults زیر پیش از سایر موارد تجزیه می‌شوند زیرا ممکن است بر ورودی‌های بعدی اثر بگذارند: .Em fqdn , .Em group_plugin , .Em runas_default , .Em sudoers_locale . .Pp برای فهرستی از پارامترهای پشتیبانی‌شدهٔ Defaults، بخش .Sx SUDOERS OPTIONS را ببینید. .Ss "مشخصات کاربر (User specification)" .Bd -literal User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \e (':' Host_List '=' Cmnd_Spec_List)* Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List Cmnd_Spec ::= Runas_Spec? Option_Spec* (Tag_Spec ':')* Cmnd Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')' .ie \n(SL \{\ .ie \n(PS Option_Spec ::= (SELinux_Spec | Solaris_Priv_Spec | Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) .el Option_Spec ::= (SELinux_Spec | Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) .\} .el \{\ .ie \n(AA \{\ .ie \n(PS Option_Spec ::= (AppArmor_Spec | Solaris_Priv_Spec | Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) .el Option_Spec ::= (AppArmor_Spec | Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) .\} .el \{\ .ie \n(PS Option_Spec ::= (Solaris_Priv_Spec | Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) .el Option_Spec ::= (Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) .\} .\} .if \n(SL \{\ SELinux_Spec ::= ('ROLE=role' | 'TYPE=type') .\} .if \n(AA \{\ AppArmor_Spec ::= 'APPARMOR_PROFILE=profile' .\} .if \n(PS \{\ Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset') .\} Date_Spec ::= ('NOTBEFORE=timestamp' | 'NOTAFTER=timestamp') Timeout_Spec ::= 'TIMEOUT=timeout' Chdir_Spec ::= 'CWD=directory' Chroot_Spec ::= 'CHROOT=directory' Tag_Spec ::= ('EXEC' | 'NOEXEC' | 'FOLLOW' | 'NOFOLLOW' | 'LOG_INPUT' | 'NOLOG_INPUT' | 'LOG_OUTPUT' | 'NOLOG_OUTPUT' | 'MAIL' | 'NOMAIL' | 'INTERCEPT' | 'NOINTERCEPT' | 'PASSWD' | 'NOPASSWD' | 'SETENV' | 'NOSETENV') .Ed .Pp یک .Sy مشخصات کاربر تعیین می‌کند که کاربر مجاز به اجرای چه دستوراتی (و در قالب چه کاربری) بر روی میزبان‌های مشخص‌شده است. به‌طور پیش‌فرض، دستورها به عنوان .Sy root اجرا می‌شوند (مگر اینکه .Em runas_default روی مقدار دیگری تنظیم شده باشد)، اما این مورد می‌تواند به ازای هر دستور نیز تغییر کند. .Pp ساختار اصلی مشخصات کاربر به این صورت است: .Dq who where = (as_whom) what . اجزای تشکیل‌دهنده آن در ادامه بررسی می‌شود: .Ss "مشخصات Runas (Runas_Spec)" یک .Em Runas_Spec کاربر و/یا گروهی را که یک دستور می‌تواند تحت عنوان آن اجرا شود، مشخص می‌کند. یک .Em Runas_Spec کامل شامل دو .Em Runas_List (همان‌طور که در بالا تعریف شد) است که با یک دونقطه .Pq Ql :\& از هم جدا شده و درون یک جفت پرانتز قرار گرفته‌اند. نخستین .Em Runas_List مشخص می‌کند دستور از طریق گزینهٔ .Fl u تحت عنوان چه کاربرانی می‌تواند اجرا شود. دومین فهرست، گروه‌هایی را تعریف می‌کند که می‌توانند از طریق گزینهٔ .Fl g مشخص شوند (علاوه بر هر یک از گروه‌های متعلق به کاربر هدف). اگر هر دو .Em Runas_List تعیین شده باشند، دستور می‌تواند با هر ترکیبی از کاربران و گروه‌های فهرست‌شده در .Em Runas_List های مربوطه‌شان اجرا شود. اگر تنها مورد نخست مشخص شده باشد، دستور می‌تواند تحت عنوان هر کاربری در فهرست و به‌صورت اختیاری با هر گروهی که کاربر هدف عضو آن است، اجرا گردد. اگر نخستین .Em Runas_List خالی باشد اما دومی مشخص شده باشد، دستور می‌تواند تحت عنوان کاربر فراخواننده همراه با گروهی از فهرست .Em Runas_List اجرا شود. اگر هر دو .Em Runas_List خالی باشند، دستور تنها می‌تواند تحت عنوان کاربر فراخواننده اجرا شود و گروه نیز در صورت تعیین، باید از گروه‌هایی باشد که کاربر فراخواننده عضو آن است. اگر هیچ .Em Runas_Spec مشخص نشده باشد، دستور تنها می‌تواند تحت عنوان کاربر .Em runas_default .Sy ( root به‌صورت پیش‌فرض) اجرا شود و گروه نیز، در صورت تعیین، باید از گروه‌هایی باشد که کاربر .Em runas_default عضو آن است. .Pp یک .Em Runas_Spec مقدار پیش‌فرض را برای دستورهای پس از خود تعیین می‌کند. بدین معنا که برای مدخل: .Bd -literal dgb boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm .Ed .Pp کاربر .Sy dgb می‌تواند .Pa /bin/ls , .Pa /bin/kill , و .Pa /usr/bin/lprm را روی میزبان .No boulder Ns \(em Ns اما فقط تحت عنوان .Sy operator اجرا کند. برای نمونه: .Bd -literal $ sudo -u operator /bin/ls .Ed .Pp همچنین امکان بازنویسی یک .Em Runas_Spec در ادامهٔ یک مدخل وجود دارد. اگر مدخل را بدین‌صورت تغییر دهیم: .Bd -literal dgb boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm .Ed .Pp اکنون کاربر .Sy dgb مجاز است .Pa /bin/ls را تحت عنوان .Sy operator , اما .Pa /bin/kill و .Pa /usr/bin/lprm را تحت عنوان .Sy root اجرا کند. .Pp می‌توان این را گسترش داد تا به .Sy dgb اجازه اجرای .Pa /bin/ls با قرار دادن هر یک از کاربر یا گروه روی .Sy operator : داده شود: .Bd -literal dgb boulder = (operator : operator) /bin/ls, (root) /bin/kill,\e /usr/bin/lprm .Ed .Pp در حالی که بخش گروه در .Em Runas_Spec به کاربر اجازه می‌دهد تا دستور را با آن گروه اجرا کند، اما کاربر را مجبور به انجام این کار نمی‌کند. اگر هیچ گروهی در خط فرمان مشخص نشود، دستور با گروه فهرست‌شده در مدخل پایگاه داده گذرواژه کاربر مقصد اجرا خواهد شد. موارد زیر همگی توسط مدخل sudoers بالا مجاز خواهند بود: .Bd -literal $ sudo -u operator /bin/ls $ sudo -u operator -g operator /bin/ls $ sudo -g operator /bin/ls .Ed .Pp در مثال زیر، کاربر .Sy tcm می‌تواند دستوراتی را اجرا کند که با گروه dialer به یک پرونده دستگاه مودم دسترسی دارند. .Bd -literal tcm boulder = (:dialer) /usr/bin/tip, /usr/bin/cu,\e /usr/local/bin/minicom .Ed .Pp در این مثال تنها گروه تنظیم خواهد شد و اجرای دستور همچنان با کاربر .Sy tcm . است. برای مثال: .Bd -literal $ sudo -g dialer /usr/bin/cu .Ed .Pp ممکن است چندین کاربر و گروه در یک .Em Runas_Spec , حضور داشته باشند، که در این صورت کاربر می‌تواند هر ترکیبی از کاربران و گروه‌ها را با گزینه‌های .Fl u و .Fl g انتخاب کند. در این مثال: .Bd -literal alan ALL = (root, bin : operator, system) ALL .Ed .Pp کاربر .Sy alan می‌تواند هر دستوری را به عنوان کاربر .Sy root یا .Sy bin , با امکان تعیین اختیاری گروه روی operator یا system اجرا کند. .Ss "مشخصات گزینه‌ها (Option_Spec)" یک .Em Cmnd می‌تواند صفر یا چند گزینه مرتبط با خود داشته باشد. گزینه‌ها می‌توانند شامل .if \n(SL \{\ نقش‌ها و/یا انواع SELinux، .\} .if \n(AA \{\ پروفایل‌های AppArmor، .\} .if \n(PS \{\ مجموعه‌های امتیازهای Solaris، .\} تاریخ‌های شروع و/یا پایان و مهلت‌های زمانی دستور باشند. زمانی که یک گزینه برای یک .Em Cmnd , تنظیم شود، .Em Cmnd Ns ‌های بعدی در .Em Cmnd_Spec_List , آن گزینه را به ارث می‌برند مگر اینکه توسط گزینه دیگری جایگزین شوند. نام گزینه‌ها کلمات رزروشده در .Em sudoers . هستند. این بدان معناست که هیچ‌یک از نام‌های معتبر گزینه‌ها (پایین را ببینید) نمی‌توانند هنگام تعریف یک نام مستعار (alias) استفاده شوند. .if \n(SL \{\ .Ss "مشخصات SELinux (SELinux_Spec)" در سیستم‌های دارای پشتیبانی از SELinux، مدخل‌های پرونده‌ی .Em sudoers می‌توانند به‌صورت اختیاری یک نقش و/یا نوع SELinux مرتبط با یک دستور داشته باشند. این ویژگی می‌تواند برای پیاده‌سازی نوعی از کنترل دسترسی بر پایه نقش (RBAC) استفاده شود. اگر یک نقش یا نوع به همراه دستور مشخص شود، مقادیر پیش‌فرض تعیین‌شده در .Em sudoers . را بازنویسی می‌کند. با این حال، یک نقش یا نوع مشخص‌شده در خط فرمان، بر مقادیر موجود در .Em sudoers اولویت خواهد داشت. .\} .if \n(AA \{\ .Ss "مشخصات AppArmor (AppArmor_Spec)" در سیستم‌های پشتیبانی‌کننده از AppArmor، مدخل‌های پرونده‌ی .Em sudoers می‌توانند به‌طور اختیاری یک نمایه AppArmor را برای محدودسازی یک دستور تعیین کنند. اگر یک نمایه AppArmor به همراه دستور مشخص شود، مقادیر پیش‌فرض تعیین‌شده در .Em sudoers را بازنویسی خواهد کرد. برای پشتیبانی از تغییر نمایه‌ی مشخص‌شده برای یک کاربر، باید قوانین مناسب انتقال نمایه تعریف شده باشند. .Pp نمایه‌های AppArmor را می‌توان به هر شکلی که با قوانین .Xr aa_change_profile 2 سازگار باشد تعیین کرد. برای نمونه، در مدخل .Em sudoers زیر .Bd -literal alice ALL = (root) APPARMOR_PROFILE=my-profile ALL .Ed .Pp کاربر .Sy alice می‌تواند هر دستوری را به عنوان .Sy root تحت محدودیت نمایه‌ی .Ql my-profile اجرا کند. همچنین می‌توانید نمایه‌ها را روی هم قرار دهید (stack کنید)، یا به کاربر اجازه دهید دستورها را بدون محدودیت توسط هیچ نمایه‌ای اجرا کند. برای نمونه: .Bd -literal bob ALL = (root) APPARMOR_PROFILE=foo//&bar /usr/bin/vi cathy ALL = (root) APPARMOR_PROFILE=unconfined /bin/ls .Ed .Pp این مدخل‌های .Em sudoers به کاربر .Sy bob اجازه می‌دهند .Pa /usr/bin/vi را به عنوان .Sy root تحت نمایه‌های ادغام‌شده‌ی .Ql foo و .Ql bar , و به کاربر .Sy cathy اجازه می‌دهند .Pa /bin/ls را بدون هیچ‌گونه محدودیتی اجرا کند. .\} .if \n(PS \{\ .Ss "مشخصات امتیازات سولاریس (Solaris_Priv_Spec)" در سیستم‌های سولاریس، مدخل‌های پرونده‌ی .Em sudoers می‌توانند به‌صورت اختیاری مجموعه‌ی امتیازات و/یا مجموعه‌ی امتیازات محدودکننده سولاریس مرتبط با یک دستور را تعیین کنند. اگر امتیازات یا امتیازات محدودکننده به همراه دستور مشخص شوند، مقادیر پیش‌فرض تعیین‌شده در .Em sudoers را بازنویسی خواهند کرد. .Pp مجموعه امتیاز، فهرستی از نام‌های امتیاز جدا شده با ویرگول است. دستور .Xr ppriv 1 می‌تواند برای فهرست کردن تمام امتیازات شناخته‌شده در سیستم استفاده شود. برای نمونه: .Bd -literal $ ppriv -l .Ed .Pp علاوه بر این، چند رشته‌ی امتیاز .Dq ویژه وجود دارد: .Bl -tag -width "basic" .It none مجموعه تهی .It all مجموعه تمام امتیازات .It zone مجموعه تمام امتیازات موجود در zone جاری .It basic مجموعه پیش‌فرض امتیازاتی که در زمان ورود به کاربران عادی اعطا می‌شود .El .Pp می‌توان امتیازها را با افزودن نویسهٔ .Ql \&! یا .Ql \- به ابتدای نام امتیاز، از یک مجموعه مستثنی کرد. .\} .Ss "مشخصات تاریخ (Date_Spec)" قوانین .Nm را می‌توان با یک تاریخ شروع و پایان از طریق تنظیمات .Dv NOTBEFORE و .Dv NOTAFTER مشخص کرد. برچسب زمانی باید در قالب .Dq Generalized Time همان‌طور که در RFC 4517 تعریف شده است، مشخص شود. قالب در عمل به‌صورت .Ql yyyymmddHHMMSSZ است که در آن دقیقه و ثانیه اختیاری هستند. پسوند .Ql Z نشان می‌دهد که برچسب زمانی در ساعت هماهنگ جهانی (UTC) است. همچنین می‌توان به‌جای .Ql Z ، اختلاف منطقه زمانی از UTC را بر حسب ساعت و دقیقه مشخص کرد. به‌عنوان مثال، .Ql -0500 معادل زمان استاندارد شرقی در ایالات متحده خواهد بود. به‌عنوان یک قابلیت توسعه‌یافته، اگر هیچ .Ql Z یا اختلاف منطقه زمانی مشخص نشده باشد، زمان محلی استفاده خواهد شد. .Pp موارد زیر همگی برچسب‌های زمانی معتبر هستند: .Bd -literal -offset 4n 20170214083000Z 2017021408Z 20160315220000-0500 20151201235900 .Ed .Ss "مشخصات مهلت زمانی (Timeout_Spec)" یک دستور ممکن است دارای یک مهلت زمانی مرتبط باشد. اگر مهلت زمانی پیش از پایان اجرای دستور منقضی شود، دستور خاتمه داده خواهد شد. مهلت زمانی را می‌توان در ترکیب‌هایی از روز، ساعت، دقیقه و ثانیه همراه با یک پسوند تک‌حرفیِ غیرحساس به حروف بزرگ و کوچک که واحد زمان را مشخص می‌کند، تعیین کرد. به‌عنوان مثال، مهلت زمانیِ ۷ روز، ۸ ساعت، ۳۰ دقیقه و ۱۰ ثانیه به‌صورت .Ql 7d8h30m10s نوشته می‌شود. اگر عددی بدون واحد مشخص شود، ثانیه در نظر گرفته می‌شود. هر یک از واحدهای روز، ساعت، دقیقه یا ثانیه را می‌توان نادیده گرفت. ترتیب واحدها باید از بزرگ‌ترین به کوچک‌ترین باشد و یک واحد نباید بیش از یک بار مشخص شود. .Pp موارد زیر همگی مقادیر مهلت زمانیِ .Em معتبر هستند: .Ql 7d8h30m10s , .Ql 14d , .Ql 8h30m , .Ql 600s , .Ql 3600 . موارد زیر مقادیر مهلت زمانیِ .Em نامعتبر هستند: .Ql 12m2w1d , .Ql 30s10m4h , .Ql 1d2d3h . .Pp این تنظیم فقط در نگارش 1.8.20 یا بالاتر پشتیبانی می‌شود. .Ss "مشخصات دایرکتوری کاری (Chdir_Spec)" دایرکتوری کاری که دستور در آن اجرا خواهد شد را می‌توان با استفاده از تنظیم .Dv CWD مشخص کرد. .Fa directory باید یک نام مسیر کامل باشد که با نویسه .Sq / یا .Sq ~ یا مقدار ویژه .Dq * . آغاز شود. مقدار .Dq * نشان می‌دهد که کاربر می‌تواند دایرکتوری کاری را با اجرای .Nm sudo همراه با گزینه .Fl D مشخص کند. به‌طور پیش‌فرض، دستورها از دایرکتوری کاری فعلی کاربر فراخواننده اجرا می‌شوند، مگر اینکه گزینه .Fl i داده شده باشد. نام‌های مسیر به شکل .Pa ~user/path/name به‌صورت نسبی نسبت به دایرکتوری خانگی کاربرِ نام‌برده تفسیر می‌شوند. اگر نام کاربر حذف شود، مسیر نسبت به دایرکتوری خانگی کاربر runas خواهد بود. .Pp این تنظیم فقط در نسخه 1.9.3 یا بالاتر پشتیبانی می‌شود. .Ss "مشخصات Chroot (Chroot_Spec)" دایرکتوری ریشه‌ای که دستور در آن اجرا خواهد شد را می‌توان با استفاده از تنظیم .Dv CHROOT مشخص کرد. .Fa directory باید یک نام مسیر کامل باشد که با نویسه .Sq / یا .Sq ~ یا مقدار ویژه .Dq * . آغاز شود. مقدار .Dq * نشان می‌دهد که کاربر می‌تواند دایرکتوری ریشه را با اجرای .Nm sudo همراه با گزینه .Fl R مشخص کند. این تنظیم می‌تواند برای اجرای دستور در یک .Xr chroot 2 .Dq sandbox مشابه ابزار .Xr chroot 8 استفاده شود. نام‌های مسیر به شکل .Pa ~user/path/name به‌صورت نسبی نسبت به دایرکتوری خانگی کاربرِ نام‌برده تفسیر می‌شوند. اگر نام کاربر حذف شود، مسیر نسبت به دایرکتوری خانگی کاربر runas خواهد بود. .Pp این تنظیم فقط در نسخه 1.9.3 یا بالاتر پشتیبانی می‌شود. .Ss "مشخصات برچسب (Tag_Spec)" یک دستور می‌تواند صفر یا چند برچسب مرتبط با خود داشته باشد. مقادیر برچسب زیر پشتیبانی می‌شوند: .Dv EXEC , .Dv NOEXEC , .Dv FOLLOW , .Dv NOFOLLOW , .Dv LOG_INPUT , .Dv NOLOG_INPUT , .Dv LOG_OUTPUT , .Dv NOLOG_OUTPUT , .Dv MAIL , .Dv NOMAIL , .Dv INTERCEPT , .Dv NOINTERCEPT , .Dv PASSWD , .Dv NOPASSWD , .Dv SETENV , و .Dv NOSETENV . هنگامی که برچسبی روی یک .Em Cmnd , تنظیم شود، .Em Cmnd Ns s بعدی در .Em Cmnd_Spec_List , آن برچسب را به ارث می‌برند مگر اینکه توسط برچسب مخالف بازنویسی شود (به عبارت دیگر، .Dv PASSWD جایگزین .Dv NOPASSWD و .Dv NOEXEC جایگزین .Dv EXEC ) . .Bl -hang -width 0n .It Dv EXEC No و Dv NOEXEC .sp اگر .Nm sudo با پشتیبانی از .Em noexec کامپایل شده باشد و سیستم‌عامل زیرین نیز از آن پشتیبانی کند، برچسب .Dv NOEXEC می‌تواند برای جلوگیری از اجرای دستورهای دیگر توسط یک فایل اجرایی با پیوند پویا استفاده شود. .Pp در مثال زیر، کاربر .Sy aaron می‌تواند .Pa /usr/bin/more و .Pa /usr/bin/vi را اجرا کند اما فرار به پوسته غیرفعال خواهد بود. .Bd -literal aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi .Ed .Pp برای جزئیات بیشتر دربارهٔ نحوهٔ کارکرد .Dv NOEXEC و اینکه آیا روی سیستم شما کار خواهد کرد یا خیر، بخش .Sx Preventing shell escapes در ادامه را ببینید. .It Dv FOLLOW No و Dv NOFOLLOW .sp از نسخهٔ 1.8.15 به بعد، .Nm sudoedit فایلی را که پیوند نمادین باشد باز نخواهد کرد مگر اینکه پرچم .Em sudoedit_follow فعال شده باشد. برچسب‌های .Dv FOLLOW و .Dv NOFOLLOW مقدار .Em sudoedit_follow را لغو می‌کنند و می‌توان از آن‌ها برای مجاز (یا ممنوع) کردن ویرایش پیوندهای نمادین به‌ازای هر دستور استفاده کرد. این برچسب‌ها فقط برای دستور .Em sudoedit مؤثرند و برای تمام دستورهای دیگر نادیده گرفته می‌شوند. .It Dv LOG_INPUT No و Dv NOLOG_INPUT .sp این برچسب‌ها مقدار پرچم .Em log_input را به‌ازای هر دستور لغو می‌کنند. برای اطلاعات بیشتر، بخش .Sx "I/O LOGGING" را ببینید. .It Dv LOG_OUTPUT No و Dv NOLOG_OUTPUT .sp این برچسب‌ها مقدار پرچم .Em log_output را به‌ازای هر دستور لغو می‌کنند. برای اطلاعات بیشتر، بخش .Sx "I/O LOGGING" را ببینید. .It Dv MAIL No و Dv NOMAIL .sp این برچسب‌ها با لغو کردن مقدار پرچم .Em mail_all_cmnds به‌ازای هر دستور، کنترل دقیقی روی ارسال ایمیل هنگام اجرای یک دستور توسط کاربر فراهم می‌کنند. آن‌ها زمانی که .Nm sudo با گزینه‌های .Fl l یا .Fl v اجرا شود، هیچ اثری ندارند. یک برچسب .Dv NOMAIL همچنین گزینه‌های .Em mail_always و .Em mail_no_perms را لغو خواهد کرد. برای اطلاعات بیشتر، توضیحات .Em mail_all_cmnds , .Em mail_always , و .Em mail_no_perms در بخش .Sx SUDOERS OPTIONS در ادامه را ببینید. .It Dv PASSWD No و Dv NOPASSWD .sp به‌طور پیش‌فرض، .Nm sudo نیاز دارد که کاربر پیش از اجرای یک دستور، احراز هویت کند. این رفتار را می‌توان از طریق برچسب .Dv NOPASSWD تغییر داد. مانند یک .Em Runas_Spec , برچسب .Dv NOPASSWD یک مقدار پیش‌فرض برای دستورهایی که پس از آن در .Em Cmnd_Spec_List . می‌آیند تعیین می‌کند. در مقابل، می‌توان از برچسب .Dv PASSWD برای بازگرداندن این رفتار استفاده کرد. برای نمونه: .Bd -literal ray rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm .Ed .Pp به کاربر .Sy ray اجازه می‌دهد تا .Pa /bin/kill , .Pa /bin/ls , و .Pa /usr/bin/lprm را به عنوان .Sy root روی ماشین .Dq rushmore بدون نیاز به احراز هویت اجرا کند. اگر فقط بخواهیم .Sy ray بتواند .Pa /bin/kill را بدون گذرواژه اجرا کند، ورودی به شکل زیر خواهد بود: .Bd -literal ray rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm .Ed .Pp با این حال، توجه داشته باشید که برچسب .Dv PASSWD هیچ تاثیری بر کاربرانی که در گروه مشخص‌شده توسط تنظیمات .Em exempt_group قرار دارند، ندارد. .Pp به‌طور پیش‌فرض، اگر برچسب .Dv NOPASSWD برای هر یک از ورودی‌های کاربر در میزبان فعلی اعمال شده باشد، کاربر می‌تواند .Ql sudo -l را بدون گذرواژه اجرا کند. علاوه بر این، کاربر تنها در صورتی می‌تواند .Ql sudo -v را بدون گذرواژه اجرا کند که تمام ورودی‌های کاربر برای میزبان فعلی دارای برچسب .Dv NOPASSWD باشند. این رفتار را می‌توان از طریق گزینه‌های .Em verifypw و .Em listpw بازنویسی کرد. .It Dv SETENV No و Dv NOSETENV .sp این برچسب‌ها مقدار پرچم .Em setenv را به ازای هر دستور بازنویسی می‌کنند. اگر .Dv SETENV برای دستوری تنظیم شده باشد، کاربر می‌تواند پرچم .Em env_reset را از خط فرمان از طریق گزینهٔ .Fl E غیرفعال کند. علاوه بر این، متغیرهای محیطیِ مقداردهی‌شده در خط فرمان مشمول محدودیت‌های اعمال‌شده توسط .Em env_check , .Em env_delete , یا .Em env_keep . نمی‌شوند. به این ترتیب، تنها کاربران مورد اعتماد باید مجاز به تعیین متغیرها به این شیوه باشند. اگر دستور مطابقت‌یافته .Sy ALL , باشد، برچسب .Dv SETENV به‌صورت ضمنی برای آن دستور اعمال می‌شود؛ این حالت پیش‌فرض را می‌توان با استفاده از برچسب .Dv NOSETENV بازنویسی کرد. .It Dv INTERCEPT No و Dv NOINTERCEPT .sp اگر .Nm sudo با پشتیبانی از .Em intercept کامپایل شده باشد و سیستم‌عامل زیربنایی از آن پشتیبانی کند، برچسب .Dv INTERCEPT می‌تواند برای اعتبارسنجی برنامه‌های ایجادشده توسط یک فرمان در برابر .Em sudoers و ثبت لاگ آن‌ها، دقیقاً مانند زمانی که مستقیماً از طریق .Nm sudo اجرا می‌شوند، استفاده شود. این قابلیت همراه با دستورهایی که اجازه فرار به شل را می‌دهند مانند ویرایشگرها، شل‌ها و صفحه‌بندها مفید است. به‌دلیل بررسی سیاست‌ها سربار اضافی وجود دارد که ممکن است هنگام اجرای فرمان‌هایی مانند اسکریپت‌های شل که تعداد زیادی زیرفرمان اجرا می‌کنند، تاخیر ایجاد کند. برای فرمان‌های تعاملی، مانند یک شل یا ویرایشگر، این سربار معمولاً محسوس نیست. .Pp در مثال زیر، کاربر .Sy chuck می‌تواند هر فرمانی را روی دستگاه .Dq research در حالت intercept اجرا کند. .Bd -literal chuck research = INTERCEPT: ALL .Ed .Pp برای جزئیات بیشتر در مورد نحوه کارکرد .Dv INTERCEPT و اینکه آیا روی سیستم شما کار خواهد کرد یا خیر، بخش .Sx Preventing shell escapes را در ادامه ببینید. .El .Ss "نویسه‌های عام (Wildcards)" .Nm sudo اجازه می‌دهد از .Em wildcards سبک شل (معروف به نویسه‌های meta یا glob) در نام میزبان‌ها، مسیرها و آرگومان‌های خط فرمان در پرونده .Em sudoers استفاده شود. تطبیق نویسه‌های عام از طریق توابع .Xr glob 3 و .Xr fnmatch 3 همان‌طور که در .St -p1003.1 مشخص شده است انجام می‌شود. .Bl -tag -width "[!...]" .It * با هر مجموعه‌ای از صفر یا چند نویسه (شامل فاصله) مطابقت دارد. .It \&? با هر تک‌نویسه (شامل فاصله) مطابقت دارد. .It [...] با هر نویسه‌ای در محدوده مشخص‌شده مطابقت دارد. .It [!...] با هر نویسه‌ای که در محدوده مشخص‌شده .Em نیست مطابقت دارد. .It \ex برای هر نویسه .Sq x ، به .Sq x ارزیابی می‌شود. این برای گریز دادن نویسه‌های خاص استفاده می‌شود، مانند: .Ql * ، .Ql \&? ، .Ql [\& ، و .Ql ]\& . .El .Pp .Bf -symbolic این‌ها عبارت باقاعده (regular expression) نیستند. .Ef برخلاف عبارت باقاعده، هیچ راهی برای تطبیق یک یا چند نویسه در یک محدوده وجود ندارد. .Pp کلاس‌های نویسه در صورتی قابل استفاده هستند که توابع .Xr glob 3 و .Xr fnmatch 3 سیستم شما از آن‌ها پشتیبانی کنند. با این حال، از آنجا که نویسه .Ql :\& معنای خاصی در .Em sudoers دارد، باید گریز داده شود. برای مثال: .Bd -literal -offset 4n /bin/ls [[\e:\&alpha\e:\&]]* .Ed .Pp با هر نام پرونده‌ای که با یک حرف شروع شود مطابقت خواهد داشت. .Pp یک ممیز رو به جلو .Pq Ql / توسط نویسه‌های عامِ استفاده‌شده در بخش نام پرونده در دستور، مطابقت داده .Em نخواهد شد. این امر برای آن است که مسیری مانند: .Bd -literal -offset 4n /usr/bin/* .Ed .Pp با .Pa /usr/bin/who مطابقت داشته باشد، اما با .Pa /usr/bin/X11/xterm مطابقت نداشته باشد. .Pp با این حال، هنگام تطبیق آرگومان‌های خط فرمان، یک ممیز با نویسه‌های عام مطابقت داده .Em می‌شود زیرا آرگومان‌های خط فرمان ممکن است حاوی رشته‌های اختیاری باشند و نه لزوماً نام مسیرها. .Pp .Bf -symbolic نویسه‌های عام در آرگومان‌های خط فرمان باید با احتیاط استفاده شوند. .Ef .br نویسه‌های عام می‌توانند با هر نویسه‌ای، از جمله فاصله خالی، مطابقت پیدا کنند. در بیشتر موارد، استفاده از عبارت منظم برای مطابقت با آرگومان‌های خط فرمان ایمن‌تر است. برای اطلاعات بیشتر، بخش .Sx Wildcards in command arguments را در زیر ببینید. .Ss "استثناهای قوانین نویسه‌های عام" استثناهای زیر برای قوانین بالا اعمال می‌شوند: .Bl -tag -width "sudoedit" .It \&"" اگر رشته خالیِ .Ql \&"" تنها آرگومان خط فرمان در مدخل پرونده .Em sudoers باشد، به این معنی است که اجرای دستور با .Em هیچ آرگومانی مجاز نیست. .It sudoedit آرگومان‌های خط فرمان برای دستور توکارِ .Em sudoedit باید همیشه نام مسیر باشند؛ بنابراین ممیز رو به جلو .Pq Ql / با نویسه عام مطابقت داده نخواهد شد. .El .Ss "عبارت‌های منظم (Regular expressions)" از نسخه 1.9.10 به بعد، امکان استفاده از عبارت‌های منظم برای نام مسیرها و آرگومان‌های خط فرمان وجود دارد. عبارت‌های منظم نسبت به .Em wildcards سبک پوسته قابلیت بیانگری بیشتری دارند و معمولاً ایمن‌تر هستند زیرا هنگام مطابقت، درجه کنترل بیشتری فراهم می‌کنند. نوع عبارت‌های منظم پشتیبانی‌شده توسط .Nm از نوع عبارت‌های منظم توسعه‌یافته POSIX است، مشابه آنچه توسط ابزار .Xr egrep 1 استفاده می‌شود. این موارد معمولاً بر اساس سیستم، در کتابچه‌های راهنمای .Xr regex 7 یا .Xr re_format 7 مستندسازی شده‌اند. به عنوان یک قابلیت توسعه‌یافته، اگر عبارت منظم با .Dq (?i) آغاز شود، مطابقت بدون حساسیت به حروف بزرگ و کوچک انجام خواهد شد. .Pp در .Em sudoers ، عبارت‌های منظم باید با نویسه .Ql ^ شروع شوند و با نویسه .Ql $ به پایان برسند. این امر مشخص می‌کند چه مواردی عبارت منظم هستند و چه مواردی نیستند. نام مسیر، آرگومان‌های خط فرمان یا هر دو می‌توانند عبارت منظم باشند. از آنجا که نام مسیر و آرگومان‌ها به صورت مجزا مطابقت داده می‌شوند، حتی امکان استفاده از نویسه‌های عام برای نام مسیر و عبارت‌های منظم برای آرگومان‌ها وجود دارد. امکان استفاده از یک عبارت منظم واحد برای مطابقت هم‌زمان دستور و آرگومان‌های آن وجود ندارد. طول عبارت‌های منظم در .Em sudoers به ۱۰۲۴ نویسه محدود است. .Pp هیچ نیازی به گریز دادن نویسه‌های خاص .Em sudoers در یک عبارت منظم وجود ندارد، به جز علامت پوند .Pq Ql # . .Pp در مثال زیر، کاربر .Sy john می‌تواند دستور .Xr passwd 1 را با هویت .Sy root روی هر میزبانی اجرا کند، ولی مجاز به تغییر گذرواژهٔ .Sy root نیست. بیان امن این نوع قاعده با استفاده از نویسه‌های عمومی (wildcards) ناممکن است. .Bd -literal -offset 4n john ALL = /usr/bin/passwd ^[a-zA-Z0-9_]+$,\e !/usr/bin/passwd root .Ed .Pp همچنین امکان استفاده از عبارات باقاعده در ترکیب با قواعد .Nm sudoedit وجود دارد. قاعدهٔ زیر به کاربر bob تنها امکان ویرایش پرونده‌های .Pa /etc/motd , .Pa /etc/issue , و .Pa /etc/hosts را می‌دهد. .Bd -literal -offset 4n bob ALL = sudoedit ^/etc/(motd|issue|hosts)$ .Ed .Pp عبارات باقاعده همچنین می‌توانند برای تطبیق خود دستور استفاده شوند. در این مثال، از یک عبارت باقاعده استفاده شده است تا به کاربر .Sy sid اجازهٔ اجرای دستورهای .Pa /usr/sbin/groupadd , .Pa /usr/sbin/groupmod , .Pa /usr/sbin/groupdel , .Pa /usr/sbin/useradd , .Pa /usr/sbin/usermod , و .Pa /usr/sbin/userdel با هویت .Sy root داده شود. .Bd -literal -offset 4n sid ALL = ^/usr/sbin/(group|user)(add|mod|del)$ .Ed .Pp یک عیب استفاده از عبارت باقاعده برای تطبیق نام دستور، عدم امکان تطبیق مسیرهای نسبی مانند .Pa ./useradd یا .Pa ../sbin/useradd است. این موضوع هنگام استفاده از عبارت باقاعده برای نام دستور همراه با عملگر نقیض، .Ql !\& , تبعات امنیتی دارد، زیرا چنین قواعدی را می‌توان به سادگی دور زد. به همین دلیل، استفاده از عبارت باقاعدهٔ منفی‌شده برای نام دستور .Sy به شدت نهی می‌شود . این موضوع شامل دستورهای منفی‌شده‌ای که تنها از عبارت باقاعده برای تطبیق آرگومان‌های دستور استفاده می‌کنند، نمی‌شود. برای اطلاعات بیشتر، بخش .Sx Regular expressions in command names در ادامه را ببینید. .Ss "فراخوانی پرونده‌های دیگر از درون sudoers" امکان فراخوانی دیگر پرونده‌های .Em sudoers از درون پروندهٔ .Em sudoers فعلی در حال پردازش، با استفاده از دستورالعمل‌های .Em @include و .Em @includedir وجود دارد. جهت سازگاری با نگارش‌های sudo پیش از 1.9.1، .Em #include و .Em #includedir نیز پذیرفته می‌شوند. .Pp یک پروندهٔ include می‌تواند برای نمونه جهت نگهداری یک پروندهٔ .Em sudoers سراسری در کنار یک پروندهٔ محلی مخصوص هر ماشین استفاده شود. برای این مثال، پروندهٔ .Em sudoers سراسری .Pa /etc/sudoers و پروندهٔ مخصوص هر ماشین .Pa /etc/sudoers.local خواهد بود. برای فراخوانی .Pa /etc/sudoers.local از درون .Pa /etc/sudoers می‌توان از خط زیر در .Pa /etc/sudoers : استفاده کرد: .Bd -literal -offset 4n @include /etc/sudoers.local .Ed .Pp هنگامی که .Nm sudo به این خط می‌رسد، پردازش پروندهٔ کنونی .Pq Pa /etc/sudoers را متوقف کرده و به .Pa /etc/sudoers.local . تغییر وضعیت می‌دهد. پس از رسیدن به انتهای .Pa /etc/sudoers.local ، باقی‌ماندهٔ .Pa /etc/sudoers پردازش خواهد شد. پرونده‌های فراخوانی‌شده می‌توانند خود پرونده‌های دیگری را فراخوانی کنند. یک محدودیت سخت ۱۲۸ سطحی برای پرونده‌های تودرتو اعمال می‌شود تا از ایجاد حلقه‌های فراخوانی پرونده جلوگیری شود. .Pp از نسخهٔ 1.9.1 به بعد، مسیر پروندهٔ فراخوانی‌شده در صورت گریز با بک‌اسلش .Pq Ql \e . می‌تواند شامل فاصله باشد. همچنین می‌توان تمام مسیر را درون جفت‌نقل‌قول قرار داد .Pq \&"" ، که در این صورت نیازی به گریز دادن نیست. برای گنجاندن خود نویسهٔ بک‌اسلش در مسیر، باید از .Ql \e\e استفاده شود. .Pp اگر مسیر پروندهٔ فراخوانی‌شده کامل نباشد (با .Ql / ) آغاز نشود)، باید در همان شاخه‌ای قرار داشته باشد که پروندهٔ sudoers اصلی از آن فراخوانی شده است. برای نمونه اگر .Pa /etc/sudoers شامل این خط باشد: .Bd -literal -offset 4n @include sudoers.local .Ed .Pp پرونده‌ای که فراخوانی خواهد شد .Pa /etc/sudoers.local . است. .Pp نام پرونده همچنین می‌تواند شامل گریز .Ql %h باشد که نمایانگر شکل کوتاه نام میزبان است. به عبارت دیگر، اگر نام میزبان دستگاه .Dq xerxes باشد، آنگاه .Bd -literal -offset 4n @include /etc/sudoers.%h .Ed .Pp باعث خواهد شد که .Nm sudo پروندهٔ .Pa /etc/sudoers.xerxes . را فراخوانی کند. .Pp دستورالعمل .Em @includedir می‌تواند برای ایجاد یک شاخهٔ .Pa sudoers.d به کار رود تا مدیر بستهٔ سیستم بتواند هنگام نصب بسته‌ها، قوانین پروندهٔ .Em sudoers را در آن قرار دهد. برای نمونه با داشتن: .Bd -literal -offset 4n @includedir /etc/sudoers.d .Ed .Pp .Nm sudo پردازش پروندهٔ کنونی را متوقف کرده و تمام پرونده‌های موجود در .Pa /etc/sudoers.d ، را می‌خواند؛ در حالی که برای جلوگیری از ایجاد مشکل با پرونده‌های موقت یا پشتیبان ویرایشگر و مدیر بسته، از پرونده‌هایی که به .Ql ~ ختم می‌شوند یا دارای نویسهٔ .Ql .\& هستند صرف‌نظر می‌کند. .Pp پرونده‌ها به ترتیب لغوی مرتب و تجزیه می‌شوند. یعنی .Pa /etc/sudoers.d/01_first پیش از .Pa /etc/sudoers.d/10_second . تجزیه خواهد شد. توجه داشته باشید به دلیل اینکه مرتب‌سازی لغوی است و نه عددی، .Pa /etc/sudoers.d/1_whoops .Em پس از .Pa /etc/sudoers.d/10_second . بارگذاری خواهد شد. استفاده از تعداد صفرهای پیشرو یکسان در نام پرونده‌ها می‌تواند برای جلوگیری از چنین مشکلاتی به کار رود. پس از تجزیهٔ پرونده‌های درون شاخه، کنترل به پرونده‌ای بازمی‌گردد که شامل دستورالعمل .Em @includedir بوده است. .Pp بر خلاف پرونده‌های گنجانده‌شده از طریق .Em @include , ابزار .Nm visudo پرونده‌های درون پوشهٔ .Em @includedir را ویرایش نخواهد کرد، مگر اینکه یکی از آن‌ها دارای خطای نگارشی باشد. همچنان اجرای .Nm visudo با پرچم .Fl f برای ویرایش مستقیم پرونده‌ها ممکن است، اما این کار مانع تعریف مجدد یک .Em alias که در پروندهٔ دیگری نیز وجود دارد نخواهد شد. .Ss "سایر نویسه‌های ویژه و کلمات رزروشده" علامت هش .Pq Ql # برای نشان دادن توضیح به کار می‌رود (مگر اینکه بخشی از دستورالعمل #include باشد یا در زمینهٔ نام کاربری قرار گرفته و با یک یا چند رقم دنبال شود، که در این حالت به عنوان یک شناسهٔ کاربری در نظر گرفته می‌شود). هم نویسهٔ توضیح و هم هر متنی پس از آن، تا انتهای خط، نادیده گرفته می‌شوند. .Pp کلمهٔ رزروشدهٔ .Sy ALL یک .Em alias توکار است که همواره باعث موفقیت در تطبیق می‌شود. می‌توان از آن در هر جایی که در حالت معمول از یک .Em Cmnd_Alias , .Em User_Alias , .Em Runas_Alias , یا .Em Host_Alias . استفاده می‌شود، بهره برد. تلاش برای تعریف یک .Em alias با نام .Sy ALL منجر به خطای نگارشی خواهد شد. استفاده از .Sy ALL می‌تواند خطرناک باشد زیرا در زمینهٔ دستور، به کاربر اجازهٔ اجرای .Em هر دستوری را روی سامانه می‌دهد. .Pp نام گزینه‌های زیر که در یک .Em Option_Spec مجاز هستند نیز کلمات رزروشده در نظر گرفته می‌شوند: .Dv CHROOT , .if \n(PS \{\ .Dv PRIVS , .Dv LIMITPRIVS , .\} .if \n(SL \{\ .Dv ROLE , .Dv TYPE , .\} .Dv TIMEOUT , .Dv CWD , .Dv NOTBEFORE و .Dv NOTAFTER . تلاش برای تعریف یک .Em alias هم‌نام با یکی از این گزینه‌ها، منجر به خطای نگارشی خواهد شد. .Pp علامت تعجب .Pq Ql \&! می‌تواند به عنوان عملگر منطقی .Em not در یک فهرست یا .Em alias و همچنین در ابتدای یک .Em Cmnd . به کار رود. این ویژگی امکان مستثنی کردن مقادیر مشخصی را فراهم می‌کند. برای موثر بودن عملگر .Ql \&! باید چیزی وجود داشته باشد تا توسط آن مستثنی شود. برای مثال، جهت تطبیق همهٔ کاربران به جز .Sy root می‌توان از این الگو استفاده کرد: .Bd -literal -offset 4n ALL, !root .Ed .Pp اگر .Sy ALL , حذف شود، مانند: .Bd -literal -offset 4n !root .Ed .Pp این عبارت صراحتاً .Sy root را رد می‌کند اما با هیچ کاربر دیگری تطبیق نخواهد یافت. این رفتار با یک عملگر واقعی .Dq negation متفاوت است. .Pp با این حال، توجه داشته باشید که استفاده از .Ql \&! همراه با نام مستعار توکار .Sy ALL برای مجاز ساختن کاربر به اجرای .Dq همه به‌جز چند دستور به‌ندرت طبق انتظار عمل می‌کند (بخش .Sx SECURITY NOTES در زیر را ببینید). .Pp خطوط طولانی می‌توانند با یک بک‌اسلش .Pq Ql \e به عنوان آخرین نویسه خط ادامه یابند. .Pp فاصله‌های خالی بین عناصر در یک فهرست و همچنین نویسه‌های نحوی خاص در یک .Em User Specification .Po .Ql =\& , .Ql :\& , .Ql (\& , .Ql )\& .Pc اختیاری هستند. .Pp نویسه‌های زیر باید با یک بک‌اسلش .Pq Ql \e گریز داده شوند هنگامی که به عنوان بخشی از یک کلمه به کار می‌روند (مانند نام کاربری یا نام میزبان): .Ql \&! , .Ql =\& , .Ql :\& , .Ql ,\& , .Ql (\& , .Ql )\& , .Ql \e . .SH "گزینه‌ها (OPTIONS)" رفتار .Nm sudo را می‌توان همان‌طور که پیش‌تر توضیح داده شد، با خطوط .Em Default_Entry تغییر داد. فهرستی از تمام پارامترهای پشتیبانی‌شدهٔ Defaults که بر اساس نوع گروه‌بندی شده‌اند، در زیر آمده است. .Pp .Sy پرچم‌های بولی : .Bl -tag -width 16n .It always_query_group_plugin اگر یک .Em group_plugin پیکربندی شده باشد، از آن برای حل گروه‌هایی به فرم .Ql %group استفاده می‌شود، تا زمانی که گروه سیستمی هم‌نامی وجود نداشته باشد. به‌طور معمول، فقط گروه‌هایی به فرم .Ql %:group به .Em group_plugin ارسال می‌شوند. این پرچم به‌طور پیش‌فرض .Em off است. .It always_set_home در صورت فعال بودن، .Nm sudo متغیر محیطی .Ev HOME را روی پوشهٔ خانگی کاربر هدف تنظیم می‌کند (که همان کاربر .Em runas_default است، مگر اینکه از گزینهٔ .Fl u استفاده شده باشد). این پرچم تا حد زیادی منسوخ شده است و هیچ اثری ندارد مگر اینکه پرچم .Em env_reset غیرفعال شده باشد یا .Ev HOME در فهرست .Em env_keep وجود داشته باشد، که انجام هر دوی آن‌ها اکیداً نهی شده است. این پرچم به‌طور پیش‌فرض .Em off است. .It authenticate در صورت تنظیم، کاربران باید قبل از اجرای دستورها با گذرواژه (یا روش‌های دیگر احراز هویت) خود را احراز هویت کنند. این مقدار پیش‌فرض را می‌توان از طریق برچسب‌های .Dv PASSWD و .Dv NOPASSWD بازنویسی کرد. این پرچم به‌طور پیش‌فرض .Em on است. .It case_insensitive_group در صورت فعال بودن، نام گروه‌ها در .Em sudoers بدون حساسیت به بزرگی و کوچکی حروف مطابقت داده می‌شوند. این مورد ممکن است هنگامی که کاربران در LDAP یا AD ذخیره شده‌اند لازم باشد. این پرچم به‌طور پیش‌فرض .Em on است. .It case_insensitive_user در صورت فعال بودن، نام کاربران در .Em sudoers بدون حساسیت به بزرگی و کوچکی حروف مطابقت داده می‌شوند. این مورد ممکن است هنگامی که گروه‌ها در LDAP یا AD ذخیره شده‌اند لازم باشد. این پرچم به‌طور پیش‌فرض .Em on است. .It closefrom_override در صورت تنظیم، کاربر می‌تواند از گزینهٔ .Fl C استفاده کند که نقطهٔ شروع پیش‌فرضی را که .Nm sudo از آنجا شروع به بستن توصیف‌کننده‌های باز پرونده می‌کند بازنویسی می‌نماید. این پرچم به‌طور پیش‌فرض .Em off است. .It compress_io در صورت تنظیم، و اگر .Nm sudo برای ثبت ورودی یا خروجی یک دستور پیکربندی شده باشد، گزارش‌های I/O با استفاده از .Sy zlib فشرده خواهند شد. این پرچم به‌طور پیش‌فرض در صورتی که .Nm sudo با پشتیبانی از .Sy zlib کامپایل شده باشد .Em on است. .It exec_background به‌طور پیش‌فرض، .Nm sudo تا زمانی که خود .Nm sudo در پیش‌زمینه در حال اجرا باشد، دستور را به عنوان یک فرایند پیش‌زمینه اجرا می‌کند. هنگامی که پرچم .Em exec_background فعال باشد و دستور در یک شبه‌ترمینال اجرا شود (به دلیل ثبت وقایع I/O یا پرچم .Em use_pty )، دستور به عنوان یک فرایند پس‌زمینه اجرا خواهد شد. تلاش برای خواندن از ترمینال کنترل‌کننده (یا تغییر تنظیمات ترمینال) به معلق شدن دستور با سیگنال .Dv SIGTTIN (یا سیگنال .Dv SIGTTOU در صورت تغییر تنظیمات ترمینال) منجر می‌شود. اگر این اتفاق زمانی رخ دهد که .Nm sudo یک فرایند پیش‌زمینه است، ترمینال کنترل‌کننده به دستور واگذار شده و بدون نیاز به دخالت کاربر در پیش‌زمینه از سر گرفته می‌شود. مزیت اجرای اولیه دستور در پس‌زمینه این است که .Nm sudo نیازی به خواندن از ترمینال ندارد مگر اینکه دستور صریحاً آن را درخواست کند. در غیر این صورت، هر ورودی ترمینال باید به دستور منتقل شود، چه به آن نیاز داشته باشد چه نداشته باشد (هسته ترمینال‌ها را بافر می‌کند، بنابراین تشخیص اینکه آیا دستور واقعاً ورودی را می‌خواهد یا خیر ممکن نیست). این رفتار با رفتار پیشین .Em sudo یا زمانی که دستور در شبه‌ترمینال اجرا نمی‌شود متفاوت است. .Pp برای کارکرد بی‌نقص این قابلیت، سیستم‌عامل باید از راه‌اندازی مجدد خودکار فراخوان‌های سیستمی پشتیبانی کند. متأسفانه همه سیستم‌عامل‌ها به‌طور پیش‌فرض این کار را انجام نمی‌دهند، و حتی مواردی که پشتیبانی می‌کنند نیز ممکن است باگ داشته باشند. برای نمونه، macOS در راه‌اندازی مجدد توابع .Xr tcgetattr 3 و .Xr tcsetattr 3 ناموفق است (این یک باگ در macOS است). علاوه بر این، از آنجا که این رفتار به متوقف شدن دستور با سیگنال‌های .Dv SIGTTIN یا .Dv SIGTTOU وابسته است، برنامه‌هایی که این سیگنال‌ها را دریافت کرده و خود را با سیگنال دیگری (معمولاً .Dv SIGTOP ) معلق می‌کنند، به‌طور خودکار به پیش‌زمینه آورده نخواهند شد. برخی از نسخه‌های دستور .Xr su 1 در لینوکس بدین صورت عمل می‌کنند. این پرچم به‌طور پیش‌فرض .Em off است. .Pp این تنظیم فقط در نسخه 1.8.7 یا بالاتر پشتیبانی می‌شود. هیچ تأثیری ندارد مگر اینکه ثبت وقایع I/O فعال باشد یا پرچم .Em use_pty فعال شده باشد. .It env_editor در صورت تنظیم، .Nm visudo پیش از رجوع به فهرست ویرایشگرهای پیش‌فرض، از مقدار متغیرهای محیطی .Ev SUDO_EDITOR , .Ev VISUAL یا .Ev EDITOR استفاده خواهد کرد. .Nm visudo معمولاً با دسترسی .Sy root اجرا می‌شود، بنابراین این پرچم ممکن است به کاربری با دسترسی‌های .Nm visudo اجازه دهد تا دستورهای دلخواه را بدون ثبت در گزارش به‌عنوان .Sy root اجرا کند. راهکار جایگزین، قرار دادن فهرستی از ویرایشگرهای .Dq safe جداشده با دونقطه در تنظیم .Em editor است. سپس .Nm visudo تنها در صورتی از .Ev SUDO_EDITOR , .Ev VISUAL یا .Ev EDITOR استفاده خواهد کرد که با مقداری مشخص‌شده در .Em editor مطابقت داشته باشند. اگر پرچم .Em env_reset فعال باشد، متغیرهای محیطی .Ev SUDO_EDITOR , .Ev VISUAL و/یا .Ev EDITOR باید در فهرست .Em env_keep حضور داشته باشند تا هنگام فراخوانی .Nm visudo از طریق .Nm sudo ، پرچم .Em env_editor عمل کند. این پرچم به‌طور پیش‌فرض .Em on است. .It env_reset در صورت تنظیم، .Nm sudo دستور را در محیطی حداقلی شامل متغیرهای .Ev TERM , .Ev PATH , .Ev HOME , .Ev MAIL , .Ev SHELL , .Ev LOGNAME , .Ev USER و .Ev SUDO_* اجرا خواهد کرد. سپس هر متغیری در محیط فراخواننده یا پروندهٔ مشخص‌شده با تنظیم .Em restricted_env_file که با فهرست‌های .Em env_keep و .Em env_check همخوانی داشته باشد اضافه می‌شود، و در ادامه متغیرهای موجود در پروندهٔ مشخص‌شده با تنظیم .Em env_file (در صورت وجود) افزوده خواهند شد. محتوای فهرست‌های .Em env_keep و .Em env_check پس از اعمال تغییرات پارامترهای سراسری Defaults در .Em sudoers ، هنگام اجرای .Nm sudo توسط .Sy root با گزینهٔ .Fl V نمایش داده می‌شود. اگر تنظیم .Em secure_path فعال باشد، مقدار آن برای متغیر محیطی .Ev PATH استفاده خواهد شد. این پرچم به‌طور پیش‌فرض .Em on است. .It fast_glob در حالت عادی، .Nm sudo از تابع .Xr glob 3 برای تطبیق الگو به سبک پوسته (globbing) هنگام بررسی نام مسیرها استفاده می‌کند. اما از آنجا که این تابع به سیستم پرونده دسترسی دارد، تکمیل .Xr glob 3 برای برخی الگوها ممکن است زمان زیادی طول بکشد، به‌ویژه زمانی که الگو به یک سیستم پروندهٔ شبکه‌ای اشاره دارد که بر حسب تقاضا سوار (auto mounted) شده است. پرچم .Em fast_glob باعث می‌شود .Nm sudo از تابع .Xr fnmatch 3 استفاده کند که برای انجام تطبیق خود به سیستم پرونده دسترسی پیدا نمی‌کند. نقطه ضعف .Em fast_glob این است که توانایی تطبیق مسیرهای نسبی مانند .Pa ./ls یا .Pa ../bin/ls . را ندارد. این موضوع زمانی که نام‌های مسیر دارای نویسه‌های تطبیق الگو همراه با عملگر نقیض، .Ql !\& , به کار می‌روند، پیامدهای امنیتی دارد، زیرا چنین قوانینی به سادگی قابل دور زدن هستند. بنابراین، این پرچم نباید زمانی استفاده شود که پروندهٔ .Em sudoers شامل قوانینی با مسیرهای منفی‌شده دارای نویسه‌های تطبیق الگو باشد. این پرچم به‌طور پیش‌فرض .Em off است. .It log_passwords بیشتر برنامه‌هایی که به گذرواژهٔ کاربر نیاز دارند، پیش از خواندن گذرواژه بازتاب (echo) را غیرفعال می‌کنند تا از نمایش گذرواژه به صورت متن آشکار روی صفحه جلوگیری شود. با این حال، اگر ورودی ترمینال در حال لاگ شدن باشد (ببینید: .Sx "I/O LOGGING" ) , گذرواژه همچنان در لاگ I/O حضور خواهد داشت. اگر گزینهٔ .Em log_passwords غیرفعال باشد، .Nm تلاش می‌کند از ثبت گذرواژه‌ها در لاگ جلوگیری کند. این کار با استفاده از عبارات باقاعده در .Em passprompt_regex برای تطبیق اعلان (prompt) گذرواژه در بافر خروجی ترمینال انجام می‌شود. هنگام یافتن تطابق، نویسه‌های ورودی در لاگ I/O با .Ql * جایگزین می‌شوند تا زمانی که یک خط جدید (line feed) یا بازگشت به سر خط (carriage return) در ورودی ترمینال یافت شود یا بافر خروجی ترمینال جدیدی دریافت گردد. اما اگر برنامه‌ای نویسه‌ها را هم‌زمان با تایپ کاربر نمایش دهد (مانند .Nm sudo زمانی که .Em pwfeedback تنظیم شده است)، تنها نویسهٔ نخست گذرواژه در لاگ I/O جایگزین خواهد شد. این گزینه هیچ اثری ندارد مگر اینکه .Em log_input یا .Em log_ttyin نیز تنظیم شده باشند. این پرچم به‌طور پیش‌فرض .Em on است. .Pp این تنظیم فقط در نسخهٔ 1.9.10 یا بالاتر پشتیبانی می‌شود. .It fqdn این پرچم را زمانی تنظیم کنید که می‌خواهید نام‌های کاملاً معین میزبان (FQDN) را در پروندهٔ .Em sudoers قرار دهید، در حالی که نام میزبان محلی (برگردانده شده توسط دستور .Ql hostname ) شامل نام دامنه نباشد. به عبارت دیگر، به جای myhost از myhost.mydomain.edu استفاده خواهید کرد. در صورت تمایل همچنان می‌توانید از قالب کوتاه استفاده کنید (و حتی هر دو را با هم ترکیب کنید). این پرچم تنها زمانی مؤثر است که نام میزبان .Dq canonical برگردانده شده توسط تابع .Xr getaddrinfo 3 یا .Xr gethostbyname 3 یک نام دامنهٔ کاملاً معین (FQDN) باشد. این وضعیت معمولاً زمانی برقرار است که سیستم برای تفکیک نام میزبان از DNS استفاده کند. .Pp اگر سامانه طوری پیکربندی شده باشد که از پروندهٔ .Pa /etc/hosts به‌جای DNS استفاده کند، ممکن است نام میزبان .Dq canonical کاملاً واجد شرایط (fully-qualified) نباشد. ترتیب پرس‌وجو از منابع برای تحلیل نام میزبان معمولاً در پرونده‌های .Pa /etc/nsswitch.conf , .Pa /etc/netsvc.conf , .Pa /etc/host.conf , یا در برخی موارد .Pa /etc/resolv.conf مشخص می‌شود. در پروندهٔ .Pa /etc/hosts نخستین نام میزبان در مدخل، نام .Dq canonical در نظر گرفته می‌شود؛ نام‌های بعدی نام‌های مستعاری هستند که توسط .Nm استفاده نمی‌شوند. برای نمونه، خط زیر در پروندهٔ hosts برای ماشین .Dq xyzzy نام دامنهٔ کاملاً واجد شرایط را به عنوان نام میزبان .Dq canonical و نسخهٔ کوتاه را به عنوان نام مستعار دارد. .sp .Dl 192.168.1.1 xyzzy.sudo.ws xyzzy .sp اگر مدخل پروندهٔ hosts ماشین به درستی قالب‌بندی نشده باشد، پرچم .Em fqdn در صورتی که پیش از DNS پرس‌وجو شود، کارساز نخواهد بود. .Pp توجه داشته باشید هنگام استفاده از DNS برای تحلیل نام میزبان، فعال کردن .Em fqdn نیازمند این است که .Nm پرس‌وجوهای DNS انجام دهد که در صورت از کار افتادن DNS (برای نمونه در صورت قطع اتصال ماشین از شبکه)، .Nm sudo را غیرقابل‌استفاده می‌کند. دقیقاً مانند پروندهٔ hosts، باید از نام .Dq canonical همان‌گونه که DNS آن را می‌شناسد استفاده کنید. به این معنی که به دلیل مسائل کارایی و عدم امکان دریافت تمام نام‌های مستعار از DNS، نباید از نام مستعار میزبان (مدخل CNAME) استفاده شود. .Pp این پرچم به‌طور پیش‌فرض .Em on است. .It ignore_audit_errors اجازه به اجرای دستورها حتی اگر .Nm نتواند در گزارش بازرسی (audit log) بنویسد. در صورت فعال بودن، خطای نوشتن در گزارش بازرسی به عنوان خطای مهلک تلقی نمی‌شود. در صورت غیرفعال بودن، دستور تنها پس از ثبت موفقیت‌آمیز رویداد بازرسی می‌تواند اجرا شود. این پرچم تنها روی سامانه‌هایی مؤثر است که در آن‌ها .Nm از ثبت رویدادهای بازرسی پشتیبانی می‌کند، از جمله .Fx , Linux، macOS و Solaris. این پرچم به‌طور پیش‌فرض .Em on است. .It ignore_dot در صورت تنظیم، .Nm sudo از "." یا "" (هر دو نشان‌دهندهٔ دایرکتوری جاری هستند) در متغیر محیطی .Ev PATH چشم‌پوشی می‌کند؛ خود .Ev PATH تغییری نمی‌کند. این پرچم به‌طور پیش‌فرض .Em off است. .It ignore_iolog_errors اجازه به اجرای دستورها حتی اگر .Nm نتواند در گزارش I/O (محلی یا دوردست) بنویسد. در صورت فعال بودن، خطای نوشتن در گزارش I/O به عنوان خطای مهلک تلقی نمی‌شود. در صورت غیرفعال بودن، چنانچه نوشتن در گزارش I/O انجام نشود، دستور خاتمه می‌یابد. این پرچم به‌طور پیش‌فرض .Em off است. .It ignore_logfile_errors اجازه به اجرای دستورها حتی اگر .Nm نتواند در پروندهٔ گزارش بنویسد. در صورت فعال بودن، خطای نوشتن در پروندهٔ گزارش به عنوان خطای مهلک تلقی نمی‌شود. در صورت غیرفعال بودن، دستور تنها پس از ثبت موفقیت‌آمیز مدخل در پروندهٔ گزارش می‌تواند اجرا شود. این پرچم تنها زمانی تأثیر دارد که .Nm برای استفاده از گزارش‌گیری مبتنی بر پرونده از طریق تنظیم .Em logfile پیکربندی شده باشد. این پرچم به‌طور پیش‌فرض .Em on است. .It ignore_local_sudoers اگر از طریق LDAP تنظیم شود، تجزیهٔ .Pa /etc/sudoers نادیده گرفته خواهد شد. این گزینه برای سامانه‌هایی در نظر گرفته شده که می‌خواهند از استفاده از پرونده‌های محلی sudoers جلوگیری کنند تا تنها از LDAP استفاده شود. این کار تلاش‌های گردانندگان سرکش را که قصد افزودن نقش‌ها به .Pa /etc/sudoers . دارند خنثی می‌کند. هنگامی که این پرچم فعال باشد، .Pa /etc/sudoers حتی نیازی به وجود داشتن ندارد. از آنجا که این پرچم به .Nm sudo می‌گوید در صورت عدم تطابق با مدخل‌های خاص LDAP چگونه رفتار کند، این sudoOption تنها برای بخش .Ql cn=defaults معنادار است. این پرچم به‌طور پیش‌فرض .Em off است. .It ignore_unknown_defaults در صورت تنظیم، .Nm sudo در صورت مواجهه با یک مدخل ناشناختهٔ Defaults در پروندهٔ .Em sudoers یا یک sudoOption ناشناخته در LDAP، هشداری صادر نخواهد کرد. این پرچم به‌طور پیش‌فرض .Em off است. .It insults در صورت تنظیم، .Nm sudo هنگام وارد کردن گذرواژه نادرست، به کاربران توهین خواهد کرد. این پرچم به‌طور پیش‌فرض .Em off است. .It log_allowed در صورت تنظیم، .Nm دستورهای مجاز توسط خط‌مشی را در گزارش بازرسی سیستم (در صورت پشتیبانی) و همچنین در syslog و/یا یک پرونده گزارش ثبت می‌کند. این پرچم به‌طور پیش‌فرض .Em on است. .Pp این تنظیم فقط در نگارش 1.8.29 یا بالاتر پشتیبانی می‌شود. .It log_denied در صورت تنظیم، .Nm دستورهای رد شده توسط خط‌مشی را در گزارش بازرسی سیستم (در صورت پشتیبانی) و همچنین در syslog و/یا یک پرونده گزارش ثبت می‌کند. این پرچم به‌طور پیش‌فرض .Em on است. .Pp این تنظیم فقط در نگارش 1.8.29 یا بالاتر پشتیبانی می‌شود. .It log_exit_status در صورت تنظیم، .Nm مقدار وضعیت خروج دستورهای اجرا شده را در syslog و/یا یک پرونده گزارش ثبت خواهد کرد. اگر دستوری با یک سیگنال خاتمه یابد، نام سیگنال نیز ثبت می‌شود. این پرچم به‌طور پیش‌فرض .Em off است. .Pp این تنظیم فقط در نگارش 1.9.8 یا بالاتر پشتیبانی می‌شود. .It log_host در صورت تنظیم، نام میزبان در مدخل‌های گزارش نوشته‌شده در پروندهٔ پیکربندی‌شده توسط تنظیم .Em logfile گنجانده خواهد شد. این پرچم به‌طور پیش‌فرض .Em off است. .It log_input در صورت تنظیم، .Nm sudo دستور را در یک شبه‌ترمینال اجرا می‌کند (اگر .Nm sudo از یک ترمینال اجرا شده باشد) و تمام ورودی کاربر را ثبت خواهد کرد. اگر ورودی استاندارد به دلیل هدایت مجدد I/O یا قرار داشتن دستور در یک خط لوله، به ترمینال کاربر متصل نباشد، آن ورودی نیز ثبت می‌شود. برای اطلاعات بیشتر دربارهٔ ثبت I/O، بخش .Sx "I/O LOGGING" را ببینید. این پرچم به‌طور پیش‌فرض .Em off است. .It log_output در صورت تنظیم، .Nm sudo دستور را در یک شبه‌ترمینال (در صورتی که .Nm sudo از یک ترمینال اجرا شده باشد) اجرا کرده و تمام خروجی ارسال‌شده به ترمینال کاربر، خروجی استاندارد یا خطای استاندارد را ثبت می‌کند. اگر خروجی استاندارد یا خطای استاندارد به دلیل تغییر مسیر I/O یا به این دلیل که دستور بخشی از یک خط‌لوله (pipeline) است به ترمینال کاربر متصل نباشد، آن خروجی نیز ثبت می‌شود. برای اطلاعات بیشتر درباره ثبت I/O، بخش .Sx "I/O LOGGING" را ببینید. این پرچم به طور پیش‌فرض .Em off است. .It log_server_keepalive در صورت تنظیم، .Nm sudo گزینه سوکت TCP keepalive را در اتصال به سرور لاگ فعال می‌کند. این کار ارسال دوره‌ای پیام‌های keepalive به سرور را امکان‌پذیر می‌سازد. اگر سرور به پیامی پاسخ ندهد، اتصال بسته خواهد شد و دستور در حال اجرا خاتمه می‌یابد، مگر اینکه پرچم .Em ignore_iolog_errors (در صورت فعال بودن ثبت I/O) یا پرچم .Em ignore_log_errors (در صورت غیرفعال بودن ثبت I/O) تنظیم شده باشد. این پرچم به طور پیش‌فرض .Em on است. .Pp این تنظیم فقط در نسخه 1.9.0 یا بالاتر پشتیبانی می‌شود. .It log_server_verify در صورت تنظیم، گواهی سرور دریافت‌شده در طول دست‌تکانی TLS باید معتبر باشد و شامل نام سرور (از .Em log_servers ) یا آدرس IP آن باشد. اگر هر یک از این شرایط برآورده نشود، دست‌تکانی TLS ناموفق خواهد بود. این پرچم به طور پیش‌فرض .Em on است. .Pp این تنظیم فقط در نسخه 1.9.0 یا بالاتر پشتیبانی می‌شود. .It log_stderr در صورت تنظیم، .Nm sudo خطای استاندارد را در صورتی که به ترمینال کاربر متصل نباشد ثبت می‌کند. این گزینه می‌تواند برای ثبت خروجی هدایت‌شده به یک لوله (pipe) یا تغییر مسیر یافته به یک فایل استفاده شود. این پرچم به طور پیش‌فرض .Em off است، اما در صورتی که پرچم .Em log_output یا برچسب دستور .Dv LOG_OUTPUT تنظیم شده باشد، فعال می‌شود. .It log_stdin در صورت تنظیم، .Nm sudo ورودی استاندارد را در صورتی که به ترمینال کاربر متصل نباشد ثبت می‌کند. این گزینه می‌تواند برای ثبت ورودی ارسالی از یک لوله (pipe) یا تغییر مسیر یافته از یک فایل استفاده شود. این پرچم به طور پیش‌فرض .Em off است، اما در صورتی که پرچم .Em log_input یا برچسب دستور .Dv LOG_INPUT تنظیم شده باشد، فعال می‌شود. .It log_stdout در صورت تنظیم، .Nm sudo خروجی استاندارد را در صورتی که به ترمینال کاربر متصل نباشد ثبت می‌کند. این گزینه می‌تواند برای ثبت خروجی هدایت‌شده به یک لوله (pipe) یا تغییر مسیر یافته به یک فایل استفاده شود. این پرچم به طور پیش‌فرض .Em off است، اما در صورتی که پرچم .Em log_output یا برچسب دستور .Dv LOG_OUTPUT تنظیم شده باشد، فعال می‌شود. .It log_subcmds در صورت تنظیم، .Nm هنگامی که یک دستور یک فرایند فرزند ایجاد می‌کند و برنامه‌ای را با استفاده از توابع کتابخانه‌ای .Xr execve 2 , .Xr execl 3 , .Xr execle 3 , .Xr execlp 3 , .Xr execv 3 , .Xr execvp 3 , .Xr execvpe 3 , یا .Xr system 3 اجرا می‌نماید، آن را ثبت می‌کند. به عنوان مثال، اگر یک پوسته توسط .Nm sudo اجرا شود، دستورات مجزایی که از طریق آن پوسته اجرا می‌شوند ثبت خواهند شد. این پرچم به طور پیش‌فرض .Em off است. .Pp پرچم .Em log_subcmds از همان سازوکار پایه‌ای تنظیم .Em intercept استفاده می‌کند. برای اطلاعات بیشتر درباره سامانه‌های پشتیبانی‌کننده از این گزینه و محدودیت‌های آن، بخش .Sx Preventing shell escapes را ببینید. این تنظیم فقط در نسخه 1.9.8 یا بالاتر پشتیبانی می‌شود و با پشتیبانی SELinux RBAC ناسازگار است، مگر اینکه سامانه از حالت فیلتر .Xr seccomp 2 پشتیبانی کند. .It log_ttyin در صورت تنظیم، .Nm sudo دستور را در یک شبه‌ترمینال اجرا کرده و کلیدهای فشرده‌شده توسط کاربر را در صورت وجود ترمینال کاربر، ثبت می‌کند. این پرچم به‌طور پیش‌فرض .Em off است، اما زمانی که پرچم .Em log_input یا برچسب دستور .Dv LOG_INPUT تنظیم شده باشد، فعال می‌شود. اگر ترمینالی وجود نداشته باشد، مثلاً هنگام اجرای یک دستور از راه دور با استفاده از .Xr ssh 1 , این پرچم هیچ اثری نخواهد داشت. .It log_ttyout در صورت تنظیم، .Nm sudo دستور را در یک شبه‌ترمینال اجرا کرده و تمام خروجی‌های نمایش‌داده‌شده روی ترمینال کاربر را، در صورت وجود ترمینال، ثبت می‌کند. این پرچم به‌طور پیش‌فرض .Em off است، اما زمانی که پرچم .Em log_output یا برچسب دستور .Dv LOG_OUTPUT تنظیم شده باشد، فعال می‌شود. اگر ترمینالی وجود نداشته باشد، مثلاً هنگام اجرای یک دستور از راه دور با استفاده از .Xr ssh 1 , این پرچم هیچ اثری نخواهد داشت. .It log_year در صورت تنظیم، سال چهاررقمی در پرونده لاگ (غیر syslog) .Nm sudo ثبت خواهد شد. این پرچم به‌طور پیش‌فرض .Em off است. .It long_otp_prompt هنگام اعتبارسنجی با یک طرح گذرواژه یک‌بارمصرف (OTP) مانند .Sy S/Key یا .Sy OPIE , یک اعلان دوخطی استفاده می‌شود تا برش و چسباندن چالش به پنجره محلی آسان‌تر شود. این حالت به زیبایی پیش‌فرض نیست، اما برخی آن را راحت‌تر می‌دانند. این پرچم به‌طور پیش‌فرض .Em off است. .It mail_all_cmnds هر بار که کاربری تلاش کند دستوری را از طریق .Nm sudo اجرا کند، به کاربر .Em mailto رایانامه می‌فرستد (این شامل .Nm sudoedit ) . می‌شود). اگر کاربر .Nm sudo را با گزینه .Fl l یا .Fl v اجرا کند، هیچ رایانامه‌ای فرستاده نخواهد شد مگر اینکه خطای احراز هویت رخ دهد و پرچم .Em mail_badpass نیز تنظیم شده باشد. این پرچم به‌طور پیش‌فرض .Em off است. .It mail_always هر بار که کاربری .Nm sudo را اجرا کند، به کاربر .Em mailto رایانامه می‌فرستد. این پرچم به‌طور پیش‌فرض .Em off است. .It mail_badpass ارسال رایانامه به کاربر .Em mailto اگر کاربر اجراکنندهٔ .Nm sudo گذرواژهٔ درست را وارد نکند. اگر دستوری که کاربر برای اجرای آن تلاش می‌کند توسط .Nm مجاز نباشد و یکی از پرچم‌های .Em mail_all_cmnds , .Em mail_always , .Em mail_no_host , .Em mail_no_perms یا .Em mail_no_user تنظیم شده باشد، این پرچم بی‌اثر خواهد بود. این پرچم به‌طور پیش‌فرض .Em off است. .It mail_no_host در صورت تنظیم بودن، رایانامه به کاربر .Em mailto ارسال می‌شود اگر کاربر فراخواننده در پروندهٔ .Em sudoers وجود داشته باشد، اما مجاز به اجرای دستورها روی میزبان فعلی نباشد. این پرچم به‌طور پیش‌فرض .Em off است. .It mail_no_perms در صورت تنظیم بودن، رایانامه به کاربر .Em mailto ارسال می‌شود اگر کاربر فراخواننده مجاز به استفاده از .Nm sudo باشد، اما دستوری که برای اجرای آن تلاش می‌کند در مدخل پروندهٔ .Em sudoers او فهرست نشده یا صریحاً رد شده باشد. این پرچم به‌طور پیش‌فرض .Em off است. .It mail_no_user در صورت تنظیم بودن، رایانامه به کاربر .Em mailto ارسال می‌شود اگر کاربر فراخواننده در پروندهٔ .Em sudoers نباشد. این پرچم به‌طور پیش‌فرض .Em on است. .It match_group_by_gid به‌طور پیش‌فرض، .Nm هر گروهی را که کاربر عضوی از آن است با شناسهٔ گروه جستجو می‌کند تا نام گروه را مشخص کند (این کار فقط یک بار انجام می‌شود). فهرست حاصل از نام‌های گروهِ کاربر هنگام تطبیق گروه‌های فهرست‌شده در پروندهٔ .Em sudoers استفاده می‌شود. این سازوکار روی سیستم‌هایی که در آن‌ها تعداد گروه‌های فهرست‌شده در پروندهٔ .Em sudoers بیشتر از تعداد گروه‌هایی است که یک کاربر معمولی به آن‌ها تعلق دارد، به‌خوبی کار می‌کند. در سیستم‌هایی که جستجوی گروه کند است، کاربران ممکن است عضو گروه‌های متعددی باشند، یا تعداد گروه‌های فهرست‌شده در پروندهٔ .Em sudoers نسبتاً کم است، این کار می‌تواند بسیار پرهزینه باشد و اجرای دستورها از طریق .Nm sudo ممکن است بیشتر از معمول زمان ببرد. در چنین سیستم‌هایی ممکن است استفاده از پرچم .Em match_group_by_gid برای جلوگیری از تبدیل شناسه‌های گروه کاربر به نام گروه، سریع‌تر باشد. در این حالت، .Nm باید هر نام گروه فهرست‌شده در پروندهٔ .Em sudoers را جستجو کند و هنگام تعیین اینکه آیا کاربر عضو گروه است یا خیر، به‌جای نام گروه از شناسهٔ گروه استفاده کند. .Pp اگر .Em match_group_by_gid فعال باشد، جستجوهای پایگاه‌دادهٔ گروه که توسط .Nm انجام می‌شوند، برخلاف شناسهٔ گروه، بر اساس نام گروه کلید خواهند خورد. روی سیستم‌هایی که چند منبع برای پایگاه‌دادهٔ گروه دارند، احتمال وجود تداخل در نام‌های گروه یا شناسه‌های گروه بین پروندهٔ محلی .Pa /etc/group و پایگاه‌دادهٔ دوردست گروه وجود دارد. در چنین سیستم‌هایی، فعال یا غیرفعال کردن .Em match_group_by_gid می‌تواند برای تعیین اینکه پرس‌وجوهای پایگاه‌دادهٔ گروه بر اساس نام (فعال) یا شناسه (غیرفعال) انجام شوند استفاده شود، که ممکن است به دور زدن تداخل مدخل‌های گروه کمک کند. .Pp پرچم .Em match_group_by_gid هنگامی که داده‌های .Em sudoers در LDAP ذخیره شده باشند، هیچ تأثیری ندارد. این پرچم به طور پیش‌فرض .Em off است. .Pp این تنظیم فقط در نسخهٔ 1.8.18 یا بالاتر پشتیبانی می‌شود. .It intercept در صورت تنظیم، تمام دستورهای اجرا شده از طریق .Nm sudo به گونه‌ای رفتار خواهند کرد که گویی برچسب .Dv INTERCEPT تنظیم شده است، مگر اینکه توسط برچسب .Dv NOINTERCEPT لغو شود. توضیحات .Dv INTERCEPT and NOINTERCEPT در بالا و همچنین بخش .Sx Preventing shell escapes در انتهای این راهنما را ببینید. این پرچم به طور پیش‌فرض .Em off است. .Pp این تنظیم فقط در نسخهٔ 1.9.8 یا بالاتر پشتیبانی می‌شود و با پشتیبانی از SELinux RBAC ناسازگار است مگر اینکه سیستم از حالت فیلتر .Xr seccomp 2 پشتیبانی کند. .It intercept_allow_setid در بیشتر سیستم‌ها، بارگذار پویا هنگام اجرای برنامه‌های set-user-ID و set-group-ID متغیر .Ev LD_PRELOAD (یا معادل آن) را نادیده می‌گیرد و در عمل حالت رهگیری را غیرفعال می‌کند. برای جلوگیری از این امر، .Nm اجازه اجرای برنامهٔ set-user-ID یا set-group-ID را در حالت رهگیری نخواهد داد مگر اینکه .Em intercept_allow_setid فعال باشد. این پرچم هیچ تأثیری ندارد مگر اینکه پرچم .Em intercept فعال باشد یا برچسب .Dv INTERCEPT برای دستور تنظیم شده باشد. این پرچم به طور پیش‌فرض هنگامی که گزینهٔ .Em intercept_type روی .Em trace تنظیم شده باشد .Em on است، در غیر این صورت به طور پیش‌فرض .Em off می‌باشد. .Pp این تنظیم فقط در نسخهٔ 1.9.8 یا بالاتر پشتیبانی می‌شود. .It intercept_authenticate در صورت تنظیم، دستورهای اجرا شده توسط فرایندِ تحت رهگیری باید در صورت معتبر نبودن برچسب زمانی کاربر، احراز هویت شوند. برای مثال، اگر یک شل با .Em intercept فعال اجرا شود، به محض اینکه برچسب زمانی کاربر منقضی شود، دستورهای بعدی باید احراز هویت شوند. این پرچم هیچ تأثیری ندارد مگر اینکه پرچم .Em intercept فعال باشد یا برچسب .Dv INTERCEPT برای دستور تنظیم شده باشد. این پرچم به طور پیش‌فرض .Em off است. .Pp این تنظیم فقط در نسخهٔ 1.9.8 یا بالاتر پشتیبانی می‌شود. .It intercept_verify در صورت تنظیم، .Nm sudo تلاش خواهد کرد تأیید کند دستوری که در حالت رهگیری اجرا می‌شود دارای نام مسیر، آرگومان‌های خط فرمان و محیط مورد انتظار باشد. .Pp فرایند پس از تکمیل .Xr execve 2 اما پیش از اینکه دستور جدید فرصت اجرا پیدا کند متوقف خواهد شد. برای تأیید دستور، .Nm sudo مسیر دستور را از .Pa /proc/PID/exe ، آرگومان‌های خط فرمان و محیط را از حافظهٔ فرایند می‌خواند و آن‌ها را با آرگومان‌های ارسال‌شده به .Xr execve 2 مقایسه می‌کند. در صورت عدم تطابق، به دستور سیگنال .Dv SIGKILL ارسال شده و خاتمه داده می‌شود. .Pp این می‌تواند به جلوگیری از مسئله زمان بررسی در برابر زمان استفاده در حالت رهگیری کمک کند؛ جایی که آرگومان‌های .Xr execve 2 می‌توانند پس از بررسی سیاست .Nm تغییر یابند. این بررسی‌ها تنها در صورتی قابل انجام هستند که سیستم‌فایل .Xr proc 5 در دسترس باشد. این پرچم هیچ تاثیری ندارد مگر اینکه پرچم .Em intercept فعال باشد یا برچسب .Dv INTERCEPT برای دستور تنظیم شده باشد و گزینه .Em intercept_type روی .Em trace تنظیم شده باشد. این پرچم به طور پیش‌فرض .Em on است. .Pp این تنظیم تنها در نگارش 1.9.12 یا بالاتر پشتیبانی می‌شود. .It netgroup_tuple در صورت تنظیم، جستجوهای netgroup با استفاده از چندتایی کامل netgroup انجام می‌شوند: نام میزبان، نام کاربر، و دامنه (در صورت تعیین). از نظر تاریخی، .Nm sudo تنها نام کاربر و دامنه را برای netgroupهای استفاده‌شده در یک .Em User_List تطبیق می‌داد و تنها نام میزبان و دامنه را برای netgroupهای استفاده‌شده در یک .Em Host_List تطبیق می‌داد. این پرچم به طور پیش‌فرض .Em off است. .It noexec در صورت تنظیم، تمام دستورهای اجرا شده از طریق .Nm sudo طوری رفتار خواهند کرد که گویی برچسب .Dv NOEXEC تنظیم شده است، مگر اینکه توسط یک برچسب .Dv EXEC لغو شود. توضیحات .Dv EXEC and NOEXEC در بالا و همچنین بخش .Sx Preventing shell escapes در انتهای این دفترچه راهنما را ببینید. این پرچم به طور پیش‌فرض .Em off است. .It noninteractive_auth در صورت تنظیم، احراز هویت حتی در حالت غیرتعاملی تلاش خواهد شد (زمانی که گزینه .Fl n از .Nm sudo Ns مشخص شده باشد). این به روش‌های احراز هویتی که نیازی به تعامل کاربر ندارند امکان موفقیت می‌دهد. روش‌های احراز هویتی که نیاز به ورودی از ترمینال کاربر دارند همچنان ناموفق خواهند بود. در صورت غیرفعال بودن، تلاشی برای احراز هویت در حالت غیرتعاملی صورت نخواهد گرفت. این پرچم به طور پیش‌فرض .Em off است. .Pp این تنظیم تنها در نگارش 1.9.10 یا بالاتر پشتیبانی می‌شود. .It pam_acct_mgmt در سیستم‌هایی که از PAM برای احراز هویت استفاده می‌کنند، .Nm sudo به طور پیش‌فرض اعتبارسنجی حساب PAM را برای کاربر فراخوان انجام می‌دهد. بررسی‌های واقعی انجام‌شده بستگی به این دارد که کدام ماژول‌های PAM پیکربندی شده باشند. در صورت فعال بودن، اعتبارسنجی حساب صرف‌نظر از نیاز یا عدم نیاز به گذرواژه انجام خواهد شد. این پرچم به طور پیش‌فرض .Em on است. .Pp این تنظیم تنها در نگارش 1.8.28 یا بالاتر پشتیبانی می‌شود. .It pam_rhost در سیستم‌هایی که از PAM برای احراز هویت استفاده می‌کنند، .Nm sudo مقدار میزبان دوردست PAM را به نام میزبان محلی تنظیم می‌کند زمانی که پرچم .Em pam_rhost فعال باشد. در سیستم‌های لینوکس، فعال کردن .Em pam_rhost ممکن است منجر به جستجوهای DNS برای نام میزبان محلی هنگام مقداردهی اولیه PAM شود. در نگارش‌های Solaris پیش از Solaris 8، .Em pam_rhost باید فعال باشد اگر .Em pam_ruser نیز فعال شده باشد تا از کرش در پیاده‌سازی PAM در Solaris جلوگیری شود. .Pp این پرچم در سیستم‌هایی به جز Solaris به طور پیش‌فرض .Em off است. .Pp این تنظیم تنها در نگارش 1.9.0 یا بالاتر پشتیبانی می‌شود. .It pam_ruser در سامانه‌هایی که از PAM برای احراز هویت استفاده می‌کنند، .Nm sudo هنگام فعال بودن پرچم .Em pam_ruser مقدار کاربر راه دور PAM را روی نام کاربری که sudo را فراخوانی کرده تنظیم می‌کند. این پرچم به صورت پیش‌فرض .Em on است. .Pp این تنظیم تنها در نسخهٔ 1.9.0 یا بالاتر پشتیبانی می‌شود. .It pam_session در سامانه‌هایی که از PAM برای احراز هویت استفاده می‌کنند، .Nm sudo یک نشست PAM جدید برای اجرای دستور در آن ایجاد می‌کند. مگر این که به .Nm sudo گزینه‌های .Fl i یا .Fl s داده شود، ماژول‌های نشست PAM با پرچم فعال‌شدهٔ .Dq silent اجرا می‌شوند. این کار از نمایش اطلاعات آخرین ورود برای هر دستور در برخی سامانه‌ها جلوگیری می‌کند. غیرفعال کردن .Em pam_session ممکن است در پیاده‌سازی‌های قدیمی‌تر PAM یا در سیستم‌عامل‌هایی نیاز باشد که باز کردن یک نشست PAM پرونده‌های utmp یا wtmp را تغییر می‌دهد. اگر پشتیبانی از نشست PAM غیرفعال باشد، ممکن است محدودیت‌های منابع برای دستوری که اجرا می‌شود به‌روز نشوند. اگر .Em pam_session , .Em pam_setcred , و .Em use_pty غیرفعال باشند، .Em log_servers تنظیم نشده باشد و گزارش‌گیری I/O پیکربندی نشده باشد، .Nm sudo دستور را مستقیماً به‌جای اجرا در قالب یک فرایند فرزند اجرا خواهد کرد. این پرچم به صورت پیش‌فرض .Em on است. .Pp این تنظیم تنها در نسخهٔ 1.8.7 یا بالاتر پشتیبانی می‌شود. .It pam_setcred در سامانه‌هایی که از PAM برای احراز هویت استفاده می‌کنند، .Nm sudo در صورت پشتیبانی سیستم احراز هویت زیربنایی، به‌طور پیش‌فرض تلاش می‌کند تا اعتبارات را برای کاربر هدف برقرار سازد. یک نمونه از اعتبارها، بلیت Kerberos است. اگر .Em pam_session , .Em pam_setcred , و .Em use_pty غیرفعال باشند، .Em log_servers تنظیم نشده باشد و گزارش‌گیری I/O پیکربندی نشده باشد، .Nm sudo دستور را مستقیماً به‌جای اجرا در قالب یک فرایند فرزند اجرا خواهد کرد. این پرچم به صورت پیش‌فرض .Em on است. .Pp این تنظیم تنها در نسخهٔ 1.8.8 یا بالاتر پشتیبانی می‌شود. .It passprompt_override در صورت تنظیم، اعلانی که توسط .Em passprompt یا متغیر محیطی .Ev SUDO_PROMPT مشخص شده است همواره استفاده خواهد شد و جایگزین اعلان ارائه‌شده توسط یک ماژول PAM یا دیگر روش‌های احراز هویت می‌شود. این پرچم به صورت پیش‌فرض .Em off است. .It path_info به‌طور معمول، .Nm sudo هنگامی که دستوری در متغیر محیطی .Ev PATH کاربر پیدا نشود، به او اطلاع می‌دهد. برخی پایگاه‌ها ممکن است بخواهند این قابلیت را غیرفعال کنند زیرا می‌تواند برای جمع‌آوری اطلاعات دربارهٔ محل فایل‌های اجرایی که کاربر عادی به آن‌ها دسترسی ندارد، استفاده شود. نقطه ضعف این است که اگر فایل اجرایی صرفاً در .Ev PATH کاربر نباشد، .Nm sudo به کاربر خواهد گفت که مجاز به اجرای آن نیست، که می‌تواند گیج‌کننده باشد. این پرچم به صورت پیش‌فرض .Em on است. .It preserve_groups به‌طور پیش‌فرض، .Nm sudo بردار گروه را به فهرست گروه‌هایی که کاربر هدف در آن‌ها عضویت دارد مقداردهی اولیه می‌کند. هنگامی که .Em preserve_groups تنظیم شده باشد، بردار گروه فعلی کاربر بدون تغییر باقی می‌ماند. با این حال، شناسه‌های کاربریِ گروهی (group-IDs) واقعی و مؤثر همچنان مطابق با کاربر هدف تنظیم می‌شوند. این پرچم به‌طور پیش‌فرض .Em off است. .It pwfeedback به‌طور پیش‌فرض، .Nm sudo مانند بیشتر برنامه‌های یونیکس، با خاموش کردن بازتاب نویسه‌ها (echo) تا زمانی که کاربر کلید return (یا enter) را فشار دهد، گذرواژه را می‌خواند. برخی کاربران از این موضوع سردرگم می‌شوند چرا که به نظرشان می‌رسد .Nm sudo در این مرحله قفل کرده است. هنگامی که .Em pwfeedback تنظیم شده باشد، .Nm sudo هنگام فشردن هر کلید توسط کاربر بازخورد بصری ارائه می‌دهد. این موضوع اثر امنیتی دارد، زیرا ممکن است افراد ناظر بتوانند طول گذرواژهٔ واردشده را تشخیص دهند. این پرچم به‌طور پیش‌فرض .Em off است. .It requiretty در صورت تنظیم، .Nm sudo تنها زمانی اجرا می‌شود که کاربر در یک tty واقعی وارد سیستم شده باشد. هنگامی که این پرچم تنظیم باشد، .Nm sudo تنها از درون یک نشست ورود قابل اجرا است و نه از راه‌های دیگر نظیر .Xr cron 8 یا اسکریپت‌های cgi-bin. این پرچم به‌طور پیش‌فرض .Em off است. .It root_sudo در صورت تنظیم، .Sy root نیز مجاز به اجرای .Nm sudo خواهد بود. غیرفعال کردن این گزینه مانع از .Dq زنجیره‌کردن دستورهای .Nm sudo توسط کاربران برای دستیابی به پوستهٔ .Sy root از طریق کارهایی مانند .Ql sudo sudo /bin/sh . می‌شود. با این حال توجه داشته باشید که غیرفعال کردن .Em root_sudo همچنین مانع از اجرای .Nm sudoedit توسط .Sy root می‌شود. غیرفعال کردن .Em root_sudo هیچ امنیت مضاعف واقعی فراهم نمی‌کند؛ این گزینه صرفاً به دلایل تاریخی وجود دارد. این پرچم به‌طور پیش‌فرض .Em on است. .It rootpw در صورت تنظیم، .Nm sudo هنگام اجرای یک دستور یا ویرایش یک پرونده، به‌جای گذرواژهٔ کاربر فراخواننده، گذرواژهٔ .Sy root را درخواست می‌کند. این پرچم به‌طور پیش‌فرض .Em off است. .It runas_allow_unknown_id در صورت فعال بودن، امکان تطبیق شناسه‌های کاربری و گروهیِ runas که در پایگاه‌های دادهٔ گذرواژه یا گروه وجود ندارند را می‌دهد. علاوه بر تطبیق صریح شناسه‌های کاربری یا گروهی ناشناخته در یک .Em Runas_List , این گزینه همچنین به نام مستعار .Sy ALL اجازه می‌دهد با شناسهٔ ناشناخته تطبیق یابد. این پرچم به‌طور پیش‌فرض .Em off است. .Pp این تنظیم تنها در نسخهٔ 1.8.30 یا بالاتر پشتیبانی می‌شود. نسخه‌های قدیمی‌تر .Nm sudo همواره اجازهٔ تطبیق شناسه‌های کاربری و گروهی ناشناخته را می‌دادند. .It runas_check_shell در صورت فعال بودن، .Nm sudo تنها دستورها را تحت کاربری اجرا می‌کند که شل آن در پروندهٔ .Pa /etc/shells آمده باشد، حتی اگر .Em Runas_List کاربر فراخواننده در حالت عادی اجازهٔ آن را بدهد. اگر پروندهٔ .Pa /etc/shells وجود نداشته باشد، فهرستی از شل‌های پیش‌فرضِ وابسته به سیستم به کار می‌رود. در بسیاری از سیستم‌عامل‌ها، کاربران سیستمی مانند .Dq bin , شل معتبری ندارند و از این پرچم می‌توان برای جلوگیری از اجرای دستورها تحت این کاربران بهره برد. این پرچم به صورت پیش‌فرض .Em off است. .Pp این تنظیم فقط در نسخهٔ 1.8.30 یا بالاتر پشتیبانی می‌شود. .It runaspw در صورت تنظیم، .Nm sudo به جای گذرواژهٔ کاربر فراخواننده، هنگام اجرای دستور یا ویرایش پرونده، گذرواژهٔ کاربر مشخص‌شده در گزینهٔ .Em runas_default (به طور پیش‌فرض .Sy root ) را درخواست می‌کند. این پرچم به صورت پیش‌فرض .Em off است. .if \n(SL \{\ .It selinux در صورت فعال بودن، کاربر می‌تواند هنگام اجرای دستور طبق دسترسی‌های خط‌مشی SELinux، یک نقش (role) یا نوع (type) SELinux تعیین کند. اگر SELinux در سیستم غیرفعال باشد، این پرچم اثری ندارد. این پرچم به صورت پیش‌فرض .Em on است. .\} .It set_home در صورت فعال بودن و فراخوانی .Nm sudo همراه با گزینهٔ .Fl s ، متغیر محیطی .Ev HOME روی دایرکتوری خانگی کاربر هدف تنظیم می‌شود (که همان کاربر .Em runas_default است مگر اینکه گزینهٔ .Fl u به کار رفته باشد). این پرچم تا حد زیادی منسوخ است و هیچ اثری ندارد مگر آنکه پرچم .Em env_reset غیرفعال شده یا .Ev HOME در فهرست .Em env_keep آمده باشد، که انجام هر دوی این موارد شدیداً نهی می‌شود. این پرچم به صورت پیش‌فرض .Em off است. .It set_logname به طور معمول، .Nm sudo متغیرهای محیطی .Ev LOGNAME و .Ev USER را روی نام کاربر هدف تنظیم می‌کند (کاربر مشخص‌شده در .Em runas_default مگر اینکه گزینهٔ .Fl u داده شده باشد). با این حال، از آنجا که برخی برنامه‌ها (از جمله سیستم مدیریت نسخه RCS) از .Ev LOGNAME برای تعیین هویت واقعی کاربر استفاده می‌کنند، ممکن است تغییر این رفتار مطلوب باشد. این تغییر با نفی کردن گزینهٔ set_logname امکان‌پذیر است. گزینهٔ .Em set_logname هیچ اثری نخواهد داشت اگر گزینهٔ .Em env_reset غیرفعال نشده باشد و فهرست .Em env_keep حاوی .Ev LOGNAME یا .Ev USER . باشد. این پرچم به صورت پیش‌فرض .Em on است. .It set_utmp در صورت فعال بودن، .Nm sudo هنگام تخصیص یک شبه‌ترمینال، مدخلی در پرونده utmp (یا utmpx) ایجاد می‌کند. یک شبه‌ترمینال توسط .Nm sudo زمانی تخصیص می‌یابد که در یک ترمینال اجرا شود و یک یا چند مورد از پرچم‌های .Em log_input , .Em log_output , .Em log_stdin , .Em log_stdout , .Em log_stderr , .Em log_ttyin , .Em log_ttyout , یا .Em use_pty فعال باشند. به‌طور پیش‌فرض، مدخل جدید رونوشتی از مدخل utmp موجود کاربر (در صورت وجود) خواهد بود که فیلدهای tty، time، type و pid آن به‌روزرسانی شده‌اند. این پرچم به‌طور پیش‌فرض .Em on است. .It setenv به کاربر اجازه می‌دهد گزینه .Em env_reset را از طریق خط فرمان با استفاده از گزینه .Fl E غیرفعال کند. علاوه بر این، متغیرهای محیطی تنظیم‌شده از طریق خط فرمان مشمول محدودیت‌های اعمال‌شده توسط .Em env_check , .Em env_delete , یا .Em env_keep نخواهند بود. بنابراین، تنها به کاربران مورد اعتماد باید اجازه تنظیم متغیرها به این شیوه داده شود. این پرچم به‌طور پیش‌فرض .Em off است. .It shell_noargs اگر تنظیم شود و .Nm sudo بدون آرگومان فراخوانی شود، به گونه‌ای عمل می‌کند که گویی گزینه .Fl s داده شده است. یعنی، یک پوسته را با عنوان .Sy root اجرا می‌کند (در صورت تنظیم بودن، پوسته توسط متغیر محیطی .Ev SHELL تعیین می‌شود، و در غیر این صورت به پوسته درج‌شده در مدخل /etc/passwd کاربر فراخوان بازمی‌گردد). این پرچم به‌طور پیش‌فرض .Em off است. .It stay_setuid در حالت عادی، وقتی .Nm sudo دستوری را اجرا می‌کند، شناسه‌های کاربری واقعی و مؤثر روی کاربر هدف تنظیم می‌شوند .Sy ( root به‌طور پیش‌فرض). این گزینه رفتار مذکور را به گونه‌ای تغییر می‌دهد که شناسه کاربری واقعی همان شناسه کاربری کاربر فراخوان باقی بماند. به عبارت دیگر، این کار باعث می‌شود .Nm sudo به عنوان یک لفاف set-user-ID عمل کند. این می‌تواند در سیستم‌هایی مفید باشد که برخی قابلیت‌های بالقوه خطرناک را هنگام اجرای یک برنامه با وضعیت set-user-ID غیرفعال می‌کنند. این گزینه تنها روی سیستم‌هایی مؤثر است که از فراخوانی سیستم .Xr setreuid 2 یا .Xr setresuid 2 پشتیبانی می‌کنند. این پرچم به‌طور پیش‌فرض .Em off است. .It sudoedit_checkdir در صورت تنظیم، .Nm sudoedit تمام بخش‌های دایرکتوری مسیر مورد ویرایش را از نظر قابلیت نوشتن توسط کاربر فراخوان بررسی می‌کند. پیوندهای نمادین در دایرکتوری‌های قابل نوشتن دنبال نخواهند شد و .Nm sudoedit از ویرایش فایلی که در یک دایرکتوری قابل نوشتن قرار دارد خودداری می‌کند. این محدودیت‌ها زمانی که .Nm sudoedit توسط .Sy root . اجرا شود اعمال نمی‌شوند. در برخی سیستم‌ها، اگر تمام بخش‌های دایرکتوری مسیر مورد ویرایش توسط کاربر هدف قابل خواندن نباشد، .Nm sudoedit قادر به ویرایش فایل نخواهد بود. این پرچم به‌طور پیش‌فرض .Em on است. .Pp این تنظیم ابتدا در نگارش 1.8.15 معرفی شد اما در ابتدا از یک شرایط رقابتی رنج می‌برد. بررسی پیوندهای نمادین در دایرکتوری‌های میانی قابل نوشتن در نگارش 1.8.16 اضافه شد. .It sudoedit_follow به‌طور پیش‌گزیده، .Nm sudoedit هنگام باز کردن پرونده‌ها، پیوندهای نمادین را دنبال نخواهد کرد. گزینهٔ .Em sudoedit_follow می‌تواند فعال شود تا به .Nm sudoedit اجازه باز کردن پیوندهای نمادین داده شود. این مقدار را می‌توان به ازای هر فرمان با برچسب‌های .Dv FOLLOW و .Dv NOFOLLOW بازنویسی کرد. این پرچم به‌طور پیش‌گزیده .Em off است. .Pp این تنظیم تنها در نگارش 1.8.15 یا بالاتر پشتیبانی می‌شود. .It syslog_pid هنگام ثبت گزارش از طریق .Xr syslog 3 , شناسهٔ فرایند در مدخل گزارش گنجانده می‌شود. این پرچم به‌طور پیش‌گزیده .Em off است. .Pp این تنظیم تنها در نگارش 1.8.21 یا بالاتر پشتیبانی می‌شود. .It targetpw در صورت تنظیم، .Nm sudo هنگام اجرای یک فرمان یا ویرایش یک پرونده، به‌جای گذرواژهٔ کاربر فراخواننده، گذرواژهٔ کاربر مشخص‌شده توسط گزینهٔ .Fl u (به‌طور پیش‌گزیده مقدار .Em runas_default ) را درخواست خواهد کرد. این پرچم از استفاده از شناسهٔ کاربری ثبت‌نشده در پایگاه‌دادهٔ passwd به‌عنوان آرگومان برای گزینهٔ .Fl u جلوگیری می‌کند. این پرچم به‌طور پیش‌گزیده .Em off است. .It tty_tickets در صورت تنظیم، کاربران باید به ازای هر tty احراز هویت شوند. با فعال بودن این پرچم، .Nm sudo از یک رکورد جداگانه در پروندهٔ برچسب زمانی برای هر پایانه استفاده خواهد کرد. در صورت غیرفعال بودن، یک رکورد واحد برای تمامی نشست‌های ورود استفاده می‌شود. .Pp این گزینه با گزینهٔ .Em timestamp_type جایگزین شده است. .It umask_override در صورت تنظیم، .Nm sudo مقدار umask را دقیقاً همان‌گونه که در پروندهٔ .Em sudoers مشخص شده است بدون تغییر تنظیم خواهد کرد. این کار امکان تعیین umask در پروندهٔ .Em sudoers را فراهم می‌کند که دسترسی آزادتری نسبت به umask خود کاربر داشته و با رفتار پیشین مطابقت دارد. اگر .Em umask_override تنظیم نشده باشد، .Nm sudo مقدار umask را برابر با اجتماع umask کاربر و مقدار مشخص‌شده در .Em sudoers قرار خواهد داد. این پرچم به‌طور پیش‌گزیده .Em off است. .if \n(LC \{\ .It use_loginclass در صورت تنظیم، .Nm sudo پیش‌گزیده‌های مشخص‌شده برای کلاس ورود کاربر هدف را در صورت وجود اعمال خواهد کرد. تنها در صورتی در دسترس است که .Nm sudo با گزینهٔ .Li --with-logincap پیکربندی شده باشد. این پرچم به‌طور پیش‌گزیده .Em off است. .\} .It use_netgroups در صورت تنظیم، گروه‌های شبکه (با پیشوند .Ql + ) ، می‌توانند به جای کاربر یا میزبان استفاده شوند. برای sudoers مبتنی بر LDAP، پشتیبانی از گروه‌های شبکه نیازمند یک تطابق زیررشته‌ای سنگین روی سرور است مگر اینکه دستورالعمل .Sy NETGROUP_BASE در پرونده‌ی .Pa /etc/ldap.conf وجود داشته باشد. اگر به گروه‌های شبکه نیازی نباشد، این گزینه می‌تواند برای کاهش بار روی سرور LDAP غیرفعال شود. این پرچم به طور پیش‌فرض .Em on است. .It use_pty در صورت تنظیم و در حالتی که .Nm sudo در یک ترمینال اجرا شود، دستور در یک شبه‌ترمینال اجرا خواهد شد (حتی اگر هیچ ثبت وقایع ورودی/خروجی انجام نشود). اگر فرایند .Nm sudo به یک ترمینال متصل نباشد، .Em use_pty هیچ تأثیری ندارد. .Pp یک برنامه‌ی مخرب که تحت .Nm sudo اجرا می‌شود ممکن است بتواند دستورهایی را به ترمینال کاربر تزریق کند یا فرایندی در پس‌زمینه اجرا کند که حتی پس از پایان اجرای برنامه‌ی اصلی، دسترسی به دستگاه ترمینال کاربر را حفظ کند. با اجرای دستور در یک شبه‌ترمینال جداگانه، این حمله دیگر امکان‌پذیر نخواهد بود. این پرچم به طور پیش‌فرض .Em off است. .It user_command_timeouts در صورت تنظیم، کاربر می‌تواند یک مهلت زمانی در خط فرمان مشخص کند. اگر مهلت زمانی پیش از پایان یافتن دستور منقضی شود، دستور خاتمه خواهد یافت. اگر مهلت زمانی هم در پرونده‌ی .Pa sudoers و هم در خط فرمان مشخص شده باشد، مقدار کمتر از بین آن دو استفاده خواهد شد. برای شرح ساختار مهلت زمانی، بخش .Em Timeout_Spec را ببینید. این پرچم به طور پیش‌فرض .Em off است. .Pp این تنظیم تنها در نگارش 1.8.20 یا بالاتر پشتیبانی می‌شود. .It utmp_runas در صورت تنظیم، .Nm sudo نام کاربری که دستور با هویت آن اجرا می‌شود (runas) را هنگام به‌روزرسانی پرونده‌ی utmp (یا utmpx) ذخیره می‌کند. به طور پیش‌فرض، .Nm sudo نام کاربر فراخواننده را ذخیره می‌کند. این پرچم به طور پیش‌فرض .Em off است. .It visiblepw به طور پیش‌فرض، .Nm sudo اگر کاربر مجبور به وارد کردن گذرواژه باشد اما غیرفعال کردن انعکاس (echo) در ترمینال ممکن نباشد، از اجرا خودداری می‌کند. اگر پرچم .Em visiblepw تنظیم شده باشد، .Nm sudo حتی زمانی که گذرواژه روی صفحه نمایش قابل مشاهده باشد، درخواست گذرواژه خواهد کرد. این قابلیت اجرای دستورهایی مانند .Ql ssh somehost sudo ls را ممکن می‌سازد، چرا که به طور پیش‌فرض، .Xr ssh 1 هنگام اجرای یک دستور، tty تخصیص نمی‌دهد. این پرچم به طور پیش‌فرض .Em off است. .El .Pp .Sy اعداد صحیح : .Bl -tag -width 16n .It closefrom پیش از اجرای یک دستور، .Nm sudo تمام توصیف‌کننده‌های باز پرونده به جز ورودی استاندارد، خروجی استاندارد و خطای استاندارد (توصیف‌کننده‌های پرونده 0-2) را خواهد بست. گزینه‌ی .Em closefrom می‌تواند برای تعیین یک توصیف‌کننده‌ی پرونده‌ی متفاوت جهت شروع بستن استفاده شود. مقدار پیش‌فرض 3 است. .It command_timeout حداکثر مدت زمانی که یک دستور پیش از خاتمه یافتن اجازه اجرا دارد. برای توضیحات مربوط به نحو مهلت زمانی، بخش .Em Timeout_Spec را ببینید. .Pp این تنظیم تنها در نسخه 1.8.20 یا بالاتر پشتیبانی می‌شود. .It log_server_timeout حداکثر مدت زمان انتظار هنگام اتصال به سرور گزارش یا انتظار برای پاسخ سرور. برای توضیحات مربوط به نحو مهلت زمانی، بخش .Em Timeout_Spec را ببینید. مقدار پیش‌فرض ۳۰ ثانیه است. .Pp این تنظیم تنها در نسخه 1.9.0 یا بالاتر پشتیبانی می‌شود. .It maxseq حداکثر شماره توالی که جایگزین کد گریز .Ql %{seq} در پرونده گزارش I/O خواهد شد (برای اطلاعات بیشتر توضیحات .Em iolog_dir را در زیر ببینید). در حالی که مقدار جایگزین‌شده برای .Ql %{seq} در مبنای ۳۶ است، خود .Em maxseq باید در مبنای ده‌دهی بیان شود. مقادیر بزرگ‌تر از 2176782336 (که متناظر با شماره توالی در مبنای ۳۶ .Dq ZZZZZZ ) است، بدون هشدار به 2176782336 کوتاه می‌شوند. مقدار پیش‌فرض 2176782336 است. .Pp به محض اینکه شماره توالی محلی به مقدار .Em maxseq برسد، به صفر .Dq سرریز خواهد کرد، که پس از آن .Nm نام مسیرهای گزارش I/O موجود را کوتاه و مجدداً استفاده خواهد کرد. .Pp این تنظیم تنها در نسخه 1.8.7 یا بالاتر پشتیبانی می‌شود. .It passwd_tries تعداد دفعاتی که کاربر مجاز است گذرواژه خود را پیش از اینکه .Nm sudo شکست را ثبت کرده و خارج شود وارد کند. مقدار پیش‌فرض ۳ است. .It syslog_maxlen در بسیاری از سیستم‌ها، .Xr syslog 3 بافر گزارش نسبتاً کوچکی دارد. سند IETF RFC 5424 بیان می‌کند که سرورهای syslog باید از پیام‌های حداقل ۴۸۰ بایتی پشتیبانی کنند و بهتر است از پیام‌های تا ۲۰۴۸ بایت پشتیبانی به عمل آورند. به‌طور پیش‌فرض، .Nm پیام‌های گزارشی تا ۹۸۰ بایت ایجاد می‌کند که متناظر با پیاده‌سازی تاریخی .Bx در syslog است؛ پیاده‌سازی‌ای که از یک بافر ۱۰۲۴ بایتی برای ذخیره پیام، تاریخ، نام میزبان و نام برنامه استفاده می‌کرد. برای جلوگیری از بریده شدن پیام‌های syslog، .Nm پیام‌های گزارشی بزرگ‌تر از .Em syslog_maxlen بایت را به چند بخش تقسیم خواهد کرد. هنگامی که پیامی تقسیم می‌شود، بخش‌های اضافه شامل رشته .Dq Pq command continued بعد از نام کاربری و قبل از ادامه آرگومان‌های خط فرمان خواهند بود. .Pp این تنظیم تنها در نسخه 1.8.19 یا بالاتر پشتیبانی می‌شود. .El .Pp .Sy اعداد صحیحی که می‌توانند در زمینه بولی استفاده شوند : .Bl -tag -width 16n .It loglinelen تعداد نویسه‌ها در هر سطر برای گزارش پرونده. این مقدار برای تصمیم‌گیری درباره زمان شکستن سطرها جهت خوانایی بهتر پرونده‌های گزارش استفاده می‌شود. این گزینه تأثیری بر پرونده گزارش syslog ندارد و فقط بر گزارش پرونده مؤثر است. مقدار پیش‌فرض ۸۰ است (از ۰ استفاده کنید یا گزینه را نفی کنید تا شکستن خودکار سطرها غیرفعال شود). .It passwd_timeout تعداد دقایق پیش از اتمام مهلت اعلان گذرواژه .Nm sudo یا ۰ برای بدون محدودیت زمانی. در صورتی که دقت در سطح دقیقه کافی نباشد، مهلت زمانی می‌تواند شامل مقدار اعشاری نیز باشد، برای مثال 2.5. مقدار پیش‌فرض ۰ است. .It timestamp_timeout تعداد دقیقه‌هایی که می‌تواند پیش از درخواست مجدد گذرواژه توسط .Nm sudo سپری شود. اگر دقت در مقیاس دقیقه کافی نباشد، زمان مهلت می‌تواند شامل یک جزء اعشاری باشد، مثلاً 2.5. مقدار پیش‌فرض 15 است. برای درخواست همیشگی گذرواژه، این مقدار را 0 بگذارید. در صورت تنظیم به مقداری کمتر از 0، برچسب زمانی کاربر تا زمان راه‌اندازی مجدد سیستم منقضی نخواهد شد. از این قابلیت می‌توان برای اجازه دادن به کاربران جهت ایجاد یا حذف برچسب‌های زمانی خود به‌ترتیب از طریق .Ql sudo -v و .Ql sudo -k استفاده کرد. .It umask ماسک حالت ایجاد فایل برای استفاده هنگام اجرای دستور. برای جلوگیری از تغییر umask توسط .Nm این گزینه را نفی کنید یا آن را روی 0777 بگذارید. مگر اینکه پرچم .Em umask_override تنظیم شده باشد، umask واقعی حاصل اجتماع umask کاربر و مقدار تنظیم .Em umask خواهد بود که مقدار پیش‌فرض آن 0022 است. این تضمین می‌کند که .Nm sudo هنگام اجرای یک دستور هرگز umask را تضعیف نمی‌کند. .Pp اگر .Em umask به‌صراحت در .Em sudoers , تنظیم شده باشد، هرگونه تنظیم umask در PAM یا login.conf را بازنویسی خواهد کرد. اگر .Em umask در .Em sudoers , تنظیم نشده باشد، umask مشخص‌شده توسط PAM یا login.conf اولویت خواهد داشت. تنظیم umask در PAM برای .Nm sudoedit , که نشست جدید PAM ایجاد نمی‌کند، اعمال نمی‌شود. .El .Pp .Sy Strings : .Bl -tag -width 16n .if \n(AA \{\ .It apparmor_profile نمایه پیش‌فرض AppArmor برای انتقال به آن هنگام اجرای دستور. مقدار پیش‌فرض .Em apparmor_profile می‌تواند برای ورودی‌های منفرد .Em sudoers با مشخص کردن گزینه .Dv APPARMOR_PROFILE بازنویسی شود. این گزینه تنها زمانی در دسترس است که sudo با پشتیبانی از AppArmor کامپایل شده باشد. .\} .It authfail_message پیامی که پس از ناموفق بودن احراز هویت کاربر نمایش داده می‌شود. این پیام می‌تواند شامل توالی گریز .Ql %d باشد که به تعداد تلاش‌های ناموفق ورود گذرواژه بسط می‌یابد. در صورت تنظیم، پیام پیش‌فرض را لغو می‌کند: .Dq %d incorrect password attempt(s) . .It badpass_message پیامی که در صورت وارد کردن گذرواژه نادرست توسط کاربر نمایش داده می‌شود. مقدار پیش‌فرض .Dq Sorry, try again. است مگر اینکه توهین‌ها فعال شده باشند. .It editor فهرستی جدا شده با دو‌نقطه .Pq Ql :\& از مسیرهای ویرایشگر مورد استفاده توسط .Nm sudoedit و .Nm visudo . برای .Nm sudoedit , این فهرست برای یافتن ویرایشگر استفاده می‌شود، هنگامی که هیچ‌یک از متغیرهای محیطی .Ev SUDO_EDITOR , .Ev VISUAL یا .Ev EDITOR روی ویرایشگری که موجود و قابل اجرا باشد تنظیم نشده باشند. برای .Nm visudo , به عنوان فهرست سفیدی از ویرایشگرهای مجاز استفاده می‌شود؛ .Nm visudo ویرایشگری را انتخاب خواهد کرد که با متغیر محیطی .Ev SUDO_EDITOR , .Ev VISUAL یا .Ev EDITOR کاربر در صورت امکان مطابقت داشته باشد، یا نخستین ویرایشگر در فهرست که موجود و قابل اجرا باشد در غیر این صورت. مگر اینکه به عنوان .Nm sudoedit , فراخوانی شود، .Nm sudo متغیرهای محیطی .Ev SUDO_EDITOR , .Ev VISUAL یا .Ev EDITOR را حفظ نمی‌کند، مگر اینکه در فهرست .Em env_keep حضور داشته باشند یا گزینهٔ .Em env_reset غیرفعال شده باشد. پیش‌فرض برابر است با .Pa /usr/bin/editor . .It intercept_type سازوکار زیربنایی مورد استفاده توسط گزینه‌های .Em intercept و .Em log_subcmds است. دارای مقادیر ممکن زیر است: .Bl -tag -width 6n .It dso پیش‌بارگذاری یک شیء اشتراکی پویا (کتابخانه اشتراکی) که توابع کتابخانه‌ای .Xr execve 2 , .Xr execl 3 , .Xr execle 3 , .Xr execlp 3 , .Xr execv 3 , .Xr execvp 3 , .Xr execvpe 3 , و .Xr system 3 را رهگیری می‌کند. مقدار .Em dso با پشتیبانی SELinux RBAC در .Nm sudo Ns 's ناسازگار است. .It trace استفاده از .Xr ptrace 2 برای رهگیری فراخوان سیستمی .Xr execve 2 است. این قابلیت تنها روی سیستم‌های لینوکسی پشتیبانی می‌شود که فیلترکردن .Xr seccomp 2 فعال باشد. اگر پروندهٔ .Pa /proc/sys/kernel/seccomp/actions_avail وجود نداشته باشد یا شامل یک عنصر .Dq trap نباشد، تنظیم .Em intercept_type روی .Em trace هیچ اثری نخواهد داشت و به جای آن از .Em dso استفاده خواهد شد. .El .Pp پیش‌فرض استفاده از .Em trace است در صورتی که توسط سیستم پشتیبانی شود و .Em dso در صورتی که پشتیبانی نشود. .It iolog_dir شاخهٔ ریشه برای ساخت مسیر شاخهٔ گزارش‌های ورودی/خروجی. تنها زمانی استفاده می‌شود که گزینه‌های .Em log_input یا .Em log_output فعال باشند، یا برچسب‌های .Dv LOG_INPUT یا .Dv LOG_OUTPUT برای فرمانی مشخص شده باشند. شمارهٔ ترتیب نشست، در صورت وجود، در این شاخه ذخیره می‌شود. پیش‌گزیده: .Pa /var/log/sudo-io . .Pp دنباله‌های گریز درصد .Pq Ql % زیر پشتیبانی می‌شوند: .Bl -tag -width 4n .It %{seq} به یک شمارهٔ ترتیبی افزایشی در مبنای ۳۶ باز می‌شود (مانند 0100A5)، که هر دو رقم آن برای ساخت شاخه‌ای جدید به‌کار می‌رود، مانند .Pa 01/00/A5 .It %{user} به نام کاربری کاربر اجراکننده باز می‌شود .It %{group} به نام گروه واقعی (real group-ID) کاربر اجراکننده باز می‌شود .It %{runas_user} به نام کاربری کاربری که فرمان با دسترسی آن اجرا خواهد شد باز می‌شود (مانند .Sy root ) .It %{runas_group} به نام گروه کاربری که فرمان با دسترسی آن اجرا خواهد شد باز می‌شود (مانند .Sy wheel ) .It %{hostname} به نام میزبان محلی بدون نام دامنه باز می‌شود .It %{command} به نام پایهٔ فرمان در حال اجرا باز می‌شود .El .Pp علاوه بر این، تمام دنباله‌های گریز پشتیبانی‌شده توسط تابع .Xr strftime 3 سیستم نیز جایگزین می‌شوند. .Pp برای درج نویسهٔ صریح .Ql % باید از رشتهٔ .Ql %% استفاده شود. .It iolog_file مسیر نسبی نسبت به .Em iolog_dir , برای ذخیرهٔ گزارش‌های ورودی/خروجی در زمان فعال بودن .Em log_input یا .Em log_output یا وجود برچسب‌های .Dv LOG_INPUT یا .Dv LOG_OUTPUT برای یک فرمان. .Em iolog_file می‌تواند شامل نام شاخه نیز باشد. پیش‌گزیده: .Ql %{seq} . .Pp فهرست دنباله‌های گریز درصد .Pq Ql % پشتیبانی‌شده در توضیح گزینهٔ .Em iolog_dir آمده است. .Pp علاوه بر دنباله‌های گریز، مسیرهایی که به شش یا تعداد بیشتری .Em X Ns s ختم شوند، این .Em X Ns s ها با ترکیبی یکتا از ارقام و حروف جایگزین می‌شوند؛ مشابه تابع .Xr mktemp 3 . .Pp اگر مسیر حاصل از الحاق .Em iolog_dir و .Em iolog_file وجود داشته باشد، پروندهٔ لاگ موجود کوتاه (truncate) و بازنویسی می‌شود مگر اینکه .Em iolog_file به شش یا تعداد بیشتری .Em X Ns s . ختم شده باشد. .It iolog_flush در صورت تنظیم، .Nm sudo داده‌های گزارش I/O را پس از هر نوشتن به جای بافر کردن، روی دیسک تخلیه می‌کند. این کار مشاهده بلادرنگ گزارش‌ها را هنگام اجرای برنامه ممکن می‌سازد، اما ممکن است کارایی فشرده‌سازی گزارش‌های I/O را به میزان قابل توجهی کاهش دهد. این پرچم به طور پیش‌فرض .Em off است. .Pp این تنظیم فقط در نسخه 1.8.20 یا بالاتر پشتیبانی می‌شود. .It iolog_group نام گروه برای جستجو هنگام تنظیم شناسه گروه روی پرونده‌ها و دایرکتوری‌های جدید گزارش I/O. اگر .Em iolog_group تنظیم نشده باشد، شناسه گروه اصلی کاربری که توسط .Em iolog_user مشخص شده استفاده می‌شود. اگر هیچ‌کدام از .Em iolog_group یا .Em iolog_user تنظیم نشده باشند، پرونده‌ها و دایرکتوری‌های گزارش I/O با شناسه گروه 0 ایجاد می‌شوند. .Pp این تنظیم فقط در نسخه 1.8.19 یا بالاتر پشتیبانی می‌شود. .It iolog_mode حالت پرونده مورد استفاده هنگام ایجاد پرونده‌های گزارش I/O. بیت‌های حالت برای مجوزهای خواندن و نوشتن مالک، گروه یا دیگران اعمال می‌شوند؛ سایر موارد نادیده گرفته خواهند شد. مجوزهای پرونده همواره شامل بیت‌های خواندن و نوشتن مالک خواهند بود، حتی اگر در حالت مشخص‌شده وجود نداشته باشند. هنگام ایجاد دایرکتوری‌های گزارش I/O، بیت‌های جستجو (اجرا) اضافه می‌شوند تا با بیت‌های خواندن و نوشتن مشخص‌شده توسط .Em iolog_mode مطابقت داشته باشند. پیش‌فرض 0600 است (فقط خواندن و نوشتن توسط کاربر). .Pp این تنظیم فقط در نسخه 1.8.19 یا بالاتر پشتیبانی می‌شود. .It iolog_user نام کاربر برای جستجو هنگام تنظیم شناسه‌های کاربر و گروه روی پرونده‌ها و دایرکتوری‌های جدید گزارش I/O. اگر .Em iolog_group تنظیم شده باشد، به جای شناسه گروه اصلی کاربر استفاده خواهد شد. به طور پیش‌فرض، پرونده‌ها و دایرکتوری‌های گزارش I/O با شناسه کاربر و شناسه گروه 0 ایجاد می‌شوند. .Pp این تنظیم زمانی که گزارش‌های I/O روی یک اشتراک سامانه پرونده شبکه‌ای (NFS) ذخیره می‌شوند، می‌تواند مفید باشد. داشتن یک کاربر اختصاصی به عنوان مالک پرونده‌های گزارش I/O بدان معناست که .Nm با شناسه کاربر 0 روی پرونده‌های گزارش نمی‌نویسد؛ امری که معمولاً توسط NFS مجاز دانسته نمی‌شود. .Pp این تنظیم فقط در نسخه 1.8.19 یا بالاتر پشتیبانی می‌شود. .It lecture_status_dir دایرکتوری‌ای که .Nm sudo پرونده‌های وضعیت تذکر هر کاربر را در آن ذخیره می‌کند. به محض اینکه کاربر تذکر را دریافت کند، یک پرونده با اندازه صفر در این دایرکتوری ایجاد می‌شود تا .Nm sudo دوباره به کاربر تذکر ندهد. این دایرکتوری .Em نباید هنگام راه‌اندازی مجدد سیستم پاک شود. پیش‌فرض .Pa /var/lib/sudo/lectured است. .if \n(PS \{\ .It limitprivs مجوزهای محدودکننده پیش‌فرض Solaris جهت استفاده هنگام ایجاد یک مجموعه مجوز جدید برای یک دستور. این کار تمام مجوزهای فرایند در حال اجرا را محدود می‌کند. مجوزهای محدودکننده پیش‌فرض ممکن است به ازای هر دستور در .Em sudoers بازنویسی شوند. این گزینه فقط زمانی در دسترس است که .Nm روی Solaris 10 یا بالاتر ساخته شده باشد. .\} .It log_server_cabundle مسیر پرونده بسته مرجع صدور گواهی (CA bundle) در قالب PEM، جهت استفاده به جای پایگاه‌داده مراجع صدور گواهی پیش‌فرض سیستم هنگام احراز هویت کارساز گزارش. پیش‌فرض، استفاده از پایگاه‌داده مراجع صدور گواهی پیش‌فرض سیستم است. این تنظیم بی‌اثر است مگر اینکه .Em log_servers تنظیم شده باشد و کارساز گزارش راه دور با TLS امن شده باشد. .Pp این تنظیم فقط در نسخه 1.9.0 یا بالاتر پشتیبانی می‌شود. .It log_server_peer_cert مسیر پرونده گواهی کلاینت .Nm sudo در قالب PEM. این تنظیم زمانی لازم است که سرور گزارش دوردست با TLS امن شده باشد و اعتبارسنجی گواهی کلاینت فعال باشد. برای .Nm sudo_logsrvd , اعتبارسنجی گواهی کلاینت توسط گزینه .Em tls_checkpeer کنترل می‌شود که مقدار پیش‌فرض آن .Em false است. .Pp این تنظیم فقط در نسخه 1.9.0 یا بالاتر پشتیبانی می‌شود. .It log_server_peer_key مسیر پرونده کلید خصوصی کلاینت .Nm sudo در قالب PEM. این تنظیم زمانی لازم است که سرور گزارش دوردست با TLS امن شده باشد و اعتبارسنجی گواهی کلاینت فعال باشد. برای .Nm sudo_logsrvd , اعتبارسنجی گواهی کلاینت توسط پرچم .Em tls_checkpeer کنترل می‌شود که مقدار پیش‌فرض آن .Em false است. .Pp این تنظیم فقط در نسخه 1.9.0 یا بالاتر پشتیبانی می‌شود. .It mailsub موضوع نامه ارسال‌شده به کاربر .Em mailto . کد گریز .Ql %h به نام میزبان دستگاه گسترش می‌یابد. پیش‌فرض .Dq *** SECURITY information for %h *** است. .It noexec_file از نسخه 1.8.1 .Nm sudo این گزینه دیگر پشتیبانی نمی‌شود. مسیر پرونده noexec اکنون باید در پرونده .Xr sudo.conf 5 تنظیم شود. .It pam_askpass_service در سیستم‌هایی که از PAM برای احراز هویت استفاده می‌کنند، این نام سرویسی است که هنگام تعیین گزینه .Fl A استفاده می‌شود. مقدار پیش‌فرض بسته به اینکه آیا گزینه .Fl i نیز مشخص شده است یا خیر، .Ql sudo یا .Ql sudo-i است. برای اطلاعات بیشتر توضیحات .Em pam_service را ببینید. .Pp این تنظیم فقط در نسخه 1.9.9 یا بالاتر پشتیبانی می‌شود. .It pam_login_service در سیستم‌هایی که از PAM برای احراز هویت استفاده می‌کنند، این نام سرویسی است که هنگام تعیین گزینه .Fl i استفاده می‌شود. مقدار پیش‌فرض .Ql sudo-i است. برای اطلاعات بیشتر توضیحات .Em pam_service را ببینید. .Pp این تنظیم فقط در نسخه 1.8.8 یا بالاتر پشتیبانی می‌شود. .It pam_service در سیستم‌هایی که از PAM برای احراز هویت استفاده می‌کنند، نام سرویس سیاست PAM مورد اعمال را مشخص می‌کند. این مورد معمولاً با یک مدخل در پرونده .Pa pam.conf یا پرونده‌ای در شاخه .Pa /etc/pam.d مطابقت دارد. مقدار پیش‌فرض .Ql sudo است. .Pp این تنظیم فقط در نسخه 1.8.8 یا بالاتر پشتیبانی می‌شود. .It passprompt اعلان پیش‌فرض برای استفاده هنگام درخواست گذرواژه؛ می‌تواند از طریق گزینه .Fl p یا متغیر محیطی .Ev SUDO_PROMPT بازنویسی شود. دنباله‌های گریز درصدی .Pq Ql % زیر پشتیبانی می‌شوند: .Bl -tag -width 4n .It %H به نام میزبان محلی به همراه نام دامنه گسترش می‌یابد (فقط اگر نام میزبان دستگاه کاملاً مشخص باشد یا گزینه .Em fqdn تنظیم شده باشد) .It %h به نام میزبان محلی بدون نام دامنه گسترش می‌یابد .It %p به کاربری که گذرواژه‌اش درخواست شده گسترش می‌یابد (با در نظر گرفتن پرچم‌های .Em rootpw , .Em targetpw و .Em runaspw در .Em sudoers ) .It \&%U به نام ورود کاربری که دستور در قالب آن اجرا خواهد شد گسترش می‌یابد (پیش‌فرض: .Sy root ) .It %u به نام ورود کاربر فراخواننده گسترش می‌یابد .It %% دو نویسه متوالی .Ql % به یک نویسه واحد .Ql % تبدیل می‌شوند .El .Pp در سامانه‌هایی که از PAM برای احراز هویت استفاده می‌کنند، .Em passprompt تنها در صورتی استفاده می‌شود که اعلان ارائه‌شده توسط ماژول PAM با رشته .Dq "Password: " یا .Dq "username's Password: " . مطابقت داشته باشد. این امر تضمین می‌کند که تنظیم .Em passprompt با احراز هویت به روش چالش-پاسخ تداخلی نداشته باشد. از پرچم .Em passprompt_override می‌توان برای تغییر این رفتار استفاده کرد. .Pp مقدار پیش‌فرض برابر است با .Ql "[sudo] password for %p: " . .if \n(PS \{\ .It privs امتیازات پیش‌فرض Solaris جهت استفاده هنگام ساخت مجموعه امتیاز جدید برای یک دستور. این مقدار از طریق مجموعه امتیازات موروثی به فرایند در حال اجرا منتقل می‌شود، اما توسط امتیازات حد (limit privileges) محدود می‌گردد. اگر گزینه .Em privs مشخص شده باشد اما گزینه .Em limitprivs تعیین نشده باشد، امتیازات حد فرایند در حال اجرا روی .Em privs . تنظیم می‌شود. امتیازات پیش‌فرض را می‌توان به ازای هر دستور در .Em sudoers . بازنویسی کرد. این گزینه تنها در صورتی در دسترس است که .Nm روی Solaris 10 یا بالاتر ساخته شده باشد. .\} .if \n(SL \{\ .It role نقش پیش‌فرض SELinux جهت استفاده هنگام ساخت یک زمینه امنیتی جدید برای اجرای دستور. نقش پیش‌فرض را می‌توان به ازای هر دستور در پرونده .Em sudoers یا از طریق گزینه‌های خط فرمان لغو کرد. این گزینه تنها زمانی در دسترس است که .Nm sudo با پشتیبانی از SELinux ساخته شده باشد. .\} .It runas_default کاربر پیش‌فرض برای اجرای دستورها در صورتی که گزینه .Fl u در خط فرمان مشخص نشده باشد. پیش‌فرض برابر است با .Sy root . .It sudoers_locale محیط محلی (locale) برای تجزیه پرونده sudoers، ثبت وقایع دستورها و ارسال ایمیل. تغییر لوکال ممکن است بر نحوه تفسیر sudoers اثر بگذارد. پیش‌فرض برابر است با .Ql C . .It timestamp_type .Nm از پرونده‌های برچسب زمانی به ازای هر کاربر برای ذخیره موقت اعتبارنامه‌ها استفاده می‌کند. از گزینه .Em timestamp_type می‌توان برای تعیین نوع رکورد برچسب زمانی استفاده کرد. این گزینه مقادیر ممکن زیر را می‌پذیرد: .Bl -tag -width 6n .It global یک رکورد برچسب زمانی واحد برای تمام نشست‌های ورود کاربر، صرف‌نظر از ترمینال یا شناسه فرایند والد استفاده می‌شود. یک رکورد اضافی برای سریالی کردن اعلان‌های گذرواژه در حالتی که .Nm sudo چندین بار در یک خط لوله استفاده شود به کار می‌رود، اما این امر اثری روی احراز هویت ندارد. .It ppid یک رکورد مهر زمانی منفرد برای همه فرایندهایی با شناسه فرایند والد یکسان (معمولاً پوسته) استفاده می‌شود. دستورهای اجراشده از یک پوسته (یا فرایند والد مشترک دیگر) برای مدت .Em timestamp_timeout دقیقه (به‌طور پیش‌فرض ۱۵) به گذرواژه نیاز نخواهند داشت. دستورهای اجراشده از طریق .Nm sudo با شناسه فرایند والد متفاوت، برای نمونه از یک اسکریپت پوسته، به‌صورت جداگانه احراز هویت خواهند شد. .It tty یک رکورد مهر زمانی برای هر ترمینال استفاده می‌شود، بدین معنی که نشست‌های ورود کاربر به‌صورت جداگانه احراز هویت می‌شوند. اگر ترمینالی وجود نداشته باشد، رفتار مانند .Em ppid خواهد بود. دستورهای اجراشده از همان ترمینال به مدت .Em timestamp_timeout دقیقه (به‌طور پیش‌فرض ۱۵) به گذرواژه نیاز نخواهند داشت. .It kernel مهر زمانی در هسته به‌عنوان مشخصه دستگاه ترمینال ذخیره می‌شود. اگر ترمینالی وجود نداشته باشد، رفتار مانند .Em ppid خواهد بود. مقدارهای منفی .Em timestamp_timeout پشتیبانی نمی‌شوند و مقدارهای مثبت به حداکثر ۶۰ دقیقه محدود هستند. این قابلیت در حال حاضر فقط روی .Ox پشتیبانی می‌شود. .El .Pp مقدار پیش‌فرض .Em tty است. .Pp این تنظیم فقط در نسخه 1.8.21 یا بالاتر پشتیبانی می‌شود. .It timestampdir دایرکتوری‌ای که در آن .Nm sudo فایل‌های مهر زمانی خود را ذخیره می‌کند. این دایرکتوری هنگام راه‌اندازی مجدد سیستم باید پاک شود. پیش‌فرض .Pa /run/sudo/ts است. .It timestampowner مالک دایرکتوری وضعیت تذکر، دایرکتوری مهر زمانی و تمامی فایل‌های ذخیره‌شده در آن‌ها. پیش‌فرض .Sy root است. .if \n(SL \{\ .It type نوع پیش‌فرض SELinux هنگام ساخت زمینه امنیتی جدید برای اجرای دستور. نوع پیش‌فرض را می‌توان بر اساس هر دستور در فایل .Em sudoers یا از طریق گزینه‌های خط فرمان بازنویسی کرد. این گزینه تنها زمانی در دسترس است که .Nm sudo با پشتیبانی از SELinux ساخته شده باشد. .\} .El .Pp .Sy رشته‌هایی که می‌توانند در زمینه بولی استفاده شوند : .Bl -tag -width 12n .It admin_flag گزینه .Em admin_flag مسیر فایلی را مشخص می‌کند که اولین بار با اجرای .Nm sudo توسط کاربری که عضو گروه‌های .Em sudo یا .Em admin است ایجاد می‌شود. تنها در صورتی در دسترس است که .Nm sudo با گزینه .Li --enable-admin-flag پیکربندی شده باشد. مقدار پیش‌فرض .Pa ~/.sudo_as_admin_successful است. .It env_file گزینه .Em env_file مسیر کامل فایلی شامل متغیرهایی را مشخص می‌کند که باید در محیط برنامه در حال اجرا تنظیم شوند. ورودی‌ها در این فایل باید یا به شکل .Ql VARIABLE=value یا .Ql export VARIABLE=value باشند. مقدار می‌تواند به‌صورت اختیاری داخل نقل‌قول تکی یا دوتایی قرار گیرد. متغیرهای این فایل تنها در صورتی اضافه می‌شوند که متغیر از قبل در محیط وجود نداشته باشد. این فایل بخشی از خط‌مشی امنیتی در نظر گرفته می‌شود، محتویات آن مشمول سایر محدودیت‌های محیطی .Nm sudo نظیر .Em env_keep و .Em env_check نمی‌گردد. .It exempt_group کاربران این گروه از الزامات گذرواژه و PATH معاف هستند. نام گروه مشخص‌شده نباید شامل پیشوند .Ql % باشد. این گزینه به‌طور پیش‌فرض تنظیم نشده است. .It fdexec تعیین می‌کند که آیا .Nm sudo یک دستور را بر اساس مسیر آن اجرا کند یا از طریق یک توصیف‌کننده پرونده باز. مقدارهای ممکن زیر را می‌پذیرد: .Bl -tag -width 6n .It always همیشه از طریق توصیف‌کننده پرونده اجرا شود. .It never هرگز از طریق توصیف‌کننده پرونده اجرا نشود. .It digest_only تنها در صورتی از طریق توصیف‌کننده پرونده اجرا شود که دستور دارای یک چکیده مرتبط در پرونده .Em sudoers باشد. .El .Pp مقدار پیش‌فرض .Em digest_only . است. این تنظیم از شرایط رقابتی زمان بررسی تا زمان استفاده هنگامی که دستور در شاخه‌ای با امکان نوشتن توسط کاربر فراخواننده قرار دارد جلوگیری می‌کند. .Pp تنظیم .Em fdexec نخستین عنصر بردار آرگومان را برای اسکریپت‌ها به‌دلیل نحوه اجرای مفسرهای اسکریپت توسط هسته تغییر می‌دهد ($0 در پوسته). به‌جای یک مسیر عادی، به یک توصیف‌کننده پرونده اشاره خواهد کرد. برای نمونه، .Pa /dev/fd/4 در سولاریس و .Pa /proc/self/fd/4 در لینوکس. یک راه‌حل جایگزین، استفاده از متغیر محیطی .Dv SUDO_COMMAND به‌جای آن است. .Pp تنظیم .Em fdexec تنها زمانی استفاده می‌شود که دستور با نام مسیر مطابقت داده شود. اگر دستور با نام مستعار توکار .Sy ALL مطابقت یابد، هیچ تاثیری ندارد. .Pp این تنظیم تنها در نسخه 1.8.20 یا بالاتر پشتیبانی می‌شود. اگر سیستم‌عامل از فراخوان سیستمی .Xr fexecve 2 پشتیبانی نکند، این تنظیم بی‌اثر خواهد بود. .It group_plugin رشته‌ای شامل یک افزونه گروه .Nm همراه با آرگومان‌های اختیاری. این رشته باید شامل مسیر افزونه، به‌صورت کامل یا نسبی نسبت به شاخه .Pa /usr/libexec/sudo باشد، به‌همراه هرگونه آرگومان پیکربندی که افزونه نیاز دارد. این آرگومان‌ها (در صورت وجود) به تابع مقداردهی اولیه افزونه فرستاده می‌شوند. در صورت وجود آرگومان، رشته باید درون جفت‌گیومه قرار گیرد .Pq \&"" . .Pp در سیستم‌های ۶۴ بیتی، اگر افزونه موجود باشد اما بارگذاری نشود، .Nm به‌دنبال نسخه ۶۴ بیتی می‌گردد و در صورت وجود، آن را به‌عنوان جایگزین بارگذاری می‌کند. قوانین دقیق این رفتار بر اساس سیستم متفاوت است. در سولاریس، اگر افزونه در شاخه‌ای ذخیره شده باشد که به .Dq lib , ختم می‌شود، .Nm مسیر جایگزین را با افزودن .Dq /64 به نام شاخه می‌سازد؛ .Pa /usr/lib/group_plugin.so تبدیل می‌شود به .Pa /usr/lib/64/group_plugin.so . در لینوکس، شاخه‌ای که به .Dq lib ختم شود به .Dq lib64 به‌عنوان مسیر جایگزین تبدیل خواهد شد؛ .Pa /usr/lib/group_plugin.so تبدیل می‌شود به .Pa /usr/lib/64/group_plugin.so . در سایر سیستم‌ها، مسیر جایگزین با افزودن .Dq 64 پیش از پسوند پرونده ایجاد می‌شود؛ .Pa group_plugin.so تبدیل می‌شود به .Pa group_plugin64.so . .Pp برای اطلاعات بیشتر ببینید: .Sx "GROUP PROVIDER PLUGINS" . .It lecture این گزینه کنترل می‌کند چه زمانی یک پیام کوتاه در کنار اعلان گذرواژه چاپ شود. مقدارهای ممکن زیر را می‌پذیرد: .Bl -tag -width 6n .It always همیشه به کاربر تذکر داده شود. .It never هرگز به کاربر تذکر داده نشود. .It once تنها نخستین باری که کاربر .Nm sudo را اجرا می‌کند به او تذکر داده شود. .El .Pp اگر مقداری تعیین نشود، مقدار .Em once ضمنی خواهد بود. نفی این گزینه منجر به استفاده از مقدار .Em never می‌شود. مقدار پیش‌گزیده .Em never است. .It lecture_file مسیر پرونده‌ای شامل متن تذکر جایگزین برای .Nm sudo که در صورت وجود پرونده نام‌برده، به جای تذکر استاندارد استفاده می‌شود. به‌طور پیش‌گزیده، .Nm sudo از یک تذکر توکار استفاده می‌کند. .It listpw این گزینه زمان نیاز به گذرواژه هنگام اجرای .Nm sudo توسط کاربر به همراه گزینه .Fl l را کنترل می‌کند. مقدارهای ممکن آن عبارتند از: .Bl -tag -width 4n .It all تمام مدخل‌های پرونده .Em sudoers کاربر برای میزبان فعلی باید دارای پرچم .Dv NOPASSWD باشند تا نیازی به وارد کردن گذرواژه نباشد. .It always کاربر برای استفاده از گزینه .Fl l باید همیشه گذرواژه را وارد کند. .It any حداقل یکی از مدخل‌های پرونده .Em sudoers کاربر برای میزبان فعلی باید دارای پرچم .Dv NOPASSWD باشد تا نیازی به وارد کردن گذرواژه نباشد. .It never کاربر برای استفاده از گزینه .Fl l هرگز نیازی به وارد کردن گذرواژه ندارد. .El .Pp اگر مقداری تعیین نشود، مقدار .Em any ضمنی خواهد بود. نفی این گزینه منجر به استفاده از مقدار .Em never می‌شود. مقدار پیش‌گزیده .Em any است. .It log_format قالب ثبت وقایع. قالب‌های وقایع پشتیبانی‌شده عبارتند از: .Bl -tag -width 4n .It json ثبت وقایع در قالب JSON. مدخل‌های گزارش JSON در صورت مجاز بودن دستور، شامل جزئیات کامل کاربر و محیط اجرا هستند. به دلیل محدودیت‌های پروتکل، وقایع JSON ارسال‌شده از طریق .Em syslog ممکن است کوتاه شوند. .It sudo گزارش‌های سنتی به سبک sudo؛ برای توضیحات مربوط به قالب پرونده گزارش به .Sx "EVENT LOGGING" مراجعه کنید. .El .Pp این تنظیم بر گزارش‌های ارسال‌شده از طریق .Xr syslog 3 و همچنین بر پرونده مشخص‌شده توسط تنظیم .Em logfile (در صورت وجود) اثر می‌گذارد. مقدار پیش‌گزیده .Em sudo است. .It logfile مسیر پرونده ثبت وقایع .Nm sudo (نه پرونده ثبت وقایع syslog). تنظیم یک مسیر، ثبت در پرونده را فعال می‌کند؛ نفی این گزینه آن را غیرفعال می‌سازد. به‌طور پیش‌گزیده، .Nm sudo وقایع را از طریق syslog ثبت می‌کند. .It mailerflags پرچم‌هایی که هنگام فراخوانی میلر استفاده می‌شوند. پیش‌فرض: .Fl t . .It mailerpath مسیر برنامهٔ ارسال ایمیل برای فرستادن هشدارهای ایمیلی (جهت جلوگیری از ارسال ایمیل توسط .Nm sudo نفی شود). پیش‌فرض مسیر sendmail در زمان پیکربندی و ساخت است. .It mailfrom نشانی مورد استفاده در بخش .Dq from هنگام ارسال ایمیل‌های خطا و هشدار. برای جلوگیری از تفسیر علامت .Ql @ توسط .Nm sudo ، نشانی باید در گیومه دوتایی .Pq \&"" قرار گیرد. پیش‌فرض نام کاربری است که .Nm sudo را اجرا کرده است. .It mailto نشانی مقصد برای ارسال ایمیل‌های خطا و هشدار (جهت جلوگیری از ارسال ایمیل توسط .Nm sudo نفی شود). برای جلوگیری از تفسیر علامت .Ql @ توسط .Nm sudo ، نشانی باید در گیومه دوتایی .Pq \&"" قرار گیرد. پیش‌فرض root است. .It rlimit_as حداکثر اندازهٔ مجاز برای رشد فضای آدرس فرایند (به بایت)، در صورت پشتیبانی توسط سیستم‌عامل. برای اطلاعات بیشتر به .Sx "Resource limits" مراجعه کنید. .It rlimit_core حداکثر اندازهٔ مجاز برای ایجاد پروندهٔ core dump (به بایت). برای اطلاعات بیشتر به .Sx "Resource limits" مراجعه کنید. پیش‌فرض 0 است (هیچ core dumpای ایجاد نمی‌شود). .It rlimit_cpu حداکثر زمان پردازنده که فرایند مجاز به مصرف آن است (به ثانیه). برای اطلاعات بیشتر به .Sx "Resource limits" مراجعه کنید. .It rlimit_data حداکثر اندازهٔ بخش داده‌ها (data segment) برای فرایند (به بایت). برای اطلاعات بیشتر به .Sx "Resource limits" مراجعه کنید. .It rlimit_fsize حداکثر اندازهٔ پرونده‌ای که فرایند مجاز به ایجاد آن است (به بایت). برای اطلاعات بیشتر به .Sx "Resource limits" مراجعه کنید. .It rlimit_locks حداکثر تعداد قفل‌هایی که فرایند مجاز به برقراری آن است، در صورت پشتیبانی توسط سیستم‌عامل. برای اطلاعات بیشتر به .Sx "Resource limits" مراجعه کنید. .It rlimit_memlock حداکثر اندازه‌ای که فرایند مجاز به قفل کردن در حافظه است (به بایت)، در صورت پشتیبانی توسط سیستم‌عامل. برای اطلاعات بیشتر به .Sx "Resource limits" مراجعه کنید. .It rlimit_nofile حداکثر تعداد پرونده‌هایی که فرایند مجاز به باز نگه داشتن آن‌ها است. برای اطلاعات بیشتر به .Sx "Resource limits" مراجعه کنید. .It rlimit_nproc حداکثر تعداد فرایندهایی که کاربر مجاز به اجرای هم‌زمان آن‌ها است. برای اطلاعات بیشتر به .Sx "Resource limits" مراجعه کنید. .It rlimit_rss حداکثر اندازه‌ای که اندازهٔ مقیم در حافظه (resident set size) فرایند می‌تواند رشد کند (به بایت). برای اطلاعات بیشتر به .Sx "Resource limits" مراجعه کنید. .It rlimit_stack حداکثر اندازه‌ای که پشتهٔ فرایند می‌تواند رشد کند (به بایت). برای اطلاعات بیشتر به .Sx "Resource limits" مراجعه کنید. .It restricted_env_file گزینهٔ .Em restricted_env_file مسیر کامل فایلی را مشخص می‌کند که شامل متغیرهایی است که باید در محیط برنامهٔ در حال اجرا مقداردهی شوند. ورودی‌های این فایل باید به شکل .Ql VARIABLE=value یا .Ql export VARIABLE=value . باشند. مقدار می‌تواند به صورت اختیاری درون کوتیشن تکی یا جفتی قرار گیرد. متغیرهای این فایل تنها در صورتی اضافه می‌شوند که متغیر از قبل در محیط وجود نداشته باشد. برخلاف .Em env_file ، محتوای این فایل مورد اعتماد نیست و به روشی مشابه محیط کاربر فراخواننده پردازش می‌شود. اگر .Em env_reset فعال باشد، متغیرهای فایل تنها در صورتی اضافه می‌شوند که با یکی از فهرست‌های .Em env_check یا .Em env_keep همخوانی داشته باشند. اگر .Em env_reset غیرفعال باشد، متغیرهای درون فایل تا زمانی که با فهرست .Em env_delete مطابقت نداشته باشند، اضافه خواهند شد. در هر دو حالت، محتوای .Em restricted_env_file پیش از محتوای .Em env_file پردازش می‌شود. .It runchroot در صورت تنظیم، .Nm sudo از این مقدار به عنوان دایرکتوری ریشه هنگام اجرای دستور استفاده می‌کند. مقدار ویژهٔ .Dq * به کاربر اجازه می‌دهد تا دایرکتوری ریشه را از طریق گزینهٔ .Fl R در .Nm sudo مشخص کند. برای جزئیات بیشتر بخش .Sx Chroot_Spec را ببینید. .Pp تنها در صورتی می‌توان از .Em runchroot به عنوان تنظیم Defaults ویژهٔ دستور استفاده کرد که دستور با مسیر یکسان هم در داخل و هم خارج از محیط chroot وجود داشته باشد. این محدودیت برای تنظیمات Defaults سراسری، میزبان یا مبتنی بر کاربر یا برای یک .Em Cmnd_Spec که شامل .Em Chroot_Spec باشد، اعمال نمی‌شود. .Pp این تنظیم فقط در نسخهٔ 1.9.3 یا بالاتر پشتیبانی می‌شود. .It runcwd در صورت تنظیم، .Nm sudo از این مقدار به عنوان دایرکتوری کاری هنگام اجرای دستور استفاده خواهد کرد. مقدار ویژهٔ .Dq * به کاربر اجازه می‌دهد دایرکتوری کاری را از طریق گزینهٔ .Fl D در .Nm sudo مشخص کند. برای جزئیات بیشتر بخش .Sx Chdir_Spec را ببینید. .Pp این تنظیم فقط در نسخهٔ 1.9.3 یا بالاتر پشتیبانی می‌شود. .It secure_path در صورت تنظیم، .Nm sudo از این مقدار به جای متغیر محیطیِ .Ev PATH کاربر استفاده خواهد کرد. این گزینه می‌تواند برای بازنشانی .Ev PATH به یک مقدار معتبر و شناخته‌شده شامل دایرکتوری‌های دستورات مدیر سیستم مانند .Pa /usr/sbin استفاده شود. .Pp کاربران حاضر در گروه مشخص‌شده توسط گزینهٔ .Em exempt_group تحت تأثیر .Em secure_path قرار نمی‌گیرند. این گزینه به صورت پیش‌فرض تنظیم نشده است. .It syslog فسیلیتی Syslog در صورتی که از syslog برای ثبت وقایع استفاده می‌شود (نفی شود تا ثبت وقایع syslog غیرفعال گردد). پیش‌فرض authpriv است. .Pp تسهیلات syslog زیر پشتیبانی می‌شوند: .Sy authpriv (اگر سیستم‌عامل شما از آن پشتیبانی کند)، .Sy auth , .Sy daemon , .Sy user , .Sy local0 , .Sy local1 , .Sy local2 , .Sy local3 , .Sy local4 , .Sy local5 , .Sy local6 , و .Sy local7 . .It syslog_badpri اولویت syslog مورد استفاده هنگامی که کاربر مجاز به اجرای دستور نیست یا هنگامی که احراز هویت ناموفق است. پیش‌فرض alert است. .Pp اولویت‌های syslog زیر پشتیبانی می‌شوند: .Sy alert , .Sy crit , .Sy debug , .Sy emerg , .Sy err , .Sy info , .Sy notice , .Sy warning , و .Sy none . نفی این گزینه یا تنظیم مقدار آن به .Sy none ثبت گزارش دستورهای ناموفق را غیرفعال می‌کند. .It syslog_goodpri اولویت syslog مورد استفاده هنگامی که کاربر مجاز به اجرای دستور است و احراز هویت موفقیت‌آمیز است. پیش‌فرض notice است. .Pp برای فهرست اولویت‌های syslog پشتیبانی‌شده به .Em syslog_badpri مراجعه کنید. نفی این گزینه یا تنظیم مقدار آن به .Sy none ثبت گزارش دستورهای موفق را غیرفعال می‌کند. .It verifypw این گزینه مشخص می‌کند چه زمانی هنگام اجرای .Nm sudo توسط کاربر با گزینهٔ .Fl v نیاز به وارد کردن گذرواژه خواهد بود. مقدارهای ممکن آن عبارتند از: .Bl -tag -width 6n .It all تمام ورودی‌های کاربر در پروندهٔ .Em sudoers برای میزبان فعلی باید دارای پرچم .Dv NOPASSWD باشند تا از وارد کردن گذرواژه صرف‌نظر شود. .It always کاربر برای استفاده از گزینهٔ .Fl v همواره باید گذرواژه وارد کند. .It any حداقل یکی از ورودی‌های کاربر در پروندهٔ .Em sudoers برای میزبان فعلی باید دارای پرچم .Dv NOPASSWD باشد تا از وارد کردن گذرواژه صرف‌نظر شود. .It never کاربر برای استفاده از گزینهٔ .Fl v هرگز نیازی به وارد کردن گذرواژه ندارد. .El .Pp اگر مقداری مشخص نشود، مقدار .Em all ضمنی فرض می‌شود. نفی این گزینه موجب استفاده از مقدار .Em never می‌شود. مقدار پیش‌فرض عبارت است از .Em all . .El .Pp .Sy فهرست‌هایی که می‌توان در سیاق بولی استفاده کرد : .Bl -tag -width 16n .It env_check متغیرهای محیطی که باید از محیط کاربر حذف شوند مگر اینکه .Dq امن . در نظر گرفته شوند. برای تمام متغیرها به‌جز .Ev TZ , .Dq امن بدین معنی است که مقدار متغیر شامل هیچ‌یک از نویسه‌های .Ql % یا .Ql / نباشد. این قابلیت می‌تواند برای محافظت در برابر آسیب‌پذیری‌های قالب‌بندی سبک printf در برنامه‌های ضعیف نوشته‌شده استفاده شود. متغیر .Ev TZ در صورت برقراری هر یک از موارد زیر ناامن در نظر گرفته می‌شود: .Bl -bullet -width 1n .It از یک نام مسیر کامل تشکیل شده باشد، که به‌صورت اختیاری با دونقطه .Pq Ql :\& , آغاز شده و با مکان دایرکتوری .Pa zoneinfo مطابقت نداشته باشد. .It شامل جزء مسیر .Pa .. باشد. .It شامل فاصله یا نویسه‌های غیرقابل چاپ باشد. .It طولانی‌تر از مقدار .Dv PATH_MAX . باشد. .El .Pp آرگومان می‌تواند یک فهرست جداشده با فاصله درون گیومه یا یک مقدار تکی بدون گیومه باشد. این فهرست می‌تواند به ترتیب با استفاده از عملگرهای .Ql = , .Ql += , .Ql -= , و .Ql \&! جایگزین، افزوده، حذف یا غیرفعال شود. صرف‌نظر از اینکه گزینهٔ .Em env_reset فعال یا غیرفعال باشد، متغیرهای مشخص‌شده توسط .Em env_check در صورت قبولی در بررسی فوق، در محیط حفظ خواهند شد. فهرست سراسری متغیرهای محیطی جهت بررسی زمانی نمایش داده می‌شود که .Nm sudo توسط .Sy root همراه با گزینهٔ .Fl V اجرا شود. .It env_delete متغیرهای محیطی که باید از محیط کاربر حذف شوند هنگامی که گزینهٔ .Em env_reset در حال اجرا نیست. آرگومان می‌تواند یک فهرست جداشده با فاصله درون گیومه یا یک مقدار تکی بدون گیومه باشد. این فهرست می‌تواند به ترتیب با استفاده از عملگرهای .Ql = , .Ql += , .Ql -= , و .Ql \&! جایگزین، افزوده، حذف یا غیرفعال شود. فهرست سراسری متغیرهای محیطی جهت حذف زمانی نمایش داده می‌شود که .Nm sudo توسط .Sy root همراه با گزینهٔ .Fl V اجرا شود. بسیاری از سیستم‌عامل‌ها متغیرهای بالقوه خطرناک را از محیط هر فرایند set-user-ID (مانند .Nm sudo ) . حذف خواهند کرد. .It env_keep متغیرهای محیطی که هنگام فعال بودن گزینهٔ .Em env_reset در محیط کاربر حفظ می‌شوند. این گزینه امکان کنترل دقیق بر روی محیطی که فرایندهای ایجادشده توسط .Nm sudo Ns -spawned دریافت خواهند کرد را فراهم می‌کند. آرگومان می‌تواند یک فهرست جداشده با فاصله درون گیومه دوگانه یا یک مقدار واحد بدون گیومه دوگانه باشد. این فهرست می‌تواند به‌ترتیب با استفاده از عملگرهای .Ql = , .Ql += , .Ql -= , و .Ql \&! جایگزین شود، به آن افزوده شود، از آن حذف شود یا غیرفعال گردد. فهرست سراسری متغیرهایی که باید حفظ شوند، هنگام اجرای .Nm sudo توسط .Sy root همراه با گزینهٔ .Fl V نمایش داده می‌شود. .Pp حفظ متغیر محیطی .Ev HOME دارای پیامدهای امنیتی است، زیرا بسیاری از برنامه‌ها هنگام جستجو برای فایل‌های پیکربندی یا داده از آن استفاده می‌کنند. افزودن .Ev HOME به .Em env_keep ممکن است به کاربر امکان اجرای دستورات نامحدود از طریق .Nm sudo را بدهد و اکیداً منع می‌شود. کاربرانی که مایل به ویرایش فایل‌ها با .Nm sudo هستند باید به‌جای فراخوانی مستقیم ویرایشگر، .Nm sudoedit (یا .Nm sudo Fl e ) را اجرا کنند تا به پیکربندی معمول ویرایشگر خود دسترسی داشته باشند. .It log_servers فهرستی از یک یا چند سرور برای استفاده در ذخیره‌سازی راه‌دور گزارش رویداد و I/O، جداشده با فاصله. سرورهای گزارش باید در حال اجرای .Nm sudo_logsrvd یا سرویس دیگری باشند که پروتکل شرح‌داده‌شده در .Xr sudo_logsrv.proto 5 . را پیاده‌سازی می‌کند. .Pp نشانی‌های سرور باید به شکل .Dq host Ns Oo : Ns port Oc Ns Op (tls) . باشند. بخش میزبان می‌تواند یک نام میزبان، یک نشانی IPv4 یا یک نشانی IPv6 درون براکت باشد. .Pp اگر پرچم اختیاری .Em tls وجود داشته باشد، اتصال با امنیت لایهٔ انتقال (TLS) نسخهٔ 1.2 یا 1.3 ایمن خواهد شد. نسخه‌های پیش از 1.2 پروتکل TLS پشتیبانی نمی‌شوند. .Pp در صورت تعیین پورت، این مقدار می‌تواند یک شماره پورت یا یک نام سرویس شناخته‌شده طبق تعریف پایگاه‌دادهٔ نام سرویس‌های سیستم باشد. در صورت عدم تعیین پورت، از پورت 30343 برای اتصال‌های متنی ساده و از پورت 30344 برای اتصال‌های TLS استفاده خواهد شد. .Pp هنگام تنظیم .Em log_servers ، داده‌های گزارش رویداد هم به‌صورت محلی (تنظیمات .Em syslog و .Em log_file را ببینید) و هم از راه دور ثبت می‌شوند، اما داده‌های گزارش I/O فقط از راه دور ثبت خواهند شد. در صورت تعیین چندین میزبان، تلاش برای برقراری اتصال به آن‌ها به ترتیب معکوس انجام می‌شود. اگر هیچ سرور گزارشی در دسترس نباشد، کاربر قادر به اجرای دستور نخواهد بود مگر اینکه پرچم .Em ignore_iolog_errors (در صورت فعال بودن گزارش‌گیری I/O) یا پرچم .Em ignore_log_errors (در صورت غیرفعال بودن گزارش‌گیری I/O) تنظیم شده باشد. به همین ترتیب، اگر اتصال به سرور گزارش در حین اجرای .Nm sudo قطع شود، دستور متوقف خواهد شد مگر اینکه پرچم .Em ignore_iolog_errors (در صورت فعال بودن گزارش‌گیری I/O) یا پرچم .Em ignore_log_errors (در صورت غیرفعال بودن گزارش‌گیری I/O) تنظیم شده باشد. .Pp این تنظیم فقط در نسخهٔ 1.9.0 یا بالاتر پشتیبانی می‌شود. .It passprompt_regex فهرستی از عبارت‌های باقاعده گسترده POSIX برای تطبیق اعلان‌های گذرواژه در خروجی پایانه. به‌عنوان یک قابلیت افزوده، اگر عبارت باقاعده با .Dq (?i) , آغاز شود، تطبیق بدون حساسیت به بزرگی و کوچکی حروف انجام می‌شود. طول هر عبارت باقاعده به ۱۰۲۴ نویسه محدود است. این گزینه تنها زمانی استفاده می‌شود که .Em log_passwords غیرفعال شده باشد. مقدار پیش‌فرض: .Dq [Pp]assword[: ]* .Pp این تنظیم فقط در نگارش 1.9.10 یا بالاتر پشتیبانی می‌شود. .El .Sh "پلاگین‌های تأمین‌کننده گروه (GROUP PROVIDER PLUGINS)" پلاگین .Nm از رابط پلاگین اختصاصی خود برای ممکن ساختن جستجوی گروه‌های غیر یونیکسی پشتیبانی می‌کند تا بتواند منبع گروهی غیر از پایگاه‌داده استاندارد گروه یونیکس را پرس‌وجو کند. از این قابلیت می‌توان برای پیاده‌سازی پشتیبانی از نحو .Em nonunix_group که پیش‌تر شرح داده شد استفاده کرد. .Pp پلاگین‌های تأمین‌کننده گروه از طریق تنظیم .Em group_plugin مشخص می‌شوند. آرگومان .Em group_plugin باید شامل مسیر پلاگین، به‌صورت مسیر کامل یا نسبی نسبت به دایرکتوری .Pa /usr/libexec/sudo و به دنبال آن هرگونه گزینه‌های پیکربندی مورد نیاز پلاگین باشد. این گزینه‌ها (در صورت تعیین) به تابع مقداردهی اولیه پلاگین ارسال خواهند شد. در صورت وجود گزینه‌ها، رشته باید درون علامت نقل‌قول جفتی .Pq \&"" قرار گیرد. .Pp پلاگین‌های تأمین‌کننده گروه زیر به‌طور پیش‌فرض نصب شده‌اند: .Bl -tag -width 4n .It group_file پلاگین .Em group_file از یک فایل گروه جایگزین که از نحوی مشابه فایل .Pa /etc/group استفاده می‌کند پشتیبانی می‌نماید. مسیر فایل گروه باید به‌عنوان یک گزینه برای پلاگین مشخص شود. برای نمونه، اگر فایل گروه مورد استفاده .Pa /etc/sudo-group باشد: .Bd -literal Defaults group_plugin="group_file.so /etc/sudo-group" .Ed .It system_group پلاگین .Em system_group از جستجوی گروه‌ها از طریق توابع استاندارد کتابخانه C یعنی .Xr getgrnam 3 و .Xr getgrid 3 پشتیبانی می‌کند. این پلاگین در مواردی کاربرد دارد که کاربر به گروه‌هایی تعلق دارد که در بردار گروه‌های تکمیلی کاربر موجود نیستند. این پلاگین گزینه‌ای نمی‌پذیرد: .Bd -literal Defaults group_plugin=system_group.so .Ed .El .Pp رابط برنامه‌نویسی کاربردی (API) پلاگین تأمین‌کننده گروه با جزئیات در .Xr sudo_plugin 5 شرح داده شده است. .Sh "ثبت وقایع و رویدادها (EVENT LOGGING)" .Nm می‌تواند وقایع را در قالب JSON یا .Em sudo ثبت کند؛ این بخش قالب لاگ .Em sudo را شرح می‌دهد. بسته به پیکربندی .Em sudoers ، .Nm می‌تواند وقایع را از طریق .Xr syslog 3 , در یک پرونده لاگ محلی، یا هر دو ثبت کند. قالب لاگ در هر دو حالت تقریباً یکسان است. هر نویسه کنترلی موجود در داده‌های لاگ به صورت هشت‌هشتی (octal) با یک نویسه پیشین .Ql # قالب‌بندی می‌شود. برای نمونه، یک نویسه تب افقی به صورت .Ql #011 و بازگشت به ابتدای سطر (CR) به صورت .Ql #015 . ذخیره می‌شود. علاوه بر این، نویسه‌های فاصله در مسیر دستور به صورت .Ql #040 . ذخیره می‌شوند. آرگومان‌های خط فرمان که حاوی فاصله هستند، درون نقل‌قول تکی .Pq '' . قرار می‌گیرند. این امر تمایز چندین آرگومان خط فرمان از یک آرگومان حاوی فاصله را ممکن می‌سازد. نویسه‌های نقل‌قول تکی و بک‌اسلش واقعی .Pq Ql \e در آرگومان‌های خط فرمان با یک بک‌اسلش گریز داده می‌شوند (اسکیپ می‌شوند). .Ss "ورودی‌های لاگ دستورهای پذیرفته‌شده" دستورهایی که sudo اجرا می‌کند با قالب زیر ثبت می‌شوند (برای خوانایی به چند سطر تقسیم شده است): .Bd -literal -offset 4n date hostname progname: username : TTY=ttyname ; CHROOT=chroot ; \e PWD=cwd ; USER=runasuser ; GROUP=runasgroup ; TSID=logid ; \e ENV=env_vars COMMAND=command .Ed .Pp فیلدها به شرح زیر هستند: .Bl -tag -width 12n .It date تاریخ اجرای دستور. معمولاً در این قالب است: .Dq MMM, DD, HH:MM:SS . در صورت ثبت وقایع از طریق .Xr syslog 3 , قالب واقعی تاریخ توسط دیمن syslog کنترل می‌شود. اگر لاگ در یک پرونده ذخیره شود و گزینه .Em log_year فعال باشد، تاریخ شامل سال نیز خواهد بود. .It hostname نام میزبانی که .Nm sudo روی آن اجرا شده است. این فیلد تنها هنگام ثبت وقایع از طریق .Xr syslog 3 . وجود دارد. .It progname نام برنامه، معمولاً .Em sudo یا .Em sudoedit . این فیلد تنها هنگام ثبت وقایع از طریق .Xr syslog 3 . وجود دارد. .It username نام کاربری کاربری که .Nm sudo . را اجرا کرده است. .It ttyname نام کوتاه ترمینال (برای نمونه .Dq console , .Dq tty01 , یا .Dq pts/0 ) که .Nm sudo روی آن اجرا شده است، یا .Dq unknown اگر هیچ ترمینالی وجود نداشته باشد. .It chroot شاخه ریشه (root) که دستور در آن اجرا شده است، در صورت تعیین شدن. .It cwd شاخه کاری فعلی که .Nm sudo در آن اجرا شده است. .It runasuser کاربری که دستور با هویت او اجرا شده است. .It runasgroup گروهی که دستور با هویت آن اجرا شده است، در صورتی که در خط فرمان مشخص شده باشد. .It logid یک شناسه لاگ I/O که می‌تواند برای بازپخش خروجی دستور به کار رود. این فیلد تنها زمانی وجود دارد که گزینه .Em log_input یا .Em log_output فعال باشد. .It env_vars فهرستی از متغیرهای محیطی مشخص‌شده در خط فرمان، در صورت تعیین شدن. .It command دستور واقعی اجراشده، شامل تمامی آرگومان‌های خط فرمان. .El .Pp پیام‌ها با استفاده از لوکال تعیین‌شده توسط .Em sudoers_locale ثبت می‌شوند، که مقدار پیش‌فرض آن لوکال .Ql C است. .Ss "ورودی‌های لاگ دستورهای ردشده" اگر کاربر مجاز به اجرای دستور نباشد، دلیل رد شدن پس از نام کاربری می‌آید. دلایل احتمالی عبارتند از: .Bl -tag -width 4 .It user NOT in sudoers نام کاربر در پروندهٔ .Em sudoers وجود ندارد. .It user NOT authorized on host نام کاربر در پروندهٔ .Em sudoers آمده است ولی مجاز به اجرای دستورها روی این میزبان نیست. .It command not allowed نام کاربر در پروندهٔ .Em sudoers برای این میزبان آمده است، اما مجاز به اجرای دستور مشخص‌شده نیست. .It 3 incorrect password attempts کاربر پس از ۳ بار تلاش موفق به وارد کردن گذرواژه نشد. تعداد تلاش‌های واقعی بر اساس تعداد دفعات ناموفق و مقدار گزینهٔ .Em passwd_tries متغیر خواهد بود. .It a password is required گزینهٔ .Fl n مشخص شده بود ولی به گذرواژه نیاز بود. .It sorry, you are not allowed to set the following environment variables کاربر در خط فرمان متغیرهای محیطی‌ای را مشخص کرده که توسط .Em sudoers مجاز شناخته نشده‌اند. .El .Ss "ورودی‌های لاگ خطا" در صورت وقوع خطا، .Nm پیامی را ثبت کرده و در بیشتر موارد، پیامی با رایانامه برای مدیر سیستم ارسال می‌کند. خطاهای احتمالی عبارتند از: .Bl -tag -width 4 .It parse error in /etc/sudoers near line N .Nm هنگام تجزیهٔ پروندهٔ مشخص‌شده با خطا مواجه شد. در برخی موارد، بسته به نوع خطا ممکن است خطای واقعی یک خط بالاتر یا پایین‌تر از شماره خط ذکرشده باشد. .It problem with defaults entries پروندهٔ .Em sudoers شامل یک یا چند تنظیم ناشناختهٔ Defaults است. این موضوع مانع اجرای .Nm sudo نمی‌شود، اما پروندهٔ .Em sudoers باید با استفاده از .Nm visudo بررسی شود. .It timestamp owner (username): \&No such user مالک شاخهٔ مُهر زمانی، همان‌طور که توسط تنظیم .Em timestampowner مشخص شده است، در پایگاه‌دادهٔ گذرواژه یافت نشد. .It unable to open/read /etc/sudoers پروندهٔ .Em sudoers برای خواندن باز نشد. این حالت زمانی رخ می‌دهد که پروندهٔ .Em sudoers روی یک سامانه پروندهٔ ریموت قرار دارد که user-ID 0 را به مقدار دیگری نگاشت می‌کند. به‌طور معمول، .Nm تلاش می‌کند پروندهٔ .Em sudoers را با استفاده از مجوزهای گروه باز کند تا از این مشکل جلوگیری کند. مالکیت .Pa /etc/sudoers را تغییر دهید یا آرگومانی مانند .Dq sudoers_uid=N (که در آن .Sq N همان user-ID مالک پروندهٔ .Em sudoers است) را به انتهای خط .Nm .Em Plugin در پروندهٔ .Xr sudo.conf 5 اضافه کنید. .It unable to open /etc/sudoers پروندهٔ .Pa /etc/sudoers وجود ندارد. .It /etc/sudoers is not a regular file پروندهٔ .Pa /etc/sudoers وجود دارد ولی یک پروندهٔ معمولی یا پیوند نمادین نیست. .It /etc/sudoers is owned by uid N, should be 0 پروندهٔ .Em sudoers مالک نادرستی دارد. اگر می‌خواهید مالک پروندهٔ .Em sudoers را تغییر دهید، .Dq sudoers_uid=N (که در آن .Sq N شناسهٔ کاربری مالک پروندهٔ .Em sudoers است) را به خط .Nm .Em Plugin در پروندهٔ .Xr sudo.conf 5 بیفزایید. .It /etc/sudoers is world writable مجوزهای پروندهٔ .Em sudoers به همهٔ کاربران اجازهٔ نوشتن در آن را می‌دهد. پروندهٔ .Em sudoers نباید همگانی‌نوشتنی باشد، حالت پیش‌گزیدهٔ پرونده 0440 است (خواندنی برای مالک و گروه، بدون اجازهٔ نوشتن برای هیچ‌کس). حالت پیش‌گزیده می‌تواند از طریق گزینهٔ .Dq sudoers_mode در خط .Nm .Em Plugin در پروندهٔ .Xr sudo.conf 5 تغییر کند. .It /etc/sudoers is owned by gid N, should be 1 پروندهٔ .Em sudoers مالکیت گروهی نادرستی دارد. اگر می‌خواهید مالکیت گروهی پروندهٔ .Em sudoers را تغییر دهید، .Dq sudoers_gid=N (که در آن .Sq N شناسهٔ گروهی مالک پروندهٔ .Em sudoers است) را به خط .Nm .Em Plugin در پروندهٔ .Xr sudo.conf 5 بیفزایید. .It unable to open /run/sudo/ts/username .Nm نتوانست پروندهٔ برچسب زمان کاربر را بخواند یا ایجاد کند. این وضعیت زمانی رخ می‌دهد که .Em timestampowner روی کاربری غیر از .Sy root تنظیم شده باشد و حالت دسترسی .Pa /run/sudo برای گروه یا دیگران قابل جست‌وجو نباشد. حالت پیش‌گزیده برای .Pa /run/sudo 0711 است. .It unable to write to /run/sudo/ts/username .Nm نتوانست در پروندهٔ برچسب زمان کاربر بنویسد. .It /run/sudo/ts is owned by uid X, should be Y شاخهٔ برچسب زمان متعلق به کاربری غیر از .Em timestampowner . است. این وضعیت زمانی رخ می‌دهد که مقدار .Em timestampowner تغییر کرده باشد. .Nm شاخهٔ برچسب زمان را تا زمان تصحیح مالک نادیده خواهد گرفت. .It /run/sudo/ts is group writable شاخهٔ برچسب زمان برای گروه نوشتنی است؛ این شاخه تنها باید توسط .Em timestampowner . نوشتنی باشد. حالت پیش‌گزیده برای شاخهٔ برچسب زمان 0700 است. .Nm شاخهٔ برچسب زمان را تا زمان تصحیح حالت دسترسی نادیده خواهد گرفت. .El .Ss "نکاتی درباره ثبت وقایع از طریق syslog" به‌طور پیش‌فرض، ثبت وقایع توسط .Nm انجام می‌شود از طریق .Xr syslog 3 . فیلدهای .Em date , .Em hostname , و .Em progname توسط تابع .Xr syslog 3 سیستم افزوده می‌شوند، نه توسط خود .Nm به‌تنهایی. از این رو، قالب آن‌ها ممکن است در سیستم‌های گوناگون متفاوت باشد. .Pp بیشینه اندازه پیام‌های syslog از سیستمی به سیستم دیگر متفاوت است. از تنظیم .Em syslog_maxlen می‌توان برای تغییر بیشینه اندازه پیام syslog از مقدار پیش‌فرض ۹۸۰ بایت استفاده کرد. برای اطلاعات بیشتر، رجوع کنید به توضیحات .Em syslog_maxlen . .Ss "نکاتی درباره ثبت وقایع در پرونده" اگر گزینه .Em logfile تنظیم شده باشد، .Nm وقایع را در پرونده‌ای محلی ثبت می‌کند، مانند .Pa /var/log/sudo . هنگام ثبت در پرونده، .Nm قالبی را به کار می‌برد مشابه با .Xr syslog 3 , همراه با چند تفاوت مهم: .Bl -enum .It فیلد .Em progname وجود ندارد. .It .Em hostname تنها در صورتی ثبت می‌شود که گزینه .Em log_host فعال باشد. .It تاریخ شامل سال نمی‌شود، مگر اینکه گزینه .Em log_year فعال باشد. .It خطوطی که طولانی‌تر از .Em loglinelen نویسه (به‌طور پیش‌فرض ۸۰) باشند، شکسته شده و در خط بعدی با ۴ نویسه تورفتگی ادامه می‌یابند. این امر خواندن مدخل‌ها را برای انسان آسان‌تر می‌کند، اما استفاده از .Xr grep 1 روی پرونده‌های گزارش را دشوارتر می‌سازد. اگر گزینه .Em loglinelen روی 0 تنظیم شود (یا نفی شود با .Ql \&! ) , شکستن خطوط غیرفعال خواهد شد. .El .Sh "ثبت ورودی/خروجی (I/O LOGGING)" هنگامی که ثبت ورودی/خروجی فعال باشد، .Nm sudo دستور را در یک شبه‌ترمینال اجرا کرده و بسته به اینکه کدام پرچم‌های .Nm فعال باشند، ورودی و/یا خروجی کاربر را ثبت می‌کند. پنج نوع متمایز از ورودی/خروجی برای ثبت وجود دارد که هر یک دارای یک پرچم متناظر در .Nm است. .Bl -column "standard output" "log_output" "command output displayed to the screen" .It Sy نوع Ta Sy پرچم Ta Sy شرح .It ورودی ترمینال Ta log_ttyin Ta کلیدهای فشرده‌شده توسط کاربر .It خروجی ترمینال Ta log_ttyout Ta خروجی دستور نمایش‌یافته در صفحه .It ورودی استاندارد Ta log_stdin Ta ورودی از یک لوله یا یک پرونده .It خروجی استاندارد Ta log_stdout Ta خروجی به یک لوله یا یک پرونده .It خطای استاندارد Ta log_stderr Ta خروجی به یک لوله یا یک پرونده .El .Pp علاوه بر پرچم‌های شرح‌داده‌شده در بالا، پرچم .Em log_input و برچسب دستور .Dv LOG_INPUT هر دو پرچم .Em log_ttyin و .Em log_stdin را فعال می‌کنند. پرچم .Em log_output و برچسب دستور .Dv LOG_OUTPUT پرچم‌های .Em log_ttyout ، .Em log_stdout و .Em log_stderr را تنظیم می‌کنند. .Pp برای دریافت ورودی و خروجی ترمینال، .Nm sudo دستور را در یک شبه‌ترمینال اجرا کرده و ورودی و خروجی را پیش از ارسال به کاربر ثبت می‌کند. برای دریافت ورودی استاندارد، خروجی استاندارد یا خطای استاندارد، .Nm sudo از یک لوله برای قرار گرفتن میان جریان ورودی یا خروجی استفاده می‌کند و ورودی/خروجی را پیش از ارسال به سر دیگر لوله ثبت می‌نماید. .Pp ورودی/خروجی می‌تواند روی دستگاه محلی یا روی یک کارساز گزارش دوردست ثبت شود. برای گزارش‌های محلی، ورودی/خروجی در شاخه‌ای که توسط گزینه .Em iolog_dir مشخص شده است .Po به‌طور پیش‌گزیده .Pa /var/log/sudo-io .Pc و با استفاده از شناسه نشست یکتایی که در سطر گزارش .Nm sudo با پیشوند .Ql TSID= قرار دارد ثبت می‌شود. گزینه .Em iolog_file می‌تواند برای واپایش قالب شناسه نشست استفاده شود. برای گزارش‌های دوردست، تنظیم .Em log_servers برای تعیین یک یا چند کارساز گزارش که .Nm sudo_logsrvd یا کارساز دیگری که پروتکل شرح‌داده‌شده در .Xr sudo_logsrv.proto 5 را پیاده‌سازی کرده است را اجرا می‌کنند، استفاده می‌شود. .Ss "دام‌های ثبت ورودی/خروجی" هنگام ثبت ورودی استاندارد، هر داده‌ای که به ورودی استاندارد فرستاده شود مصرف خواهد شد؛ صرف‌نظر از اینکه دستوری که از طریق .Nm sudo اجرا می‌شود در حال خواندن ورودی استاندارد باشد یا خیر. این مسئله ممکن است هنگام استفاده از .Nm sudo در یک اسکریپت پوسته که انتظار پردازش ورودی استاندارد را دارد نتایج غیرمنتظره‌ای ایجاد کند. برای نمونه، با در نظر گرفتن اسکریپت پوسته زیر: .Bd -literal -offset 4n #!/bin/sh sudo echo testing echo done .Ed .Pp اگر اسکریپت به عنوان آرگومان به پوسته داده شود، طبق انتظار عمل خواهد کرد: .Bd -literal -offset 4n $ sh test.sh testing done .Ed .Pp اما اگر اسکریپت از طریق ورودی استاندارد به شل داده شود، دستور .Ql sudo echo testing باقی‌مانده اسکریپت را مصرف خواهد کرد. این بدان معناست که عبارت .Ql echo done هرگز اجرا نمی‌شود. .Bd -literal -offset 4n $ sh -s < test.sh testing .Ed .Pp چندین راه برای دور زدن این مشکل وجود دارد: .Bl -enum .It تغییر مسیر ورودی استاندارد از .Pa /dev/null هنگام اجرای دستوری با .Nm sudo که نیازی به خواندن ورودی استاندارد ندارد. .Bd -literal -offset 4n sudo echo testing < /dev/null .Ed .It ارسال اسکریپت به شل با نام مسیر به‌جای ورودی استاندارد. .Bd -literal -offset 4n sh test.sh .Ed .It غیرفعال‌سازی ثبت لاگ ورودی استاندارد برای دستوراتی که نیازی به خواندن ورودی استاندارد ندارند. .Bd -literal -offset 4n Defaults!/bin/echo !log_stdin .Ed .El .Pp بسته به دستور، ممکن است ثبت لاگ ورودی استاندارد یا خروجی استاندارد مطلوب نباشد. به عنوان مثال، ثبت لاگ I/O دستوراتی که حجم زیادی از داده را از طریق خروجی استاندارد یا ورودی استاندارد ارسال یا دریافت می‌کنند مانند .Xr rsync 1 و .Xr tar 1 می‌تواند فایل‌سیستم لاگ را با داده‌های زائد پر کند. غیرفعال کردن ثبت لاگ ورودی استاندارد و خروجی استاندارد برای چنین دستوراتی به صورت زیر امکان‌پذیر است: .Bd -literal -offset 4n Cmnd_Alias COPY_CMDS = /usr/bin/tar, /usr/bin/cpio, /usr/bin/rsync # Log input and output but omit stdin and stdout when copying files. Defaults log_input, log_output Defaults!COPY_CMDS !log_stdin, !log_stdout .Ed .Pp با این حال، توجه داشته باشید که استفاده از فلگ .Em log_input یا تگ دستور .Dv LOG_INPUT همچنین .Em log_stdin . را فعال خواهد کرد. به همین ترتیب، فلگ .Em log_ouput یا تگ دستور .Dv LOG_OUTPUT موجب فعال‌سازی .Em log_stdout و .Em log_stderr. خواهد شد. ترتیب دقیق قوانین ممکن است برای رسیدن به نتایج مورد انتظار شما ضروری باشد. .Ss "قالب لاگ ورودی/خروجی (I/O)" برای هر دو لاگ I/O محلی و راه دور، هر لاگ در یک دایرکتوری جداگانه حاوی پرونده‌های زیر ذخیره می‌شود: .Bl -tag -width "log.json" .It Pa log یک پرونده متنی حاوی اطلاعات مربوط به دستور. خط اول شامل فیلدهای زیر است که با کولن (:) جدا شده‌اند: زمان اجرای دستور، نام کاربری که .Nm sudo , را اجرا کرده، نام کاربر هدف، نام گروه هدف (اختیاری)، ترمینالی که .Nm sudo از آن اجرا شده، و تعداد سطرها و ستون‌های ترمینال. خطوط دوم و سوم شامل دایرکتوری کاری که دستور از آن اجرا شده و نام مسیر خود دستور (همراه با آرگومان‌ها در صورت وجود) می‌باشد. .It Pa log.json یک پرونده با ساختار JSON شامل اطلاعات مربوط به دستور. این پرونده مشابه پرونده .Pa log است، اما حاوی اطلاعات بیشتری بوده و به‌سادگی قابل گسترش است. در صورت وجود، پرونده .Pa log.json توسط .Xr sudoreplay 8 با اولویت نسبت به پرونده .Pa log استفاده خواهد شد. این پرونده ممکن است شامل مؤلفه‌های زیر باشد: .Bl -tag -width 4n .It timestamp یک شیء JSON حاوی زمان اجرای دستور. این مؤلفه شامل دو مقدار است: .Em seconds و .Em nanoseconds . .It columns تعداد ستون‌های ترمینالی که دستور روی آن اجرا شده است، یا صفر در صورتی که ترمینالی وجود نداشته باشد. .It command مسیر کامل دستوری که اجرا شده است. .It lines تعداد سطرهای ترمینالی که دستور روی آن اجرا شده است، یا صفر در صورتی که ترمینالی وجود نداشته باشد. .It runargv یک آرایه JSON نشان‌دهنده بردار آرگومان‌های دستور، به همان صورتی که به فراخوان سیستمی .Xr execve 2 ارسال شده است. .It runenv یک آرایه JSON نشان‌دهنده متغیرهای محیطی دستور، به همان صورتی که به فراخوان سیستمی .Xr execve 2 ارسال شده است. .It rungid شناسه گروهی (GID) که دستور با آن اجرا شده است. این مؤلفه تنها زمانی وجود دارد که کاربر گروهی را در خط فرمان مشخص کرده باشد. .It rungroup نام گروهی که دستور با آن اجرا شده است. این مؤلفه تنها زمانی وجود دارد که کاربر گروهی را در خط فرمان مشخص کرده باشد. .It runuid شناسه کاربری (UID) که دستور با آن اجرا شده است. .It runuser نام کاربری که دستور با آن اجرا شده است. .It submitcwd شاخه کاری جاری در زمانی که .Nm sudo اجرا شد. .It submithost نام میزبانی که دستور روی آن اجرا شده است. .It submituser نام کاربری که دستور را از طریق .Nm sudo . اجرا کرده است. .It ttyname مسیر ترمینالی که کاربر .Nm sudo را از آن فراخوانی کرده است. اگر دستور در یک شبه‌ترمینال اجرا شده باشد، .Em ttyname با ترمینالی که دستور واقعاً در آن اجرا شده است متفاوت خواهد بود. .El .It Pa timing اطلاعات زمان‌بندی مورد استفاده برای بازپخش نشست. هر خط شامل نوع مدخل لاگ I/O و مقدار زمان سپری‌شده از مدخل پیشین، به‌همراه داده‌های اختصاصی آن نوع است. انواع مدخل‌های لاگ I/O و داده‌های اختصاصی متناظر با آن‌ها عبارتند از: .Pp .Bl -tag -width 4n -compact .It 0 ورودی استاندارد، تعداد بایت‌ها در مدخل .It 1 خروجی استاندارد، تعداد بایت‌ها در مدخل .It 2 خطای استاندارد، تعداد بایت‌ها در مدخل .It 3 ورودی ترمینال، تعداد بایت‌ها در مدخل .It 4 خروجی ترمینال، تعداد بایت‌ها در مدخل .It 5 تغییر اندازه پنجره، تعداد سطرهای جدید و ستون‌ها .It 6 سازگاری با اشکال خروجی ترمینال در .Nm sudo 1.8.7 .It 7 تعلیق یا ازسرگیری دستور، سیگنال دریافت‌شده .El .It Pa ttyin ورودی خام از پایانهٔ کاربر، دقیقاً به همان صورت که دریافت شده است. این پرونده تنها در صورتی وجود دارد که پرچم‌های .Em log_input یا .Em log_ttyin تنظیم شده باشند و .Nm sudo از یک پایانه اجرا شده باشد. هیچ پس‌پردازشی انجام نمی‌شود. برای مشاهدهٔ دستی، ممکن است بخواهید نویسه‌های بازگشت به ابتدای سطر (CR) را در گزارش به خط جدید (LF) تبدیل کنید. برای نمونه: .Ql gunzip -c ttyin | tr \&"\er\&" \&"\en\&" .It Pa stdin ورودی استاندارد هنگامی که هیچ پایانه‌ای وجود ندارد، یا ورودی تغییرمسیریافته از یک لوله یا پرونده. این پرونده تنها در صورتی وجود دارد که پرچم‌های .Em log_input یا .Em log_stdin تنظیم شده باشند و ورودی استاندارد به یک پایانه متصل نباشد. .It Pa ttyout خروجی از شبه‌پایانه (آنچه دستور روی صفحه می‌نویسد). پیش از ثبت داده‌ها، پس‌پردازش ویژهٔ پایانه انجام می‌شود. این بدان معناست که برای نمونه، خطوط جدید معمولاً به جفت‌های خط جدید/بازگشت به ابتدای سطر تبدیل می‌شوند و تب‌ها ممکن است به فاصله گسترش یابند. این پرونده تنها در صورتی وجود دارد که پرچم‌های .Em log_output یا .Em log_ttyout تنظیم شده باشند و .Nm sudo از یک پایانه اجرا شده باشد. .It Pa stdout خروجی استاندارد هنگامی که هیچ پایانه‌ای وجود ندارد، یا خروجی تغییرمسیریافته به یک لوله یا پرونده. این پرونده تنها در صورتی وجود دارد که پرچم‌های .Em log_output یا .Em log_stdout تنظیم شده باشند و خروجی استاندارد به یک پایانه متصل نباشد. .It Pa stderr خطای استاندارد هنگامی که هیچ پایانه‌ای وجود ندارد، یا خروجی تغییرمسیریافته به یک لوله یا پرونده. این پرونده تنها در صورتی وجود دارد که پرچم‌های .Em log_output یا .Em log_stderr تنظیم شده باشند و خطای استاندارد به یک پایانه متصل نباشد. .El .Pp تمام پرونده‌ها به جز .Pa log با قالب gzip فشرده می‌شوند، مگر اینکه پرچم .Em compress_io غیرفعال شده باشد. به‌دلیل میان‌گیری (buffering)، معمولاً امکان نمایش بی‌درنگ گزارش‌های I/O در حین اجرای برنامه وجود ندارد. داده‌های گزارش I/O تا زمانی که برنامهٔ اجراشده توسط .Nm sudo خارج نشود یا با یک سیگنال متوقف نگردد، کامل نخواهد بود. از پرچم .Em iolog_flush می‌توان برای غیرفعال کردن میان‌گیری استفاده کرد، که در این حالت داده‌های گزارش I/O به‌محض در دسترس قرار گرفتن روی دیسک نوشته می‌شوند. بخش خروجی یک پروندهٔ گزارش I/O را می‌توان با ابزار .Xr sudoreplay 8 مشاهده کرد، که از آن می‌توان برای فهرست کردن یا جستجوی گزارش‌های موجود نیز استفاده نمود. .Pp ورودی کاربر ممکن است حاوی اطلاعات حساسی مانند گذرواژه‌ها باشد (حتی اگر روی صفحه نمایش داده نشوند)، که به‌صورت رمزنشده در پروندهٔ گزارش ذخیره خواهند شد. در بیشتر موارد، ثبت خروجی دستور از طریق .Em log_output یا .Dv LOG_OUTPUT تنها چیزی است که نیاز خواهد بود. هنگام ثبت گزارش ورودی، غیرفعال کردن پرچم .Em log_passwords را در نظر داشته باشید. .Pp از آنجا که گزارش‌های I/O مربوط به هر نشست در شاخه‌ای جداگانه ذخیره می‌شوند، نمی‌توان از ابزارهای سنتی چرخش لاگ برای محدود کردن تعداد گزارش‌های I/O استفاده کرد. ساده‌ترین راه برای محدود کردن تعداد I/O، تنظیم گزینهٔ .Em maxseq روی بیشینهٔ تعداد گزارش‌هایی است که می‌خواهید ذخیره کنید. به‌محض اینکه شمارهٔ توالی گزارش I/O به .Em maxseq , برسد، به صفر بازنشانی می‌شود و .Nm هر گزارش I/O موجود را کوتاه و دوباره استفاده خواهد کرد. .Sh "پرونده‌ها (FILES)" .Bl -tag -width 24n .It Pa /etc/sudo.conf پیکربندی پیشانهٔ Sudo .It Pa /etc/sudoers فهرست مجاز اجرای دستورها برای کاربران .It Pa /etc/group پروندهٔ گروه‌های محلی .It Pa /etc/netgroup فهرست گروه‌های شبکه .It Pa /var/log/sudo-io پرونده‌های گزارش ورودی/خروجی (I/O) .It Pa /run/sudo/ts شاخهٔ حاوی برچسب‌های زمانی برای خط‌مشی امنیتی .Nm .It Pa /var/lib/sudo/lectured شاخهٔ حاوی پرونده‌های وضعیت تذکر برای خط‌مشی امنیتی .Nm .It Pa /etc/environment محیط اولیه برای حالت .Fl i در سامانه‌های AIX و لینوکس .El .Sh "مثال‌ها (EXAMPLES)" در ادامه نمونه‌هایی از مدخل‌های پروندهٔ .Em sudoers آمده است. البته برخی از این مثال‌ها تا حدی ساختگی هستند. نخست، اجازهٔ عبور چند متغیر محیطی را داده و سپس .Em aliases خود را تعریف می‌کنیم: .Bd -literal # اجرای برنامه‌های X از طریق sudo؛ متغیر HOME برای یافتن پروندهٔ # .Xauthority استفاده می‌شود. برنامه‌های دیگر از HOME برای مکان‌یابی پرونده‌های # پیکربندی استفاده می‌کنند و این می‌تواند منجر به ارتقای دسترسی شود! Defaults env_keep += "DISPLAY HOME" # مشخصات نام مستعار کاربر (User alias) User_Alias FULLTIMERS = millert, mikef, dowdy User_Alias PARTTIMERS = bostley, jwfox, crawl User_Alias WEBADMIN = will, wendy, wim # مشخصات نام مستعار Runas Runas_Alias OP = root, operator Runas_Alias DB = oracle, sybase Runas_Alias ADMINGRP = adm, oper # مشخصات نام مستعار میزبان (Host alias) Host_Alias SPARC = bigtime, eclipse, moet, anchor :\e SGI = grolsch, dandelion, black :\e ALPHA = widget, thalamus, foobar :\e HPPA = boa, nag, python Host_Alias CUNETS = 128.138.0.0/255.255.0.0 Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0 Host_Alias SERVERS = primary, mail, www, ns Host_Alias CDROM = orion, perseus, hercules # مشخصات نام مستعار دستور (Cmnd alias) Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\e /usr/sbin/restore, /usr/sbin/rrestore,\e sha224:0GomF8mNN3wlDt1HD9XldjJ3SNgpFdbjO1+NsQ== \e /home/operator/bin/start_backups Cmnd_Alias KILL = /usr/bin/kill Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown Cmnd_Alias HALT = /usr/sbin/halt Cmnd_Alias REBOOT = /usr/sbin/reboot Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh,\e /usr/local/bin/tcsh, /usr/bin/rsh,\e /usr/local/bin/zsh Cmnd_Alias SU = /usr/bin/su Cmnd_Alias PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less .Ed .Pp در اینجا برخی از مقادیر پیش‌فرض زمان کامپایل را بازنویسی می‌کنیم. می‌خواهیم .Nm sudo در تمام موارد از طریق .Xr syslog 3 با امکان .Em auth لاگ ثبت کند و دستورها با دایرکتوری خانگی کاربرِ هدف به عنوان دایرکتوری کاری اجرا شوند. نمی‌خواهیم کارکنان تمام‌وقت با پیام‌های آموزشی .Nm sudo مواجه شوند و می‌خواهیم به آن‌ها اجازه دهیم دستورها را در یک .Xr chroot 2 .Dq sandbox از طریق گزینه .Fl R اجرا کنند. کاربر .Sy millert نیازی به ارائه گذرواژه ندارد و نمی‌خواهیم متغیرهای محیطی .Ev LOGNAME یا .Ev USER را بازنشانی کنیم هنگام اجرای دستورها به عنوان .Sy root . علاوه بر این، در ماشین‌های موجود در .Dv SERVERS .Em Host_Alias , یک فایل لاگ محلی اضافی نگه می‌داریم و مطمئن می‌شویم که سال را در هر خط لاگ درج می‌کنیم، زیرا ورودی‌های لاگ برای چندین سال نگهداری خواهند شد. در نهایت، گریزهای پوسته را برای دستورهای موجود در PAGERS .Em Cmnd_Alias .Po .Pa /usr/bin/more , .Pa /usr/bin/pg و .Pa /usr/bin/less .Pc . غیرفعال می‌کنیم. این کار محدودیت مؤثری برای کاربرانی با دسترسی‌های .Nm sudo .Sy ALL ایجاد نخواهد کرد. .Bd -literal # Override built-in defaults Defaults syslog=auth,runcwd=~ Defaults>root !set_logname Defaults:FULLTIMERS !lecture,runchroot=* Defaults:millert !authenticate Defaults@SERVERS log_year, logfile=/var/log/sudo.log Defaults!PAGERS noexec .Ed .Pp بخش .Em User specification قسمتی است که در عمل تعیین می‌کند چه کسی مجاز به اجرای چه چیزی است. .Bd -literal root ALL = (ALL) ALL %wheel ALL = (ALL) ALL .Ed .Pp ما به .Sy root و هر کاربری در گروه .Sy wheel اجازه می‌دهیم هر دستوری را روی هر میزبانی در قالب هر کاربری اجرا کند. .Bd -literal FULLTIMERS ALL = NOPASSWD: ALL .Ed .Pp مدیران سیستم تمام‌وقت .Po .Sy millert , .Sy mikef , و .Sy dowdy .Pc می‌توانند هر دستوری را روی هر میزبانی بدون احراز هویت اجرا کنند. .Bd -literal PARTTIMERS ALL = ALL .Ed .Pp مدیران سیستم پاره‌وقت ( .Sy bostley , .Sy jwfox , و .Sy crawl ) می‌توانند هر دستوری را روی هر میزبانی اجرا کنند اما ابتدا باید احراز هویت شوند (زیرا این مدخل فاقد برچسب .Dv NOPASSWD است). .Bd -literal jack CSNETS = ALL .Ed .Pp کاربر .Sy jack می‌تواند هر فرمانی را روی ماشین‌های موجود در نام مستعار .Dv CSNETS (شبکه‌های 128.138.243.0، 128.138.204.0 و 128.138.242.0) اجرا کند. از میان این شبکه‌ها، تنها 128.138.204.0 دارای نت‌ماسک صریح (در نمادگذاری CIDR) است که نشان می‌دهد یک شبکه کلاس C است. برای سایر شبکه‌ها در .Dv CSNETS ، نت‌ماسک ماشین محلی در طول تطبیق استفاده خواهد شد. .Bd -literal lisa CUNETS = ALL .Ed .Pp کاربر .Sy lisa می‌تواند هر فرمانی را روی هر میزبان در نام مستعار .Dv CUNETS (شبکه کلاس B آدرس 128.138.0.0) اجرا کند. .Bd -literal operator ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\e sudoedit /etc/printcap, /usr/oper/bin/ .Ed .Pp کاربر .Sy operator می‌تواند فرمان‌های محدودی را برای نگهداری ساده سیستم اجرا کند. در اینجا، این‌ها فرمان‌های مربوط به پشتیبان‌گیری، خاتمه دادن به فرایندها، سامانه چاپ، خاموش کردن سیستم، و هر فرمانی در دایرکتوری .Pa /usr/oper/bin/ هستند. یک فرمان در Cmnd_Alias با نام .Dv DUMPS شامل یک چکیده sha224 است، .Pa /home/operator/bin/start_backups . دلیل این امر این است که دایرکتوری حاوی این اسکریپت توسط کاربر operator قابل نوشتن است. اگر اسکریپت تغییر یابد (که منجر به عدم تطابق چکیده می‌شود)، دیگر اجرای آن از طریق .Nm sudo امکان‌پذیر نخواهد بود. .Bd -literal joe ALL = /usr/bin/su operator .Ed .Pp کاربر .Sy joe تنها مجاز به اجرای .Xr su 1 به کاربر operator است. .Bd -literal pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd *root* %opers ALL = (: ADMINGRP) /usr/sbin/ .Ed .Pp کاربران موجود در گروه .Sy opers می‌توانند فرمان‌های موجود در .Pa /usr/sbin/ را با هویت کاربری خود اما با هر گروهی در .Dv ADMINGRP .Em Runas_Alias (گروه‌های .Sy adm و .Sy oper ) اجرا کنند. .Pp کاربر .Sy pete مجاز به تغییر گذرواژه هر کاربری به جز .Sy root روی ماشین‌های .Dv HPPA است. از آنجا که آرگومان‌های خط فرمان به عنوان یک رشته واحد و پیوسته تطبیق داده می‌شوند، نویسه عام .Ql * با .Em چندین کلمه تطبیق خواهد یافت. این مثال فرض می‌کند که .Xr passwd 1 چندین نام کاربری را در خط فرمان نمی‌پذیرد. روی سیستم‌های دارای گنو .Xr getopt 3 ، گزینه‌های .Xr passwd 1 می‌توانند پس از آرگومان نام کاربر مشخص شوند. در نتیجه، این قاعده این مورد را نیز مجاز می‌داند: .Bd -literal -offset 4n passwd username --expire .Ed .Pp که ممکن است مطلوب نباشد. .Bd -literal bob SPARC = (OP) ALL : SGI = (OP) ALL .Ed .Pp کاربر .Sy bob می‌تواند هر فرمانی را روی ماشین‌های .Dv SPARC و .Dv SGI به‌عنوان هر کاربری در .Dv OP .Em Runas_Alias .Po .Sy root و .Sy operator .Pc اجرا کند. .Bd -literal jim +biglab = ALL .Ed .Pp کاربر .Sy jim می‌تواند هر فرمانی را روی ماشین‌های موجود در گروه شبکه‌ای .Em biglab اجرا کند. .Nm sudo می‌داند که .Dq biglab به دلیل پیشوند .Ql + یک netgroup است. .Bd -literal +secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser .Ed .Pp کاربران موجود در گروه شبکه‌ای .Sy secretaries باید به مدیریت چاپگرها و همچنین افزودن و حذف کاربران کمک کنند، بنابراین مجاز به اجرای این فرمان‌ها روی همهٔ ماشین‌ها هستند. .Bd -literal fred ALL = (DB) NOPASSWD: ALL .Ed .Pp کاربر .Sy fred می‌تواند فرمان‌ها را به‌عنوان هر کاربری در .Dv DB .Em Runas_Alias .Po .Sy oracle یا .Sy sybase .Pc بدون وارد کردن گذرواژه اجرا کند. .Bd -literal john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root* .Ed .Pp روی ماشین‌های .Dv ALPHA ، کاربر .Sy john می‌تواند با su به هر کاربری به جز .Sy root تغییر کند، اما مجاز به تعیین هیچ گزینه‌ای برای فرمان .Xr su 1 نیست. .Bd -literal jen ALL, !SERVERS = ALL .Ed .Pp کاربر .Sy jen می‌تواند هر فرمانی را روی هر ماشینی به جز موارد موجود در .Dv SERVERS .Em Host_Alias (primary، mail، www و ns) اجرا کند. .Bd -literal jill SERVERS = /usr/bin/, !SU, !SHELLS .Ed .Pp برای هر رایانه‌ای در .Dv SERVERS .Em Host_Alias , .Sy jill می‌تواند هر فرمانی را در شاخهٔ .Pa /usr/bin/ به‌جز آن دسته از فرمان‌های متعلق به .Dv SU و .Dv SHELLS .Em Cmnd_Aliases اجرا کند. اگرچه صراحتاً در این قاعده ذکر نشده، اما فرمان‌های موجود در .Dv PAGERS .Em Cmnd_Alias همگی در .Pa /usr/bin قرار داشته و گزینهٔ .Em noexec روی آن‌ها تنظیم شده است. .Bd -literal steve CSNETS = (operator) /usr/local/op_commands/ .Ed .Pp کاربر .Sy steve می‌تواند هر فرمانی را در شاخهٔ /usr/local/op_commands/ اما صرفاً در قالب کاربر operator اجرا نماید. .Bd -literal matt valkyrie = KILL .Ed .Pp روی ایستگاه کاری شخصی‌اش valkyrie، .Sy matt باید بتواند پردازش‌های متوقف‌شده (hung) را خاتمه دهد (kill کند). .Bd -literal WEBADMIN www = (www) ALL, (root) /usr/bin/su www .Ed .Pp روی میزبان www، هر کاربری در .Dv WEBADMIN .Em User_Alias (شامل will، wendy و wim)، می‌تواند هر فرمانی را با هویت کاربر www (که مالک صفحات وب است) اجرا کند یا صرفاً .Xr su 1 به www انجام دهد. .Bd -literal ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\e /sbin/mount -o nosuid\e,nodev /dev/cd0a /CDROM .Ed .Pp هر کاربری می‌تواند یک CD-ROM را روی رایانه‌های موجود در CDROM .Em Host_Alias (شامل orion، perseus و hercules) بدون وارد کردن گذرواژه سوار (mount) یا پیاده (unmount) کند. تایپ این دستورات برای کاربران تا حدی خسته‌کننده است، بنابراین گزینه‌ای عالی برای قرار گرفتن درون یک اسکریپت شل محسوب می‌شود. .Sh "نکات امنیتی (SECURITY NOTES)" .Ss "محدودیت‌های عملگر !" به طور کلی .Dq کاستن دستورها از .Sy ALL با استفاده از عملگر .Ql !\& کارآمد نیست. کاربر می‌تواند به سادگی با رونوشت گرفتن از دستور مورد نظر با نامی دیگر و اجرای آن، این محدودیت را دور بزند. برای نمونه: .Bd -literal bill ALL = ALL, !SU, !SHELLS .Ed .Pp مانع واقعی برای .Sy bill در اجرای دستورهای فهرست‌شده در .Dv SU یا .Dv SHELLS ایجاد نمی‌کند، زیرا او می‌تواند به سادگی آن دستورها را با نامی دیگر کپی کند، یا از قابلیت خروج به پوسته از طریق ویرایشگر متن یا برنامه‌ای دیگر استفاده نماید. بنابراین، این نوع محدودیت‌ها در بهترین حالت باید صرفاً توصیه‌ای تلقی شوند (و با اعمال سیاست‌های کنترلی تقویت گردند). .Pp به طور کلی، اگر کاربری دسترسی sudo .Sy ALL داشته باشد، صرف‌نظر از هرگونه عنصر .Ql !\& در مشخصات کاربر، هیچ چیزی نمی‌تواند مانع از آن شود که برنامه‌ای بسازد که یک پوستهٔ .Sy root در اختیارش بگذارد (یا رونوشت اختصاصی خود را از یک پوسته ایجاد کند). .Ss "پیامدهای امنیتی fast_glob" اگر گزینهٔ .Em fast_glob در حال استفاده باشد، نفی مطمئن دستورهایی که نام مسیر آن‌ها شامل نویسه‌های تطبیق الگو (همان نویسه‌های عام) است امکان‌پذیر نیست. دلیل این امر ناتوانی تابع .Xr fnmatch 3 در کتابخانهٔ C در تحلیل مسیرهای نسبی است. اگرچه این موضوع معمولاً برای قواعدی که مجوزها را اعطا می‌کنند تنها یک محدودیت ساده است، اما می‌تواند برای قواعدی که مجوزها را سلب یا لغو می‌کنند منجر به یک رخنهٔ امنیتی شود. .Pp برای نمونه، ورودی زیر را در پروندهٔ .Em sudoers در نظر بگیرید: .Bd -literal john ALL = /usr/bin/passwd [a-zA-Z0-9]*, /usr/bin/chsh [a-zA-Z0-9]*,\e /usr/bin/chfn [a-zA-Z0-9]*, !/usr/bin/* root .Ed .Pp کاربر .Sy john در صورت فعال بودن .Em fast_glob همچنان می‌تواند با رفتن به پوشهٔ .Pa /usr/bin و اجرای .Ql ./passwd root به جای آن، دستور .Ql /usr/bin/passwd root را اجرا کند. .Pp موضوع احتمالی دیگر این است که هنگام اجرای دستور توسط .Nm sudo باید به جای مسیر درج‌شده در پروندهٔ .Em sudoers از دستور یا مسیر تعیین‌شده توسط کاربر استفاده شود. این مسئله می‌تواند منجر به شرایط رقابتی «زمان بررسی تا زمان استفاده» (TOCTOU) گردد. .Ss "نویسه‌های عام در آرگومان‌های دستور" آرگومان‌های خط فرمان به صورت یک رشتهٔ واحد و پیوسته تطبیق داده می‌شوند. این بدان معناست که یک نویسهٔ عام مانند .Ql \&? یا .Ql * فراتر از مرزهای کلمات نیز تطبیق می‌یابد، که ممکن است غیرمنتظره باشد. برای نمونه، در حالی که ورودی sudoers مانند: .Bd -literal -offset 4n %operator ALL = /bin/cat /var/log/messages* .Ed .Pp اجرای دستوری مانند: .Bd -literal -offset 4n $ sudo cat /var/log/messages.1 .Ed .Pp را مجاز می‌شمارد، این مورد را نیز مجاز خواهد دانست: .Bd -literal -offset 4n $ sudo cat /var/log/messages /etc/shadow .Ed .Pp که احتمالاً مقصود اصلی نبوده است. یک جایگزین امن‌تر، استفاده از یک عبارت منظم برای تطبیق آرگومان‌های خط فرمان است. مثال بالا را می‌توان به صورت یک عبارت منظم بازنویسی کرد: .Bd -literal -offset 4n %operator ALL = /bin/cat ^/var/log/messages[^[:space:]]*$ .Ed .Pp این عبارت منظم تنها با یک فایل تطبیق می‌یابد که نام آن با .Pa /var/log/messages آغاز شده و فاقد هرگونه نویسه فاصله در نام خود باشد. برای هر کار غیرجزئی، اغلب بهتر است پردازش خط فرمان خارج از فایل .Em sudoers و در یک زبان اسکریپت‌نویسی انجام شود. .Ss "عبارت‌های منظم در نام دستورها" استفاده از یک عبارت منظم برای تطبیق نام دستور، همان پیامدهای امنیتیِ استفاده از گزینه .Em fast_glob را دارد: .Bl -bullet -width 1n .It هنگامی که نام مسیر یک عبارت منظم باشد، نفی مطمئن دستورها امکان‌پذیر نیست. .It هنگامی که .Nm sudo دستور را اجرا می‌کند، باید از دستور یا مسیر مشخص‌شده توسط کاربر به جای مسیر درج‌شده در فایل .Em sudoers استفاده کند. این امر ممکن است منجر به شرایط رقابتیِ «زمان بررسی در برابر زمان استفاده» (time of check versus time of use) شود. .El .Pp این مشکلات برای قوانینی که در آن‌ها تنها گزینه‌های خط فرمان با استفاده از عبارت منظم تطبیق داده می‌شوند، صدق نمی‌کند. .Ss "جلوگیری از گریز به پوسته (Shell escapes)" به محض اینکه .Nm sudo برنامه‌ای را اجرا کند، آن برنامه در انجام هر کاری آزاد است، از جمله اجرای برنامه‌های دیگر. این موضوع می‌تواند یک مسئله امنیتی باشد، زیرا غیرمعمول نیست که برنامه‌ای اجازه گریز به پوسته را بدهد؛ امری که به کاربر امکان می‌دهد کنترل دسترسی و ثبت وقایعِ .Nm sudo را دور بزند. برنامه‌های رایجی که امکان گریز به پوسته را فراهم می‌کنند شامل پوسته‌ها (طبیعتاً)، ویرایشگرها، صفحه‌بندها، برنامه‌های ایمیل و برنامه‌های ترمینال هستند. .Pp چهار رویکرد اساسی برای این مسئله وجود دارد: .Bl -tag -width "intercept" .It restrict خودداری از اعطای دسترسی به کاربر برای دستوراتی که به او امکان اجرای دستورات دلخواه را می‌دهند. بسیاری از ویرایشگرها دارای حالت محدود هستند که در آن گریز به پوسته غیرفعال است، هرچند .Nm sudoedit راهکار بهتری برای اجرای ویرایشگرها از طریق .Nm sudo . است. با توجه به شمار بالای برنامه‌هایی که امکان گریز به پوسته را فراهم می‌کنند، محدود کردن کاربران به مجموعه‌ای از برنامه‌ها که فاقد این امکان هستند اغلب غیرعملی است. .It intercept در بیشتر سیستم‌ها، قابلیت .Em intercept در .Nm sudo می‌تواند برای رهگیری شفاف تلاش جهت اجرای یک دستور جدید، مجاز یا مسدود کردن آن بر اساس قوانین .Em sudoers و ثبت نتیجه استفاده شود. برای نمونه، این قابلیت می‌تواند برای محدود کردن دستورات اجرا شده از درون یک پوسته یا ویرایشگر با دسترسی ممتاز استفاده شود. .Pp دو سازوکار بنیادین وجود دارد که ممکن است برای پیاده‌سازی حالت .Em intercept به کار روند: .Em dso و .Em trace . از تنظیم .Em intercept_type می‌توان برای انتخاب میان آن‌ها استفاده کرد. .Pp نخستین سازوکار، .Em dso , توابع استاندارد کتابخانه C را که برای اجرای یک دستور استفاده می‌شوند بازنویسی می‌کند. این کار با تنظیم یک متغیر محیطی (معمولاً .Ev LD_PRELOAD ) به مسیر یک شیء اشتراکی پویا، یا کتابخانه اشتراکی، حاوی نسخه‌های سفارشی از توابع کتابخانه‌ای .Xr execve 2 , .Xr execl 3 , .Xr execle 3 , .Xr execlp 3 , .Xr execv 3 , .Xr execvp 3 , .Xr execvpe 3 , و .Xr system 3 انجام می‌شود که برای تصمیم‌گیری درباره خط‌مشی به .Nm sudo متصل می‌شوند. توجه داشته باشید که این سازوکار تنها برای برنامه‌های اجرایی با پیوند پویا اعمال می‌شود. رهگیری دستورها برای برنامه‌های با پیوند ایستا یا برنامه‌هایی که تحت شبیه‌سازی باینری اجرا می‌شوند از این طریق ممکن نیست. از آنجا که بیشتر بارگذارنده‌های پویا هنگام اجرای برنامه‌های set-user-ID و set-group-ID متغیر .Ev LD_PRELOAD (یا معادل آن) را نادیده می‌گیرند، .Nm به‌طور پیش‌فرض اجازه اجرای چنین برنامه‌هایی را در حالت .Em intercept نمی‌دهد. سازوکار .Em dso با پشتیبانی از SELinux RBAC در .Nm sudo Ns 's ناسازگار است (اما بخش زیر را ببینید). ‏SELinux به‌طور پیش‌فرض .Ev LD_PRELOAD را غیرفعال کرده و در وراثت توصیف‌گر فایل، که .Nm sudo به آن متکی است، تداخل ایجاد می‌کند. .Pp سازوکار دوم، .Em trace , روی سیستم‌های لینوکسی که از فیلتر کردن .Xr seccomp 2 پشتیبانی می‌کنند در دسترس است. این سازوکار از .Xr ptrace 2 و .Xr seccomp 2 برای رهگیری فراخوان سیستمی .Xr execve 2 به‌جای پیش‌بارگذاری یک شیء اشتراکی پویا استفاده می‌کند. هر دو نوع برنامه‌های اجرایی ایستا و پویا پشتیبانی می‌شوند و با حالت SELinux RBAC در .Nm sudo Ns 's سازگار است. توابعی که از فراخوان سیستمی .Xr execveat 2 استفاده می‌کنند، مانند .Xr fexecve 3 , در حال حاضر رهگیری نمی‌شوند. .Pp قابلیت .Em intercept روی Solaris، *BSD، Linux، macOS، HP-UX 11.x و AIX 5.3 و بالاتر کار می‌کند. این قابلیت باید روی بیشتر سیستم‌عامل‌هایی که از متغیر محیطی .Ev LD_PRELOAD یا معادل آن پشتیبانی می‌کنند، پشتیبانی شود. رهگیری دستورهای درونی پوسته یا محدود کردن توانایی خواندن یا نوشتن فایل‌های حساس از داخل پوسته امکان‌پذیر نیست. .Pp برای فعال‌سازی حالت رهگیری به‌ازای هر دستور، از برچسب .Dv INTERCEPT همان‌طور که در بخش User Specification در بالا مستند شده است استفاده کنید. این مثال دوباره در اینجا آورده شده است: .Bd -literal chuck research = INTERCEPT: ALL .Ed .Pp این به کاربر .Sy chuck اجازه می‌دهد تا هر دستوری را روی ماشین .Dq research در حالت رهگیری اجرا کند. هر دستوری که از طریق گریزهای پوسته اجرا شود، توسط .Nm sudo . اعتبارسنجی و ثبت خواهد شد. اگر مطمئن نیستید که سیستم شما توانایی پشتیبانی از .Em intercept , را دارد یا خیر، می‌توانید آن را آزمایش کنید و بررسی کنید که آیا دستورهای خارجی اجراشده از طریق پوسته هنگام فعال بودن .Em intercept ثبت می‌شوند یا خیر. .Pp یک شرایط رقابت ذاتی بین زمانی که یک دستور در برابر قوانین .Nm بررسی می‌شود و زمانی که واقعاً به اجرا درمی‌آید، وجود دارد. اگر کاربری مجاز به اجرای دستورهای دلخواه باشد، ممکن است بتواند آرگومان‌های .Xr execve 2 را در برنامه، پس از تکمیل بررسی سیاست .Nm اما پیش از اجرای دستور جدید تغییر دهد. از نگارش 1.9.12 به بعد، روش .Em trace بررسی خواهد کرد که دستور و آرگومان‌های آن پس از تکمیل .Xr execve 2 اما پیش از آنکه برنامهٔ جدید فرصت اجرا پیدا کند، تغییر نکرده باشند. این قابلیت در روش .Em dso وجود ندارد. برای اطلاعات بیشتر، توضیحات تنظیم .Em intercept_verify را ببینید. .It log دو روش مجزا اما مرتبط برای ثبت وقایع دستورهای اضافی وجود دارد. روش نخست، فعال‌سازی ثبت ورودی/خروجی با استفاده از پرچم .Em log_output است. این کار خروجی دستور را ثبت می‌کند اما هنگام اجرای دستور اضافی، مدخلی در گزارش وقایع ایجاد نخواهد کرد. روش دوم، فعال‌سازی پرچم .Em log_subcmds در .Em sudoers است که با هر بار اجرای دستوری جدید، یک مدخل در گزارش وقایع ایجاد می‌کند. اگر ثبت ورودی/خروجی نیز فعال باشد، مدخل گزارش شامل یک آفست زمانی در گزارش ورودی/خروجی خواهد بود تا زمان دقیق اجرای دستور را مشخص کند. این آفست را می‌توان به ابزار .Xr sudoreplay 8 داد تا گزارش ورودی/خروجی را در همان لحظهٔ دقیق اجرای دستور بازپخش کند. پرچم .Em log_subcmds از همان سازوکار .Em intercept (به بالا رجوع کنید) استفاده می‌کند و دارای همان محدودیت‌ها است. .It noexec قابلیت .Em noexec در .Nm sudo می‌تواند برای جلوگیری از اجرای هرگونه برنامهٔ دیگر توسط برنامه‌ای که با .Nm sudo اجرا شده، استفاده شود. در بیشتر سیستم‌ها، از همان سازوکار .Ev LD_PRELOAD مشابه .Em intercept (به بالا رجوع کنید) استفاده می‌کند و از این رو همان هشدارها صادق هستند. قابلیت .Em noexec می‌تواند اجرای دستورهایی که از طریق توابع .Xr execve 2 , .Xr execl 3 , .Xr execle 3 , .Xr execlp 3 , .Xr exect 3 , .Xr execv 3 , .Xr execveat 3 , .Xr execvP 3 , .Xr execvp 3 , .Xr execvpe 3 , .Xr fexecve 3 , .Xr popen 3 , .Xr posix_spawn 3 , .Xr posix_spawnp 3 , .Xr system 3 , و .Xr wordexp 3 اجرا می‌شوند را مسدود کند. در لینوکس، یک فیلتر .Xr seccomp 2 برای پیاده‌سازی .Em noexec . استفاده می‌شود. در Solaris 10 و بالاتر، .Em noexec به جای متغیر محیطی .Ev LD_PRELOAD از امتیازات Solaris استفاده می‌کند. .Pp برای فعال‌سازی .Em noexec برای یک دستور، از برچسب .Dv NOEXEC همان‌گونه که در بخش مشخصات کاربر در بالا مستند شده است، استفاده کنید. در اینجا مجدداً همان نمونه آورده شده است: .Bd -literal aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi .Ed .Pp این به کاربر .Sy aaron اجازه می‌دهد تا .Pa /usr/bin/more و .Pa /usr/bin/vi را با فعال بودن .Em noexec اجرا کند. این کار مانع از اجرای دستورات دیگر (مانند یک پوسته) توسط آن دو دستور می‌شود. اگر مطمئن نیستید که سیستم شما از .Em noexec پشتیبانی می‌کند یا خیر، می‌توانید آن را امتحان کرده و بررسی کنید که آیا در صورت فعال بودن .Em noexec گریز به پوسته کار می‌کند یا خیر. .El .Pp محدود کردن گریز به پوسته درمان قطعی نیست. برنامه‌هایی که تحت کاربر .Sy root اجرا می‌شوند همچنان قادر به انجام عملیات بالقوه خطرناک بسیاری هستند (مانند تغییر یا بازنویسی فایل‌ها) که می‌تواند منجر به ارتقای دسترسی ناخواسته شود. در مورد خاص ویرایشگرها، رویکرد امن‌تر اعطای مجوز به کاربر برای اجرای .Nm sudoedit است (زیر را ببینید). .Ss "ویرایش امن" پلاگین .Nm شامل پشتیبانی از .Nm sudoedit است که به کاربران اجازه می‌دهد فایل‌ها را با ویرایشگر دلخواه خود به‌صورت امن ویرایش کنند. از آنجا که .Nm sudoedit یک دستور توکار است، باید در فایل .Em sudoers بدون مسیر مشخص شود. با این حال، می‌تواند مانند یک دستور عادی آرگومان‌های خط فرمان بپذیرد. الگوهای عام مورد استفاده در آرگومان‌های خط فرمان .Em sudoedit به عنوان مسیر فرض می‌شوند، بنابراین یک اسلش .Pq Ql / با الگوهای عام تطبیق داده نمی‌شود. .Pp برخلاف سایر دستورات .Nm sudo ، ویرایشگر با مجوزهای کاربر اجراکننده و بدون تغییر در متغیرهای محیطی اجرا می‌شود. اطلاعات بیشتر در توضیحات مربوط به گزینه .Fl e در .Xr sudo 8 موجود است. .Pp به عنوان مثال، برای اجازه دادن به کاربر operator جهت ویرایش فایل .Dq پیام روز روی هر ماشینی: .Bd -literal -offset 4n operator ALL = sudoedit /etc/motd .Ed .Pp سپس کاربر operator دستور .Nm sudoedit را به این صورت اجرا می‌کند: .Bd -literal -offset 4n $ sudoedit /etc/motd .Ed .Pp ویرایشگر با دسترسی کاربر operator، نه .Sy root ، روی یک نسخه موقت از .Pa /etc/motd اجرا خواهد شد. پس از ویرایش فایل، .Pa /etc/motd با محتویات نسخه موقت به‌روزرسانی می‌شود. .Pp به کاربران .Em هرگز نباید دسترسی .Nm sudoedit برای ویرایش پرونده‌ای که در شاخه‌ای دارای دسترسی نوشتن برای کاربر قرار دارد (چه مستقیم یا با نویسه عام) داده شود. اگر کاربر به شاخه دسترسی نوشتن داشته باشد، امکان جایگزینی پرونده معتبر با پیوندی به پرونده دیگر وجود دارد که امکان ویرایش پرونده‌های دلخواه را فراهم می‌کند. برای جلوگیری از این امر، از نسخه 1.8.16 به بعد، پیوندهای نمادین در شاخه‌های قابل‌نوشتن دنبال نخواهند شد و .Nm sudoedit از ویرایش پرونده موجود در شاخه قابل‌نوشتن خودداری خواهد کرد مگر اینکه گزینه .Em sudoedit_checkdir غیرفعال شده باشد یا کاربر فراخواننده .Sy root . باشد. علاوه بر این، در نسخه 1.8.15 و بالاتر، .Nm sudoedit از باز کردن پیوند نمادین خودداری خواهد کرد مگر اینکه گزینه .Em sudoedit_follow فعال شده باشد یا دستور .Em sudoedit با برچسب .Dv FOLLOW در پرونده .Em sudoers پیشوند شده باشد. .Ss "بررسی‌های پرونده برچسب زمانی" .Nm مالکیت شاخه برچسب زمانی خود .Po .Pa /run/sudo/ts به‌طور پیش‌فرض .Pc را بررسی می‌کند و اگر مالک آن .Sy root نباشد یا توسط کاربری غیر از .Sy root . قابل نوشتن باشد، محتویات شاخه را نادیده می‌گیرد. نسخه‌های قدیمی‌تر .Nm sudo پرونده‌های برچسب زمانی را در .Pa /tmp ; ذخیره می‌کردند؛ این کار دیگر توصیه نمی‌شود زیرا در سیستم‌هایی که به کاربران غیرممتاز اجازه تغییر مالکیت پرونده‌های ایجادشده را می‌دهند، ممکن است کاربر خودش برچسب زمانی را ایجاد کند. .Pp اگرچه شاخه برچسب زمانی .Em باید در زمان راه‌اندازی مجدد سیستم پاک شود، اما همه سیستم‌ها شامل شاخه .Pa /run یا .Pa /var/run نیستند. برای جلوگیری از مشکلات احتمالی، .Nm در سیستم‌هایی که زمان راه‌اندازی سیستم در دسترس است، پرونده‌های برچسب زمانی مربوط به قبل از بوت شدن دستگاه را نادیده می‌گیرد. .Pp برخی سیستم‌های دارای محیط‌های رومیزی گرافیکی به کاربران غیرممتاز اجازه تغییر ساعت سیستم را می‌دهند. از آنجا که .Nm برای اعتبارسنجی برچسب زمانی به ساعت سیستم متکی است، ممکن است در چنین سیستم‌هایی کاربر با به عقب کشیدن ساعت بتواند .Nm sudo را طولانی‌تر از .Em timestamp_timeout اجرا کند. برای مقابله با این مشکل، .Nm در صورت پشتیبانی سیستم، از یک ساعت یکنواخت (که هرگز به عقب بازنمی‌گردد) برای برچسب‌های زمانی خود استفاده می‌کند. .Pp .Nm برچسب‌های زمانی تنظیم‌شده برای آینده دور را نمی‌پذیرد. برچسب‌های زمانی با تاریخی بیشتر از current_time + 2 * .Dv TIMEOUT نادیده گرفته خواهند شد و .Nm گزارش و شکایت ثبت خواهد کرد. .Pp اگر گزینه .Em timestamp_type روی .Dq tty , تنظیم شده باشد، رکورد برچسب زمانی شامل شماره دستگاه پایانه‌ای است که کاربر با آن احراز هویت کرده است. این کار تفکیک به ازای هر پایانه را فراهم می‌کند، اما ممکن است رکوردهای برچسب زمانی همچنان پس از پایان نشست کاربر پابرجا بمانند. .Pp مگر اینکه گزینهٔ .Em timestamp_type روی .Dq global , تنظیم شده باشد، رکورد مهر زمانی شامل شناسهٔ نشست فرایندی که آخرین بار احراز هویت کرده نیز می‌شود. این کار از استفادهٔ فرایندها در نشست‌های پایانهٔ مختلف از یک رکورد مهر زمانی یکسان جلوگیری می‌کند. در سیستم‌هایی که زمان شروع فرایند قابل پرس‌وجو باشد، زمان شروع رهبر نشست در رکورد مهر زمانی ثبت می‌شود. اگر هیچ پایانه‌ای وجود نداشته باشد یا گزینهٔ .Em timestamp_type روی .Dq ppid , تنظیم شده باشد، در عوض از زمان شروع فرایند والد استفاده می‌شود. در بیشتر موارد، این کار مانع از استفادهٔ مجدد از رکورد مهر زمانی بدون وارد کردن گذرواژه هنگام خروج و ورود دوبارهٔ کاربر می‌شود. .Sh "اشکال‌زدایی (DEBUGGING)" نسخه‌های ۱.۸.۴ و بالاتر افزونه‌ی .Nm از ساختار اشکال‌زدایی منعطفی پشتیبانی می‌کنند که هنگام بروز مشکل به ردگیری عملکرد درونی افزونه کمک می‌کند. این مورد در پرونده‌ی .Xr sudo.conf 5 قابل پیکربندی است. .Pp افزونه‌ی .Nm از همان ساختار پرچم اشکال‌زداییِ بخش کاربری .Nm sudo استفاده می‌کند: .Em subsystem Ns @ Ns Em priority . .Pp سطوح اولویتِ استفاده‌شده در .Nm ، به ترتیب کاهش اهمیت عبارتند از: .Em crit , err , warn , notice , diag , info , trace , و .Em debug . تعیین هر سطح اولویت، شامل تمام اولویت‌های بالاتر از خود نیز می‌شود. برای نمونه، اولویتِ .Em notice شامل پیام‌های ثبت‌شده در سطح .Em notice و بالاتر خواهد بود. .Pp زیرسیستم‌های زیر توسط افزونه‌ی .Nm استفاده می‌شوند: .Bl -tag -width "defaults" .It Em alias پردازش .Em User_Alias , .Em Runas_Alias , .Em Host_Alias و .Em Cmnd_Alias .It Em all تطبیق با تمام زیرسیستم‌ها .It Em audit کد ممیزی BSM و لینوکس .It Em auth احراز هویت کاربر .It Em defaults تنظیمات .Em Defaults در پرونده‌ی .Em sudoers .It Em env مدیریت متغیرهای محیطی .It Em ldap پیکربندی sudoers مبتنی بر LDAP .It Em logging پشتیبانی از ثبت وقایع .It Em match تطبیق کاربران، گروه‌ها، میزبان‌ها و netgroupها در پرونده‌ی .Em sudoers .It Em netif مدیریت رابط‌های شبکه .It Em nss مدیریت سوییچ خدمات شبکه (NSS) در .Nm .It Em parser تجزیه‌ی پرونده‌ی .Em sudoers .It Em perms تنظیم مجوزهای دسترسی .It Em plugin معادل .Em main برای افزونه. .It Em pty کدهای مربوط به شبه‌پایانه .It Em rbtree سازوکارهای درونی درخت قرمز-سیاه .It Em sssd پیکربندی sudoers مبتنی بر SSSD .It Em util توابع کاربردی .El .Pp برای نمونه: .Bd -literal Debug sudoers.so /var/log/sudoers_debug match@info,nss@info .Ed .Pp برای اطلاعات بیشتر، راهنمای .Xr sudo.conf 5 را ببینید. .SH "همچنین ببینید (SEE ALSO)" .Xr ssh 1 , .Xr su 1 , .Xr fnmatch 3 , .Xr glob 3 , .Xr mktemp 3 , .Xr strftime 3 , .Xr sudo.conf 5 , .Xr sudo_plugin 5 , .Xr sudoers.ldap 5 , .Xr sudoers_timestamp 5 , .Xr sudo 8 , .Xr visudo 8 .SH "نویسنده (AUTHOR)" افراد بسیاری در طول سال‌ها روی .Nm sudo کار کرده‌اند؛ این نسخه عمدتاً شامل کدهایی است که توسط فرد زیر نوشته شده است: .Bd -ragged -offset indent .An Todd C. Miller .Ed .Pp پرونده CONTRIBUTORS.md را در توزیع .Nm sudo (https://www.sudo.ws/about/contributors/) بررسی کنید تا فهرست کاملی از افرادی را ببینید که مشارکت داشته‌اند در .Nm sudo . .Sh "هشدارها و نکات مهم (CAVEATS)" پروندهٔ .Em sudoers باید .Sy همیشه توسط ابزار .Nm visudo ویرایش شود که پرونده را قفل کرده و خطاهای نحوی را بررسی می‌کند. اگر .Em sudoers حاوی خطاهای نحوی باشد، .Nm sudo ممکن است از اجرا خودداری کند، که اگر .Nm sudo تنها روش شما برای دستیابی به دسترسی‌های ابرکاربر باشد، مشکلی جدی خواهد بود. نسخه‌های جدید .Nm تلاش خواهند کرد پس از مواجهه با یک خطای نحوی، با نادیده گرفتن باقی‌ماندهٔ سطر به کار ادامه دهند. نسخه‌های قدیمی‌تر .Nm sudo در صورتی که .Em sudoers شامل خطای نحوی باشد اجرا نخواهند شد. .Pp هنگام استفاده از نت‌گروه‌های ماشین‌ها (در مقابل کاربران)، اگر نام کامل میزبان را در نت‌گروه ذخیره می‌کنید (که معمولاً چنین است)، یا باید نام میزبان ماشین به صورت کامل و مطابق خروجی دستور .Em hostname باشد، یا باید از گزینهٔ .Em fqdn در .Em sudoers . استفاده کنید. .SH "گزارش باگ‌ها (REPORTING BUGS)" اگر فکر می‌کنید باگی در .Nm sudo , پیدا کرده‌اید، می‌توانید گزارش باگ را در https://bugzilla.sudo.ws/ ثبت کنید. .Sh "پشتیبانی (SUPPORT)" پشتیبانی رایگان و محدود از طریق فهرست پستی sudo-users در دسترس است، برای عضویت یا جست‌وجو در بایگانی‌ها https://www.sudo.ws/mailman/listinfo/sudo-users را ببینید. .Sh "سلب مسئولیت (DISCLAIMER)" .Nm sudo به‌صورت .Dq AS IS ارائه می‌شود و هرگونه ضمانت صریح یا ضمنی، از جمله، اما نه محدود به، ضمانت‌های ضمنی قابلیت تجاری و تناسب برای یک هدف خاص سلب می‌گردد. برای جزئیات کامل، پروندهٔ LICENSE.md توزیع‌شده همراه با .Nm sudo یا https://www.sudo.ws/about/license/ را ببینید. .SH "حق نشر (COPYRIGHT)" .Pp حق نشر \(co 1994-1996, 1998-2005, 2007-2023 Todd C. Miller .Pp این نرم‌افزار تحت پروانهٔ ISC منتشر شده است؛ برای شرایط تکثیر و توزیع، پروندهٔ LICENSE.md در توزیع .Nm sudo یا نشانی https://www.sudo.ws/about/license/ را ببینید. هیچ ضمانتی وجود ندارد؛ حتی برای قابلیت تجاری یا مناسب بودن برای یک هدف مشخص.