.\" Automatically generated from an mdoc input file. Do not edit. .\" .\" 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. .\" .TH "SUDO" "8" "January 16, 2023" "Sudo 1.9.13p3" "راهنمای مدیر سیستم (System Manager's Manual)" .nh .if n .ad l .SH "نام (NAME)" \fBsudo\fR, \fBsudoedit\fR \- اجرای یک دستور به عنوان کاربری دیگر .SH "خلاصه دستور (SYNOPSIS)" .HP 5n \fBsudo\fR \fB\-h\fR\ |\ \fB\-K\fR\ |\ \fB\-k\fR\ |\ \fB\-V\fR .br .PD 0 .HP 5n \fBsudo\fR \fB\-v\fR [\fB\-ABkNnS\fR] [\fB\-g\fR\ \fIgroup\fR] [\fB\-h\fR\ \fIhost\fR] [\fB\-p\fR\ \fIprompt\fR] [\fB\-u\fR\ \fIuser\fR] .br .HP 5n \fBsudo\fR \fB\-l\fR [\fB\-ABkNnS\fR] [\fB\-g\fR\ \fIgroup\fR] [\fB\-h\fR\ \fIhost\fR] [\fB\-p\fR\ \fIprompt\fR] [\fB\-U\fR\ \fIuser\fR] [\fB\-u\fR\ \fIuser\fR] [\fIcommand\fR\ [\fIarg\ ...\fR]] .br .HP 5n \fBsudo\fR [\fB\-ABbEHnPS\fR] [\fB\-C\fR\ \fInum\fR] [\fB\-D\fR\ \fIdirectory\fR] [\fB\-g\fR\ \fIgroup\fR] [\fB\-h\fR\ \fIhost\fR] [\fB\-p\fR\ \fIprompt\fR] [\fB\-R\fR\ \fIdirectory\fR] [\fB\-r\fR\ \fIrole\fR] [\fB\-t\fR\ \fItype\fR] [\fB\-T\fR\ \fItimeout\fR] [\fB\-u\fR\ \fIuser\fR] [\fIVAR\fR=\fIvalue\fR] [\fB\-i\fR\ |\ \fB\-s\fR] [\fIcommand\fR\ [\fIarg\ ...\fR]] .br .HP 9n \fBsudoedit\fR [\fB\-ABkNnS\fR] [\fB\-C\fR\ \fInum\fR] [\fB\-D\fR\ \fIdirectory\fR] [\fB\-g\fR\ \fIgroup\fR] [\fB\-h\fR\ \fIhost\fR] [\fB\-p\fR\ \fIprompt\fR] [\fB\-R\fR\ \fIdirectory\fR] [\fB\-r\fR\ \fIrole\fR] [\fB\-t\fR\ \fItype\fR] [\fB\-T\fR\ \fItimeout\fR] [\fB\-u\fR\ \fIuser\fR] \fIfile\ ...\fR .PD .SH "توضیحات (DESCRIPTION)" دستور \fBsudo\fR به یک کاربر مجاز اجازه می‌دهد تا یک \fIcommand\fR (دستور) را به عنوان کاربر ارشد (superuser) یا کاربری دیگر، بر اساس آنچه در خط‌مشی امنیتی (security policy) مشخص شده است، اجرا کند. شناسه کاربری واقعی (\fInot\fR effective - نه موثر) کاربر فراخواننده برای تعیین نام کاربری جهت پرس‌وجو از خط‌مشی امنیتی استفاده می‌شود. .PP دستور \fBsudo\fR از معماری پلاگین برای خط‌مشی‌های امنیتی، حسابرسی (auditing) و ثبت وقایع ورودی/خروجی (I/O logging) پشتیبانی می‌کند. اشخاص ثالث می‌توانند پلاگین‌های خود را توسعه داده و توزیع کنند تا به‌طور یکپارچه با پیشانه (front-end) \fBsudo\fR کار کنند. خط‌مشی امنیتی پیش‌فرض \fIsudoers\fR است که از طریق فایل \fI/etc/sudoers\fR یا از طریق LDAP پیکربندی می‌شود. برای اطلاعات بیشتر بخش \fIPlugins\fR را ببینید. .PP خط‌مشی امنیتی تعیین می‌کند که یک کاربر در صورت وجود، چه امتیازاتی برای اجرای \fBsudo\fR دارد. خط‌مشی ممکن است کاربران را ملزم کند که هویت خود را با یک گذرواژه یا سازوکار احراز هویت دیگری تأیید کنند. در صورت نیاز به احراز هویت، اگر گذرواژه کاربر در یک بازه زمانی قابل‌پیکربندی وارد نشود، \fBsudo\fR خارج خواهد شد. این محدودیت وابسته به خط‌مشی است؛ مهلت زمانی پیش‌فرض اعلان گذرواژه برای خط‌مشی امنیتی \fIsudoers\fR برابر با 0 دقیقه است. .PP خط‌مشی‌های امنیتی ممکن است از ذخیره‌سازی موقت اعتبارنامه‌ها (credential caching) پشتیبانی کنند تا به کاربر اجازه داده شود برای مدتی بدون نیاز به احراز هویت مجدد، \fBsudo\fR را دوباره اجرا کند. به‌طور پیش‌فرض، خط‌مشی \fIsudoers\fR اعتبارنامه‌ها را بر پایه هر ترمینال به مدت 15 دقیقه ذخیره می‌کند. برای اطلاعات بیشتر گزینه‌های \fItimestamp_type\fR و \fItimestamp_timeout\fR در sudoers(5) را ببینید. با اجرای \fBsudo\fR به همراه گزینه \fB\-v\fR، کاربر می‌تواند بدون اجرای یک \fIcommand\fR، اعتبارنامه‌های ذخیره‌شده را به‌روزرسانی کند. .PP در سیستم‌هایی که \fBsudo\fR روش اصلی دستیابی به امتیازات کاربر ارشد است، اجتناب از خطاهای نگارشی (syntax errors) در فایل‌های پیکربندی خط‌مشی امنیتی الزامی است. برای خط‌مشی امنیتی پیش‌فرض، sudoers(5)، تغییرات در فایل‌های پیکربندی باید با استفاده از ابزار کاربردی visudo(8) انجام شود که تضمین می‌کند هیچ خطای نگارشی ایجاد نخواهد شد. .PP هنگامی که به عنوان \fBsudoedit\fR فراخوانی شود، گزینه \fB\-e\fR (که در ادامه توضیح داده شده است) به‌صورت ضمنی اعمال می‌شود. .PP خط‌مشی‌های امنیتی و پلاگین‌های حسابرسی ممکن است تلاش‌های موفق و ناموفق برای اجرای \fBsudo\fR را ثبت کنند. اگر یک پلاگین I/O پیکربندی شده باشد، ورودی و خروجی \fIcommand\fR در حال اجرا نیز ممکن است ثبت گردد. .SH "گزینه‌ها (OPTIONS)" گزینه‌ها به شرح زیر هستند: .TP 8n \fB\-A\fR, \fB\--askpass\fR به‌طور معمول، اگر \fBsudo\fR به گذرواژه نیاز داشته باشد، آن را از ترمینال کاربر می‌خواند. اگر گزینه \fB\-A\fR (\fIaskpass\fR) مشخص شده باشد، یک برنامه کمکی (احتمالاً گرافیکی) اجرا می‌شود تا گذرواژه کاربر را بخواند و آن را در خروجی استاندارد بنویسد. اگر متغیر محیطی \fRSUDO_ASKPASS\fR تنظیم شده باشد، مسیر برنامه کمکی را مشخص می‌کند. در غیر این صورت، اگر فایل sudo.conf(5) حاوی خطی باشد که برنامه askpass را مشخص کند، از آن مقدار استفاده خواهد شد. برای مثال: .nf .sp .RS 12n # Path to askpass helper program Path askpass /usr/X11R6/bin/ssh-askpass .RE .fi .RS 8n .sp اگر هیچ برنامه askpass در دسترس نباشد، \fBsudo\fR با یک خطا خارج خواهد شد. .RE .TP 8n \fB\-B\fR, \fB\--bell\fR هنگامی که ترمینال وجود دارد، به عنوان بخشی از اعلان گذرواژه زنگ (bell) را به صدا درمی‌آورد. این گزینه در صورت استفاده از برنامه askpass هیچ اثری ندارد. .TP 8n \fB\-b\fR, \fB\--background\fR دستور \fIcommand\fR داده‌شده را در پس‌زمینه اجرا می‌کند. امکان استفاده از کنترل کارهای پوسته (shell job control) برای دستکاری فرایندهای پس‌زمینه‌ای که توسط \fBsudo\fR شروع شده‌اند وجود ندارد. اکثر \fIcommand\fRهای تعاملی در حالت پس‌زمینه به درستی کار نخواهند کرد. .TP 8n \fB\-C\fR \fInum\fR, \fB\--close-from\fR=\fInum\fR تمام توصیف‌کننده‌های فایل بزرگتر یا مساوی با \fInum\fR را قبل از اجرای یک \fIcommand\fR می‌بندد. مقادیر کمتر از سه مجاز نیستند. به‌طور پیش‌فرض، \fBsudo\fR هنگام اجرای یک \fIcommand\fR، تمام توصیف‌کننده‌های فایل باز به جز ورودی استاندارد، خروجی استاندارد و خطای استاندارد را می‌بندد. خط‌مشی امنیتی ممکن است توانایی کاربر را برای استفاده از این گزینه محدود کند. خط‌مشی \fIsudoers\fR تنها زمانی اجازه استفاده از گزینه \fB\-C\fR را می‌دهد که مدیر سیستم گزینه \fIclosefrom_override\fR را فعال کرده باشد. .TP 8n \fB\-D\fR \fIdirectory\fR, \fB\--chdir\fR=\fIdirectory\fR دستور \fIcommand\fR را به جای دایرکتوری کاری فعلی، در \fIdirectory\fR مشخص‌شده اجرا می‌کند. اگر کاربر مجوز مشخص کردن دایرکتوری کاری را نداشته باشد، خط‌مشی امنیتی ممکن است خطایی بازگرداند. .TP 8n \fB\-E\fR, \fB\--preserve-env\fR به خط‌مشی امنیتی اعلام می‌کند که کاربر مایل است متغیرهای محیطی موجود خود را حفظ کند. اگر کاربر مجوز حفظ محیط را نداشته باشد، خط‌مشی امنیتی ممکن است خطایی بازگرداند. .TP 8n \fB\--preserve-env=list\fR به خط‌مشی امنیتی اعلام می‌کند که کاربر مایل است فهرست جداشده با کاما از متغیرهای محیطی را به متغیرهای حفظ‌شده از محیط کاربر بیفزاید. اگر کاربر مجوز حفظ محیط را نداشته باشد، خط‌مشی امنیتی ممکن است خطایی بازگرداند. این گزینه می‌تواند چندین بار مشخص شود. .TP 8n \fB\-e\fR, \fB\--edit\fR یک یا چند \fIfile\fR را به جای اجرای یک \fIcommand\fR ویرایش می‌کند. هنگام استعلام از خط‌مشی امنیتی، رشته "sudoedit" به جای نام مسیر استفاده می‌شود. اگر کاربر توسط خط‌مشی مجاز شناخته شود، مراحل زیر طی می‌شوند: .RS 12n .TP 5n 1.\& نسخه‌های موقتی از فایل‌های مورد نظر برای ویرایش ایجاد می‌شوند و مالک آن‌ها روی کاربر فراخواننده تنظیم می‌شود. .TP 5n 2.\& ویرایشگر مشخص‌شده توسط خط‌مشی برای ویرایش فایل‌های موقت اجرا می‌شود. خط‌مشی \fIsudoers\fR از متغیرهای محیطی \fRSUDO_EDITOR\fR، \fRVISUAL\fR و \fREDITOR\fR (به همین ترتیب) استفاده می‌کند. اگر هیچ‌یک از \fRSUDO_EDITOR\fR، \fRVISUAL\fR یا \fREDITOR\fR تنظیم نشده باشند، نخستین برنامه فهرست‌شده در گزینه \fIeditor\fR در sudoers(5) استفاده می‌شود. .TP 5n 3.\& اگر فایل‌ها تغییر یافته باشند، نسخه‌های موقت به مکان اصلی خود بازگردانده شده و نسخه‌های موقت حذف می‌شوند. .RE .RS 8n .sp برای کمک به جلوگیری از ویرایش فایل‌های غیرمجاز، محدودیت‌های زیر اعمال می‌شوند مگر اینکه به صراحت توسط خط‌مشی امنیتی مجاز شده باشند: .RS 9n .TP 3n \fB\(bu\fR پیوندهای نمادین نباید ویرایش شوند (نسخه 1.8.15 و بالاتر). .TP 3n \fB\(bu\fR هنگامی که دایرکتوری والد توسط کاربر فراخواننده قابل نوشتن باشد، پیوندهای نمادین در امتداد مسیر مورد ویرایش دنبال نمی‌شوند مگر اینکه آن کاربر root باشد (نسخه 1.8.16 و بالاتر). .TP 3n \fB\(bu\fR فایل‌های واقع در دایرکتوری‌ای که توسط کاربر فراخواننده قابل نوشتن است، نباید ویرایش شوند مگر اینکه آن کاربر root باشد (نسخه 1.8.16 و بالاتر). .RE .sp کاربران هرگز مجاز به ویرایش فایل‌های ویژه دستگاه (device special files) نیستند. .sp اگر فایل مشخص‌شده وجود نداشته باشد، ایجاد خواهد شد. بر خلاف اکثر \fIcommand\fRهای اجرا شده توسط \fIsudo\fR، ویرایشگر با محیط بدون تغییر کاربر فراخواننده اجرا می‌شود. اگر فایل موقت پس از ویرایش خالی شود، قبل از نصب از کاربر تأیید خواسته خواهد شد. اگر بنا به دلیلی، \fBsudo\fR نتواند فایلی را با نسخه ویرایش‌شده‌اش به‌روزرسانی کند، کاربر هشداری دریافت خواهد کرد و نسخه ویرایش‌شده در یک فایل موقت باقی خواهد ماند. .RE .TP 8n \fB\-g\fR \fIgroup\fR, \fB\--group\fR=\fIgroup\fR دستور \fIcommand\fR را با گروه اصلی تنظیم‌شده روی \fIgroup\fR به جای گروه اصلی مشخص‌شده در مدخل پایگاه داده گذرواژه کاربر هدف اجرا می‌کند. \fIgroup\fR می‌تواند یک نام گروه یا یک شناسه گروه عددی (GID) باشد که با نویسه \(oq#\(cq پیشوند شده است (برای مثال، \(oq#0\(cq برای GID 0). هنگام اجرای یک \fIcommand\fR به عنوان یک GID، بسیاری از پوسته‌ها نیاز دارند که \(oq#\(cq با یک بک‌اسلش (\(oq\e\(cq) گریزانده شود. اگر گزینه \fB\-u\fR مشخص نشده باشد، \fIcommand\fR به عنوان کاربر فراخواننده اجرا خواهد شد. در هر دو حالت، گروه اصلی روی \fIgroup\fR تنظیم می‌شود. خط‌مشی \fIsudoers\fR اجازه می‌دهد تا زمانی که گزینه \fB\-P\fR در حال استفاده نیست، هر یک از گروه‌های کاربر هدف از طریق گزینه \fB\-g\fR مشخص شود. .TP 8n \fB\-H\fR, \fB\--set-home\fR درخواست می‌کند که خط‌مشی امنیتی متغیر محیطی \fRHOME\fR را روی دایرکتوری خانگی مشخص‌شده توسط مدخل پایگاه داده گذرواژه کاربر هدف تنظیم کند. بسته به خط‌مشی، این ممکن است رفتار پیش‌فرض باشد. .TP 8n \fB\-h\fR, \fB\--help\fR یک پیام راهنمای کوتاه را در خروجی استاندارد نمایش می‌دهد و خارج می‌شود. .TP 8n \fB\-h\fR \fIhost\fR, \fB\--host\fR=\fIhost\fR اگر پلاگین خط‌مشی امنیتی از \fIcommand\fRهای دورست پشتیبانی کند، \fIcommand\fR را روی \fIhost\fR مشخص‌شده اجرا می‌کند. پلاگین \fIsudoers\fR در حال حاضر از اجرای \fIcommand\fRهای دورست پشتیبانی نمی‌کند. این گزینه همچنین می‌تواند همراه با گزینه \fB\-l\fR برای فهرست کردن امتیازات کاربر برای میزبان دوردست استفاده شود. .TP 8n \fB\-i\fR, \fB\--login\fR پوسته مشخص‌شده در مدخل پایگاه داده گذرواژه کاربر هدف را به عنوان یک پوسته ورود (login shell) اجرا می‌کند. این بدان معناست که فایل‌های منبع مختص ورود مانند \fI.profile\fR، \fI.bash_profile\fR یا \fI.login\fR توسط پوسته خوانده خواهند شد. اگر یک \fIcommand\fR مشخص شده باشد، به عنوان یک دستور ساده با استفاده از گزینه \fB\-c\fR به پوسته ارسال می‌شود. \fIcommand\fR و هر \fIarg\fR، پس از گریزانده شدن هر نویسه (شامل فاصله‌ها) با یک بک‌اسلش (\(oq\e\(cq) به جز حروف و ارقام، زیرخط، خط‌تیره و علامت دلار، با فاصله به هم متصل می‌شوند. اگر هیچ \fIcommand\fRی مشخص نشده باشد، یک پوسته تعاملی اجرا می‌شود. \fBsudo\fR تلاش می‌کند تا قبل از اجرای پوسته، به دایرکتوری خانگی آن کاربر برود. \fIcommand\fR با محیطی شبیه به آنچه که یک کاربر در هنگام ورود دریافت می‌کند اجرا می‌شود. اکثر پوسته‌ها هنگامی که یک \fIcommand\fR مشخص شده باشد در مقایسه با یک نشست تعاملی رفتار متفاوتی دارند؛ برای جزئیات به دفترچه راهنمای پوسته مراجعه کنید. بخش \fICommand environment\fR در دفترچه راهنمای sudoers(5) مستند می‌کند که چگونه گزینه \fB\-i\fR محیطی را که یک \fIcommand\fR در هنگام استفاده از خط‌مشی \fIsudoers\fR در آن اجرا می‌شود تحت تأثیر قرار می‌دهد. .TP 8n \fB\-K\fR, \fB\--remove-timestamp\fR مشابه گزینه \fB\-k\fR است، با این تفاوت که تمامی اعتبارنامه‌های ذخیره‌شده کاربر را بدون توجه به ترمینال یا شناسه فرایند والد حذف می‌کند. دفعه بعد که \fBsudo\fR اجرا شود، در صورتی که خط‌مشی امنیتی به احراز هویت نیاز داشته باشد، باید گذرواژه وارد شود. امکان استفاده از گزینه \fB\-K\fR همراه با یک \fIcommand\fR یا گزینه دیگر وجود ندارد. این گزینه نیازی به گذرواژه ندارد. همه خط‌مشی‌های امنیتی از ذخیره‌سازی موقت اعتبارنامه پشتیبانی نمی‌کنند. .TP 8n \fB\-k\fR, \fB\--reset-timestamp\fR هنگامی که بدون \fIcommand\fR استفاده شود، اعتبارنامه‌های ذخیره‌شده موقت کاربر را برای نشست جاری باطل می‌کند. دفعه بعد که \fBsudo\fR در این نشست اجرا شود، اگر خط‌مشی امنیتی نیاز به احراز هویت داشته باشد، باید گذرواژه وارد شود. به‌طور پیش‌فرض، خط‌مشی \fBsudoers\fR از یک رکورد مجزا در حافظه موقت اعتبارنامه برای هر ترمینال (یا شناسه فرایند والد در صورت عدم وجود ترمینال) استفاده می‌کند. این کار از تداخل گزینه \fB\-k\fR با دستورات \fBsudo\fR که در نشست ترمینال دیگری اجرا می‌شوند جلوگیری می‌کند. برای اطلاعات بیشتر گزینه \fItimestamp_type\fR در sudoers(5) را ببینید. این گزینه نیازی به گذرواژه ندارد و برای این اضافه شده است که به کاربر اجازه دهد مجوزهای \fBsudo\fR را از درون یک فایل \fI.logout\fR لغو کند. .sp هنگامی که همراه با یک \fIcommand\fR یا گزینه‌ای که ممکن است نیاز به گذرواژه داشته باشد استفاده شود، این گزینه باعث می‌شود که \fBsudo\fR اعتبارنامه‌های ذخیره‌شده کاربر را نادیده بگیرد. در نتیجه، \fBsudo\fR درخواست گذرواژه خواهد کرد (اگر توسط خط‌مشی امنیتی لازم باشد) و اعتبارنامه‌های ذخیره‌شده کاربر را به‌روزرسانی نخواهد کرد. .sp همه خط‌مشی‌های امنیتی از ذخیره‌سازی موقت اعتبارنامه پشتیبانی نمی‌کنند. .TP 8n \fB\-l\fR, \fB\--list\fR اگر هیچ \fIcommand\fRی مشخص نشده باشد، امتیازات کاربر فراخواننده (یا \fIuser\fR مشخص‌شده توسط گزینه \fB\-U\fR) را روی میزبان فعلی فهرست می‌کند. اگر این گزینه چندین بار مشخص شود و خط‌مشی امنیتی از قالب خروجی با جزئیات پشتیبانی کند، قالب فهرست طولانی‌تری استفاده می‌شود. .sp اگر یک \fIcommand\fR مشخص شده و توسط خط‌مشی امنیتی مجاز باشد، مسیر کامل دستور \fIcommand\fR به همراه هرگونه \fIarg\fR نمایش داده می‌شود. اگر یک \fIcommand\fR مشخص شده باشد اما توسط خط‌مشی مجاز نباشد، \fBsudo\fR با مقدار وضعیت 1 خارج خواهد شد. .TP 8n \fB\-N\fR, \fB\--no-update\fR اعتبارنامه‌های ذخیره‌شده کاربر را حتی اگر کاربر با موفقیت احراز هویت شود، به‌روزرسانی نمی‌کند. بر خلاف پرچم \fB\-k\fR، اعتبارنامه‌های ذخیره‌شده موجود در صورت معتبر بودن استفاده می‌شوند. برای تشخیص اینکه چه زمانی اعتبارنامه‌های ذخیره‌شده کاربر معتبر هستند (یا زمانی که نیازی به احراز هویت نیست)، می‌توان از دستور زیر استفاده کرد: .RS 14n sudo -Nnv .RE .RS 8n .sp همه خط‌مشی‌های امنیتی از ذخیره‌سازی موقت اعتبارنامه پشتیبانی نمی‌کنند. .RE .TP 8n \fB\-n\fR, \fB\--non-interactive\fR از درخواست هرگونه ورودی از کاربر خودداری می‌کند. اگر برای اجرای \fIcommand\fR به گذرواژه نیاز باشد، \fBsudo\fR یک پیام خطا نمایش داده و خارج می‌شود. .TP 8n \fB\-P\fR, \fB\--preserve-groups\fR بردار گروه‌های کاربر فراخواننده را بدون تغییر حفظ می‌کند. به‌طور پیش‌فرض، خط‌مشی \fIsudoers\fR بردار گروه را به فهرست گروه‌هایی که کاربر هدف عضو آن‌ها است مقداردهی اولیه می‌کند. با این حال، شناسه‌های کاربری و گروهی واقعی و مؤثر همچنان متناسب با کاربر هدف تنظیم می‌شوند. .TP 8n \fB\-p\fR \fIprompt\fR, \fB\--prompt\fR=\fIprompt\fR از یک اعلان گذرواژه سفارشی به همراه توالی‌های گریز اختیاری استفاده می‌کند. توالی‌های گریز درصدی (\(oq%\(cq) زیر توسط خط‌مشی \fIsudoers\fR پشتیبانی می‌شوند: .PP .RS 8n .PD 0 .TP 4n %H به نام میزبان به همراه نام دامنه بسط می‌یابد (تنها در صورتی که نام میزبان دستگاه کاملاً واجد شرایط باشد یا گزینه \fIfqdn\fR در sudoers(5) تنظیم شده باشد) .PD .TP 4n %h به نام میزبان محلی بدون نام دامنه بسط می‌یابد .TP 4n %p به نام کاربری که گذرواژه‌اش درخواست می‌شود بسط می‌یابد (از پرچم‌های \fIrootpw\fR، \fItargetpw\fR و \fIrunaspw\fR در sudoers(5) پیروی می‌کند) .TP 4n \&%U به نام ورود کاربری که \fIcommand\fR تحت عنوان آن اجرا خواهد شد بسط می‌یابد (به‌طور پیش‌فرض root است مگر اینکه گزینه \fB\-u\fR نیز مشخص شده باشد) .TP 4n %u به نام ورود کاربر فراخواننده بسط می‌یابد .TP 4n %% دو نویسه متوالی \(oq%\(cq به یک نویسه تکی \(oq%\(cq تبدیل می‌شوند .PP اعلان سفارشی بر اعلان پیش‌فرض مشخص‌شده توسط خط‌مشی امنیتی یا متغیر محیطی \fRSUDO_PROMPT\fR ارجحیت دارد. در سیستم‌هایی که از PAM استفاده می‌کنند، اعلان سفارشی بر اعلان مشخص‌شده توسط یک ماژول PAM نیز ارجحیت خواهد داشت مگر اینکه پرچم \fIpassprompt_override\fR در \fIsudoers\fR غیرفعال شده باشد. .RE .TP 8n \fB\-R\fR \fIdirectory\fR, \fB\--chroot\fR=\fIdirectory\fR قبل از اجرای \fIcommand\fR، به دایرکتوری ریشه \fIdirectory\fR مشخص‌شده تغییر مکان می‌دهد (ببینید: chroot(8)). اگر کاربر مجوز مشخص کردن دایرکتوری ریشه را نداشته باشد، خط‌مشی امنیتی ممکن است خطایی بازگرداند. .TP 8n \fB\-r\fR \fIrole\fR, \fB\--role\fR=\fIrole\fR دستور \fIcommand\fR را با بافت امنیتی SELinux که شامل \fIrole\fR مشخص‌شده است اجرا می‌کند. .TP 8n \fB\-S\fR, \fB\--stdin\fR اعلان را در خطای استاندارد می‌نویسد و گذرواژه را به جای استفاده از دستگاه ترمینال، از ورودی استاندارد می‌خواند. .TP 8n \fB\-s\fR, \fB\--shell\fR پوسته مشخص‌شده توسط متغیر محیطی \fRSHELL\fR (در صورت تنظیم بودن) یا پوسته مشخص‌شده در مدخل پایگاه داده گذرواژه کاربر فراخواننده را اجرا می‌کند. اگر یک \fIcommand\fR مشخص شده باشد، با استفاده از گزینه \fB\-c\fR به عنوان یک دستور ساده به پوسته منتقل می‌شود. \fIcommand\fR و هر \fIarg\fR، پس از گریزانده شدن هر نویسه (شامل فاصله) با یک بک‌اسلش (\(oq\e\(cq) به جز حروف و ارقام، زیرخط، خط‌تیره و علامت دلار، با فاصله به هم متصل می‌شوند. اگر هیچ \fIcommand\fRی مشخص نشده باشد، یک پوسته تعاملی اجرا می‌شود. اکثر پوسته‌ها هنگامی که یک \fIcommand\fR مشخص شده باشد در مقایسه با یک نشست تعاملی رفتار متفاوتی دارند؛ برای جزئیات به دفترچه راهنمای پوسته مراجعه کنید. .TP 8n \fB\-t\fR \fItype\fR, \fB\--type\fR=\fItype\fR دستور \fIcommand\fR را با بافت امنیتی SELinux که شامل \fItype\fR مشخص‌شده است اجرا می‌کند. اگر هیچ \fItype\fRی مشخص نشده باشد، نوع پیش‌فرض از نقش مشتق می‌شود. .TP 8n \fB\-U\fR \fIuser\fR, \fB\--other-user\fR=\fIuser\fR در ارتباط با گزینه \fB\-l\fR برای فهرست کردن امتیازات \fIuser\fR به جای کاربر فراخواننده استفاده می‌شود. خط‌مشی امنیتی ممکن است فهرست کردن امتیازات کاربران دیگر را محدود کند. هنگام استفاده از خط‌مشی \fIsudoers\fR، گزینه \fB\-U\fR محدود به کاربر root و کاربرانی است که دارای امتیاز \(lqlist\(rq برای \fIuser\fR مشخص‌شده هستند یا توانایی اجرای هر \fIcommand\fRی را به عنوان root یا \fIuser\fR روی میزبان فعلی دارند. .TP 8n \fB\-T\fR \fItimeout\fR, \fB\--command-timeout\fR=\fItimeout\fR برای تنظیم یک مهلت زمانی (timeout) برای \fIcommand\fR استفاده می‌شود. اگر مهلت زمانی قبل از خروج \fIcommand\fR منقضی شود، \fIcommand\fR خاتمه داده خواهد شد. خط‌مشی امنیتی ممکن است توانایی کاربر را برای تنظیم مهلت‌های زمانی محدود کند. خط‌مشی \fIsudoers\fR نیاز دارد که مهلت‌های زمانی مشخص‌شده توسط کاربر به صراحت فعال شده باشند. .TP 8n \fB\-u\fR \fIuser\fR, \fB\--user\fR=\fIuser\fR دستور \fIcommand\fR را به عنوان کاربری غیر از کاربر هدف پیش‌فرض (معمولاً \fBroot\fR) اجرا می‌کند. \fIuser\fR می‌تواند یک نام کاربری یا یک شناسه کاربری عددی (UID) باشد که با نویسه \(oq#\(cq پیشوند شده است (برای مثال، \(oq#0\(cq برای UID 0). هنگام اجرای \fIcommand\fRها به عنوان یک UID، بسیاری از پوسته‌ها نیاز دارند که \(oq#\(cq با یک بک‌اسلش (\(oq\e\(cq) گریزانده شود. برخی از خط‌مشی‌های امنیتی ممکن است UIDها را به موارد فهرست‌شده در پایگاه داده گذرواژه محدود کنند. خط‌مشی \fIsudoers\fR تا زمانی که گزینه \fItargetpw\fR تنظیم نشده باشد، اجازه استفاده از UIDهایی را می‌دهد که در پایگاه داده گذرواژه نیستند. سایر خط‌مشی‌های امنیتی ممکن است از این قابلیت پشتیبانی نکنند. .TP 8n \fB\-V\fR, \fB\--version\fR رشته نسخه \fBsudo\fR و همچنین رشته نسخه هر پلاگین پیکربندی‌شده را چاپ می‌کند. اگر کاربر فراخواننده از قبل root باشد، گزینه \fB\-V\fR گزینه‌های ارسال‌شده به configure در زمان ساخت \fBsudo\fR را نمایش می‌دهد؛ پلاگین‌ها ممکن است اطلاعات بیشتری مانند گزینه‌های پیش‌فرض را نمایش دهند. .TP 8n \fB\-v\fR, \fB\--validate\fR اعتبارنامه‌های ذخیره‌شده موقت کاربر را به‌روزرسانی می‌کند و در صورت لزوم هویت کاربر را احراز می‌نماید. برای پلاگین \fIsudoers\fR، این امر مهلت زمانی \fBsudo\fR را به‌طور پیش‌فرض به مدت 15 دقیقه دیگر تمدید می‌کند، اما هیچ \fIcommand\fRی را اجرا نمی‌کند. همه خط‌مشی‌های امنیتی از اعتبارنامه‌های ذخیره‌شده پشتیبانی نمی‌کنند. .TP 8n \fB\--\fR از \fB\--\fR برای تعیین پایان گزینه‌های \fBsudo\fR استفاده می‌شود. گزینه‌های بعدی به \fIcommand\fR منتقل می‌شوند. .PP گزینه‌هایی که یک مقدار می‌گیرند، فقط یک‌بار می‌توانند مشخص شوند، مگر اینکه در توضیحات طور دیگری قید شده باشد. این کار برای کمک به محافظت در برابر مشکلاتی است که توسط اسکریپت‌های ضعیف نوشته‌شده که \fBsudo\fR را با ورودی کنترل‌شده توسط کاربر فراخوانی می‌کنند، ایجاد می‌شوند. .PP متغیرهای محیطی که باید برای \fIcommand\fR تنظیم شوند نیز ممکن است به عنوان گزینه‌هایی به \fBsudo\fR به صورت \fIVAR\fR=\fIvalue\fR ارسال شوند، برای مثال \fRLD_LIBRARY_PATH\fR=\fI/usr/local/pkg/lib\fR. متغیرهای محیطی ممکن است مشمول محدودیت‌های اعمال‌شده توسط پلاگین خط‌مشی امنیتی باشند. خط‌مشی \fIsudoers\fR متغیرهای محیطی ارسال‌شده به عنوان گزینه را با یک تفاوت مهم تحت همان محدودیت‌های متغیرهای محیطی موجود قرار می‌دهد. اگر گزینه \fIsetenv\fR در \fIsudoers\fR تنظیم شده باشد، دستور \fIcommand\fR برای اجرا دارای برچسب \fRSETENV\fR باشد یا دستور \fIcommand\fR تطبیق‌داده‌شده برابر با \fBALL\fR باشد، کاربر ممکن است متغیرهایی را تنظیم کند که در غیر این صورت ممنوع بودند. برای اطلاعات بیشتر sudoers(5) را ببینید. .SH "اجرای دستور (COMMAND EXECUTION)" هنگامی که \fBsudo\fR یک \fIcommand\fR را اجرا می‌کند، خط‌مشی امنیتی محیط اجرای \fIcommand\fR را مشخص می‌سازد. به‌طور معمول، شناسه‌های کاربری و گروهی واقعی و مؤثر به گونه‌ای تنظیم می‌شوند که با شناسه‌های کاربر هدف، همان‌طور که در پایگاه داده گذرواژه مشخص شده است، مطابقت داشته باشند و بردار گروه بر اساس پایگاه داده گروه مقداردهی اولیه می‌شود (مگر اینکه گزینه \fB\-P\fR مشخص شده باشد). .PP پارامترهای زیر ممکن است توسط خط‌مشی امنیتی مشخص شوند: .TP 3n \fB\(bu\fR شناسه کاربری (user-ID) واقعی و مؤثر .TP 3n \fB\(bu\fR شناسه گروهی (group-ID) واقعی و مؤثر .TP 3n \fB\(bu\fR شناسه‌های گروهی تکمیلی .TP 3n \fB\(bu\fR فهرست محیط (متغیرهای محیطی) .TP 3n \fB\(bu\fR دایرکتوری کاری جاری .TP 3n \fB\(bu\fR ماسک حالت ایجاد فایل (umask) .TP 3n \fB\(bu\fR نقش و نوع SELinux .TP 3n \fB\(bu\fR اولویت زمان‌بندی (همان مقدار nice) .SS "مدل فرایند (Process model)" دو روش متمایز وجود دارد که \fBsudo\fR می‌تواند یک \fIcommand\fR را اجرا کند. .PP اگر یک پلاگین ثبت وقایع I/O برای ثبت ورودی/خروجی ترمینال پیکربندی شده باشد، یا اگر خط‌مشی امنیتی به صراحت آن را درخواست کند، یک شبه‌ترمینال جدید (\(lqpty\(rq) تخصیص می‌یابد و از fork(2) برای ایجاد یک فرایند \fBsudo\fR دوم به نام \fImonitor\fR (ناظر) استفاده می‌شود. فرایند \fImonitor\fR یک نشست ترمینال جدید با رهبری خود و با pty به عنوان ترمینال کنترل‌کننده ایجاد می‌کند، مجدداً fork(2) را فراخوانی می‌کند، محیط اجرا را همان‌طور که در بالا شرح داده شد راه‌اندازی می‌کند و سپس از فراخوان سیستمی execve(2) برای اجرای \fIcommand\fR در فرایند فرزند استفاده می‌نماید. فرایند \fImonitor\fR برای رله کردن سیگنال‌های کنترل کار (job control) بین ترمینال کاربر و pty که \fIcommand\fR در آن در حال اجرا است، وجود دارد. این امر تعلیق (suspend) و ازسرگیری (resume) عادی \fIcommand\fR را ممکن می‌سازد. بدون \fImonitor\fR، دستور \fIcommand\fR در وضعیتی قرار می‌گرفت که استاندارد POSIX آن را \(lqگروه فرایند یتیم (orphaned process group)\(rq می‌نامد و هیچ سیگنال کنترل کاری را از هسته دریافت نمی‌کرد. هنگامی که \fIcommand\fR خارج می‌شود یا توسط یک سیگنال خاتمه می‌یابد، \fImonitor\fR وضعیت خروج \fIcommand\fR را به فرایند اصلی \fBsudo\fR منتقل کرده و خارج می‌شود. پس از دریافت وضعیت خروج \fIcommand\fR، فرایند اصلی \fBsudo\fR وضعیت خروج \fIcommand\fR را به تابع close خط‌مشی امنیتی و همچنین تابع close هر پلاگین حسابرسی پیکربندی‌شده ارسال کرده و خارج می‌شود. .PP اگر از pty استفاده نشود، \fBsudo\fR فراخوان fork(2) را صدا می‌زند، محیط اجرا را همان‌طور که در بالا شرح داده شد آماده می‌کند و از فراخوان سیستمی execve(2) برای اجرای \fIcommand\fR در فرایند فرزند استفاده می‌نماید. فرایند اصلی \fBsudo\fR صبر می‌کند تا \fIcommand\fR کامل شود، سپس وضعیت خروج \fIcommand\fR را به تابع close خط‌مشی امنیتی و تابع close هر پلاگین حسابرسی پیکربندی‌شده ارسال کرده و خارج می‌شود. به عنوان یک حالت خاص، اگر پلاگین خط‌مشی تابع close را تعریف نکرده باشد، \fBsudo\fR به جای اینکه ابتدا fork(2) را صدا بزند، \fIcommand\fR را مستقیماً اجرا خواهد کرد. پلاگین خط‌مشی \fIsudoers\fR تنها زمانی تابع close را تعریف می‌کند که ثبت وقایع I/O فعال باشد، یک pty مورد نیاز باشد، یک نقش SELinux مشخص شده باشد، \fIcommand\fR یک مهلت زمانی وابسته داشته باشد، یا گزینه‌های \fIpam_session\fR یا \fIpam_setcred\fR فعال باشند. هر دوی \fIpam_session\fR و \fIpam_setcred\fR به‌طور پیش‌فرض در سیستم‌های استفاده‌کننده از PAM فعال هستند. .PP در سیستم‌هایی که از PAM استفاده می‌کنند، تابع close خط‌مشی امنیتی مسئول بستن نشست PAM است. این تابع همچنین ممکن است وضعیت خروج \fIcommand\fR را ثبت کند. .SS "مدیریت سیگنال‌ها (Signal handling)" هنگامی که \fIcommand\fR به عنوان فرزند فرایند \fBsudo\fR اجرا می‌شود، \fBsudo\fR سیگنال‌هایی را که دریافت می‌کند به \fIcommand\fR رله خواهد کرد. سیگنال‌های \fRSIGINT\fR و \fRSIGQUIT\fR فقط زمانی رله می‌شوند که \fIcommand\fR در یک pty جدید اجرا شده باشد یا زمانی که سیگنال توسط یک فرایند کاربری ارسال شده باشد، نه هسته. این امر از دریافت دو باره \fRSIGINT\fR توسط \fIcommand\fR در هر بار فشار دادن control-C توسط کاربر جلوگیری می‌کند. برخی سیگنال‌ها، مانند \fRSIGSTOP\fR و \fRSIGKILL\fR، قابل دریافت و گرفتن نیستند و بنابراین به \fIcommand\fR رله نخواهند شد. به عنوان یک قاعده کلی، زمانی که مایل به تعلیق یک \fIcommand\fR در حال اجرا توسط \fBsudo\fR هستید، باید به جای \fRSIGSTOP\fR از \fRSIGTSTP\fR استفاده شود. .PP به عنوان یک حالت خاص، \fBsudo\fR سیگنال‌هایی را که توسط همان \fIcommand\fR در حال اجرا ارسال شده باشند، رله نخواهد کرد. این کار مانع از کشته شدن تصادفی \fIcommand\fR توسط خودش می‌شود. در برخی سیستم‌ها، ابزار reboot(8) قبل از راه‌اندازی مجدد سیستم، سیگنال \fRSIGTERM\fR را به تمامی فرایندهای غیرسیستمی غیر از خودش ارسال می‌کند. این امر مانع از رله کردن سیگنال \fRSIGTERM\fR دریافتی توسط \fBsudo\fR به reboot(8) می‌شود، که در غیر این صورت ممکن بود قبل از ریبوت واقعی سیستم خارج شود و سیستم را در وضعیتی نیمه‌مرده مشابه حالت تک‌کاربره رها کند. با این حال، توجه داشته باشید که این بررسی فقط برای \fIcommand\fR اجراشده توسط \fBsudo\fR اعمال می‌شود و شامل سایر فرایندهایی که ممکن است آن \fIcommand\fR ایجاد کند نمی‌شود. در نتیجه، اجرای اسکریپتی که reboot(8) یا shutdown(8) را از طریق \fBsudo\fR فراخوانی می‌کند ممکن است باعث شود سیستم به این وضعیت نامشخص بیفتد، مگر اینکه reboot(8) یا shutdown(8) به جای \fBsystem\fR() (که یک پوسته را بین \fIcommand\fR و فرایند فراخواننده حائل می‌کند)، با استفاده از خانواده توابع \fBexec\fR() اجرا شوند. .SS "پلاگین‌ها (Plugins)" پلاگین‌ها ممکن است از طریق دستورالعمل‌های \fIPlugin\fR در فایل sudo.conf(5) مشخص شوند. آن‌ها ممکن است به عنوان اشیاء اشتراکی پویا (dynamic shared objects) بارگیری شوند (در سیستم‌هایی که از آن‌ها پشتیبانی می‌کنند)، یا مستقیماً در باینری \fBsudo\fR کامپایل گردند. اگر هیچ فایل sudo.conf(5) وجود نداشته باشد، یا اگر حاوی هیچ خط \fIPlugin\fR نباشد، \fBsudo\fR از sudoers(5) برای پلاگین‌های خط‌مشی، حسابرسی و ثبت وقایع I/O استفاده خواهد کرد. برای جزئیات مربوط به فایل \fI/etc/sudo.conf\fR راهنمای sudo.conf(5) و برای اطلاعات بیشتر درباره معماری پلاگین \fBsudo\fR راهنمای sudo_plugin(5) را ببینید. .SH "مقادیر خروج (EXIT VALUE)" پس از اجرای موفقیت‌آمیز یک \fIcommand\fR، وضعیت خروج از \fBsudo\fR، وضعیت خروج برنامه‌ای خواهد بود که اجرا شده است. اگر \fIcommand\fR به دلیل دریافت یک سیگنال خاتمه یافته باشد، \fBsudo\fR همان سیگنالی را که باعث خاتمه \fIcommand\fR شده است به خودش ارسال خواهد کرد. .PP اگر گزینه \fB\-l\fR بدون یک \fIcommand\fR مشخص شده باشد، در صورتی که کاربر مجاز به اجرای \fBsudo\fR باشد و با موفقیت احراز هویت شده باشد (همان‌طور که توسط خط‌مشی امنیتی لازم است)، \fBsudo\fR با مقدار 0 خارج خواهد شد. اگر یک \fIcommand\fR همراه با گزینه \fB\-l\fR مشخص شده باشد، مقدار خروج تنها در صورتی 0 خواهد بود که \fIcommand\fR توسط خط‌مشی امنیتی مجاز باشد، در غیر این صورت 1 خواهد بود. .PP اگر خطای احراز هویت، مشکل پیکربندی/مجوز وجود داشته باشد، یا اگر \fIcommand\fR داده‌شده نتواند اجرا شود، \fBsudo\fR با مقدار 1 خارج می‌شود. در حالت اخیر، رشته خطا در خطای استاندارد چاپ می‌شود. اگر \fBsudo\fR نتواند روی یک یا چند مدخل در \fRPATH\fR کاربر فراخوان stat(2) را اجرا کند، خطایی در خطای استاندارد چاپ می‌شود. (اگر دایرکتوری وجود نداشته باشد یا واقعاً یک دایرکتوری نباشد، مدخل نادیده گرفته شده و هیچ خطایی چاپ نمی‌شود.) این حالت در شرایط عادی نباید رخ دهد. رایج‌ترین دلیل برای اینکه stat(2) پیام \(lqpermission denied\(rq برگرداند این است که شما در حال اجرای یک automounter هستید و یکی از دایرکتوری‌های موجود در \fRPATH\fR شما روی ماشینی قرار دارد که در حال حاضر غیرقابل دسترس است. .SH "نکات امنیتی (SECURITY NOTES)" دستور \fBsudo\fR تلاش می‌کند هنگام اجرای \fIcommand\fRهای خارجی ایمن عمل کند. .PP برای جلوگیری از جعل دستور (command spoofing)، \fBsudo\fR هنگام جستجوی یک \fIcommand\fR در \fRPATH\fR کاربر، مقادیر "." و "" (که هر دو نشان‌دهنده دایرکتوری جاری هستند) را در آخر بررسی می‌کند (اگر یکی از آن‌ها یا هر دو در \fRPATH\fR باشند). بسته به خط‌مشی امنیتی، متغیر محیطی \fRPATH\fR کاربر ممکن است اصلاح شود، جایگزین گردد یا بدون تغییر به برنامه‌ای که \fBsudo\fR اجرا می‌کند ارسال شود. .PP کاربران \fIهرگز\fR نباید دارای امتیازات \fBsudo\fR برای اجرای فایل‌هایی باشند که توسط کاربر قابل نوشتن هستند یا در دایرکتوری‌ای قرار دارند که توسط کاربر قابل نوشتن است. اگر کاربر بتواند \fIcommand\fR را تغییر داده یا جایگزین کند، هیچ راهی برای محدود کردن اینکه چه \fIcommand\fRهای اضافی دیگری را می‌تواند اجرا نماید وجود ندارد. .PP به‌طور پیش‌فرض، \fBsudo\fR تنها \fIcommand\fRی را که به صراحت اجرا می‌کند ثبت خواهد کرد. اگر کاربری دستوری مانند \(oqsudo su\(cq یا \(oqsudo sh\(cq را اجرا کند، \fIcommand\fRهای بعدی که از آن پوسته اجرا می‌شوند مشمول خط‌مشی امنیتی \fBsudo\fR نخواهند بود. همین امر برای \fIcommand\fRهایی که امکان گریز به پوسته (shell escapes) را فراهم می‌کنند نیز صادق است (شامل اکثر ویرایشگرها). اگر ثبت وقایع I/O فعال باشد، ورودی و/یا خروجی \fIcommand\fRهای بعدی ثبت خواهد شد، اما گزارش‌های وقایع سنتی برای آن \fIcommand\fRها وجود نخواهد داشت. به همین دلیل، هنگام دسترسی دادن به کاربران برای اجرای \fIcommand\fRها از طریق \fBsudo\fR، باید دقت شود تا بررسی گردد که \fIcommand\fR سهواً یک پوسته موثر root در اختیار کاربر قرار ندهد. برای اطلاعات درباره راه‌های رفع این مشکل، بخش \fIPreventing shell escapes\fR در sudoers(5) را ببینید. .PP برای جلوگیری از افشای اطلاعات بالقوه حساس، \fBsudo\fR به‌طور پیش‌فرض در حین اجرای خود تخلیه حافظه هسته (core dumps) را غیرفعال می‌کند (آن‌ها برای \fIcommand\fRی که اجرا می‌شود مجدداً فعال می‌گردند). این رسم تاریخی مربوط به زمانی است که اکثر سیستم‌های عامل به فرایندهای set-user-ID اجازه می‌دادند به‌طور پیش‌فرض core dump ایجاد کنند. برای کمک به اشکال‌زدایی کرش‌های \fBsudo\fR، ممکن است بخواهید با تنظیم \(lqdisable_coredump\(rq روی false در فایل sudo.conf(5) به صورت زیر، تخلیه حافظه هسته را مجدداً فعال کنید: .nf .sp .RS 4n Set disable_coredump false .RE .fi .PP برای اطلاعات بیشتر راهنمای sudo.conf(5) را ببینید. .SH "متغیرهای محیطی (ENVIRONMENT)" دستور \fBsudo\fR از متغیرهای محیطی زیر استفاده می‌کند. خط‌مشی امنیتی بر محتوای واقعی محیط \fIcommand\fR کنترل دارد. .TP 17n \fREDITOR\fR ویرایشگر پیش‌فرض برای استفاده در حالت \fB\-e\fR (sudoedit) در صورتی که نه \fRSUDO_EDITOR\fR و نه \fRVISUAL\fR تنظیم نشده باشند. .TP 17n \fRMAIL\fR هنگامی که گزینه \fB\-i\fR مشخص شده باشد، یا زمانی که \fIenv_reset\fR در \fIsudoers\fR فعال باشد (مگر اینکه \fRMAIL\fR در فهرست \fIenv_keep\fR وجود داشته باشد)، روی اسپول ایمیل کاربر هدف تنظیم می‌شود. .TP 17n \fRHOME\fR هنگامی که گزینه‌های \fB\-i\fR یا \fB\-H\fR مشخص شده باشند، هنگامی که گزینه \fB\-s\fR مشخص شده و \fIset_home\fR در \fIsudoers\fR تنظیم شده باشد، زمانی که \fIalways_set_home\fR در \fIsudoers\fR فعال باشد، یا زمانی که \fIenv_reset\fR در \fIsudoers\fR فعال باشد و \fRHOME\fR در فهرست \fIenv_keep\fR حضور نداشته باشد، روی دایرکتوری خانگی کاربر هدف تنظیم می‌شود. .TP 17n \fRLOGNAME\fR هنگامی که گزینه \fB\-i\fR مشخص شده باشد، زمانی که گزینه \fIset_logname\fR در \fIsudoers\fR فعال باشد، یا زمانی که گزینه \fIenv_reset\fR در \fIsudoers\fR فعال باشد (مگر اینکه \fRLOGNAME\fR در فهرست \fIenv_keep\fR حضور داشته باشد)، روی نام ورود کاربر هدف تنظیم می‌شود. .TP 17n \fRPATH\fR ممکن است توسط خط‌مشی امنیتی بازنویسی (override) شود. .TP 17n \fRSHELL\fR برای تعیین پوسته‌ای که با گزینه \fB\-s\fR اجرا می‌شود استفاده می‌گردد. .TP 17n \fRSUDO_ASKPASS\fR مسیر یک برنامه کمکی را مشخص می‌کند که در صورت عدم دسترسی به ترمینال یا در صورت مشخص بودن گزینه \fB\-A\fR، برای خواندن گذرواژه استفاده می‌شود. .TP 17n \fRSUDO_COMMAND\fR روی دستور \fIcommand\fR اجراشده توسط sudo، شامل هرگونه \fIarg\fR تنظیم می‌شود. آرگومان‌های \fIarg\fR برای جلوگیری از خطای بالقوه اجرا، در 4096 نویسه کوتاه می‌شوند. .TP 17n \fRSUDO_EDITOR\fR ویرایشگر پیش‌فرض برای استفاده در حالت \fB\-e\fR (sudoedit). .TP 17n \fRSUDO_GID\fR روی شناسه گروهی (GID) کاربری که sudo را فراخوانی کرده تنظیم می‌شود. .TP 17n \fRSUDO_PROMPT\fR به عنوان اعلان گذرواژه پیش‌فرض استفاده می‌شود مگر اینکه گزینه \fB\-p\fR مشخص شده باشد. .TP 17n \fRSUDO_PS1\fR در صورت تنظیم بودن، \fRPS1\fR روی مقدار آن برای برنامه‌ای که در حال اجرا است تنظیم می‌شود. .TP 17n \fRSUDO_UID\fR روی شناسه کاربری (UID) کاربری که sudo را فراخوانی کرده تنظیم می‌شود. .TP 17n \fRSUDO_USER\fR روی نام ورود کاربری که sudo را فراخوانی کرده تنظیم می‌شود. .TP 17n \fRUSER\fR روی همان مقدار \fRLOGNAME\fR که در بالا توضیح داده شد تنظیم می‌شود. .TP 17n \fRVISUAL\fR ویرایشگر پیش‌فرض برای استفاده در حالت \fB\-e\fR (sudoedit) در صورتی که \fRSUDO_EDITOR\fR تنظیم نشده باشد. .SH "فایل‌ها (FILES)" .TP 26n \fI/etc/sudo.conf\fR پیکربندی پیشانه (front-end) \fBsudo\fR .SH "مثال‌ها (EXAMPLES)" مثال‌های زیر فرض می‌کنند که خط‌مشی امنیتی به درستی پیکربندی شده است. .PP برای دریافت فهرست فایل‌های یک دایرکتوری غیرقابل خواندن: .nf .sp .RS 4n $ sudo ls /usr/local/protected .RE .fi .PP برای فهرست کردن دایرکتوری خانگی کاربر yaz روی ماشینی که در آن سیستم فایل حاوی ~yaz به عنوان root صادر (export) نشده است: .nf .sp .RS 4n $ sudo -u yaz ls ~yaz .RE .fi .PP برای ویرایش فایل \fIindex.html\fR به عنوان کاربر www: .nf .sp .RS 4n $ sudoedit -u www ~www/htdocs/index.html .RE .fi .PP برای مشاهده لاگ‌های سیستمی که تنها برای root و کاربران گروه adm قابل دسترسی هستند: .nf .sp .RS 4n $ sudo -g adm more /var/log/syslog .RE .fi .PP برای اجرای یک ویرایشگر به عنوان jim با یک گروه اصلی متفاوت: .nf .sp .RS 4n $ sudoedit -u jim -g audio ~jim/sound.txt .RE .fi .PP برای خاموش کردن یک ماشین: .nf .sp .RS 4n $ sudo shutdown -r +15 "quick reboot" .RE .fi .PP برای تهیه فهرست مصرف دایرکتوری‌های موجود در پارتیشن /home. دستورات \fIcommands\fR در یک زیرپوسته اجرا می‌شوند تا دستور \(oqcd\(cq و تغییر مسیر فایل کار کنند: .nf .sp .RS 4n $ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE" .RE .fi .SH "پیام‌های تشخیصی (DIAGNOSTICS)" پیام‌های خطای تولیدشده توسط \fBsudo\fR شامل موارد زیر است: .TP 6n \fRediting files in a writable directory is not permitted\fR به‌طور پیش‌فرض، \fBsudoedit\fR هنگامی که هر یک از دایرکتوری‌های والد توسط کاربر فراخواننده قابل نوشتن باشد، اجازه ویرایش فایل را نمی‌دهد. این کار از بروز شرایط رقابتی (race condition) که می‌تواند به کاربر اجازه بازنویسی یک فایل اختیاری را بدهد جلوگیری می‌کند. برای اطلاعات بیشتر گزینه \fIsudoedit_checkdir\fR در sudoers(5) را ببینید. .TP 6n \fRediting symbolic links is not permitted\fR به‌طور پیش‌فرض، \fBsudoedit\fR هنگام باز کردن فایل‌ها پیوندهای نمادین را دنبال نمی‌کند. برای اطلاعات بیشتر گزینه \fIsudoedit_follow\fR در sudoers(5) را ببینید. .TP 6n \fReffective uid is not 0, is sudo installed setuid root?\fR دستور \fBsudo\fR با امتیازات root اجرا نشد. فایل باینری \fBsudo\fR باید متعلق به کاربر root باشد و بیت set-user-ID آن تنظیم شده باشد. همچنین، نباید روی یک سیستم فایل که با گزینه \(oqnosuid\(cq سوار (mount) شده است یا روی یک سیستم فایل NFS که uid 0 را به یک uid بدون امتیاز نگاشت می‌کند قرار داشته باشد. .TP 6n \fReffective uid is not 0, is sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?\fR دستور \fBsudo\fR با امتیازات root اجرا نشد. فایل باینری \fBsudo\fR مالک و مجوزهای مناسبی دارد اما همچنان با امتیازات root اجرا نشده است. رایج‌ترین دلیل این امر این است که سیستم فایلی که باینری \fBsudo\fR روی آن قرار دارد با گزینه \(oqnosuid\(cq سوار شده است یا یک سیستم فایل NFS است که uid 0 را به یک uid بدون امتیاز نگاشت می‌کند. .TP 6n \fRfatal error, unable to load plugins\fR خطایی در هنگام بارگیری یا مقداردهی اولیه پلاگین‌های مشخص‌شده در sudo.conf(5) رخ داده است. .TP 6n \fRinvalid environment variable name\fR یک یا چند نام متغیر محیطی مشخص‌شده از طریق گزینه \fB\-E\fR شامل علامت مساوی (\(oq=\(cq) بوده‌اند. آرگومان‌های گزینه \fB\-E\fR باید نام‌های متغیرهای محیطی بدون مقدار وابسته باشند. .TP 6n \fRno password was provided\fR هنگامی که \fBsudo\fR تلاش کرد تا گذرواژه را بخواند، هیچ نویسه‌ای دریافت نکرد. این ممکن است در صورتی رخ دهد که هیچ ترمینالی در دسترس نباشد (یا گزینه \fB\-S\fR مشخص شده باشد) و ورودی استاندارد از \fI/dev/null\fR هدایت شده باشد. .TP 6n \fRa terminal is required to read the password\fR دستور \fBsudo\fR نیاز به خواندن گذرواژه دارد اما سازوکاری برای انجام این کار در دسترس نیست. ترمینالی برای خواندن گذرواژه وجود ندارد، \fBsudo\fR برای خواندن از ورودی استاندارد پیکربندی نشده است، گزینه \fB\-S\fR استفاده نشده است و هیچ برنامه کمکی askpass چه از طریق فایل sudo.conf(5) یا از طریق متغیر محیطی \fRSUDO_ASKPASS\fR مشخص نشده است. .TP 6n \fRno writable temporary directory found\fR دستور \fBsudoedit\fR نتوانست دایرکتوری موقت قابل استفاده‌ای برای ذخیره فایل‌های میانی خود پیدا کند. .TP 6n \fRThe\fR \(lqno new privileges\(rq flag is set, which prevents sudo from running as root. دستور \fBsudo\fR توسط فرایندی اجرا شده است که پرچم \(lqno new privileges\(rq لینوکس برای آن تنظیم شده است. این امر باعث نادیده گرفته شدن بیت set-user-ID هنگام اجرای یک فایل اجرایی می‌شود که مانع از کارکرد \fBsudo\fR خواهد شد. محتمل‌ترین علت این امر، اجرای \fBsudo\fR درون یک کانتینر است که این پرچم را تنظیم کرده است. مستندات را بررسی کنید تا ببینید آیا امکان پیکربندی کانتینر به گونه‌ای که پرچم تنظیم نشود وجود دارد یا خیر. .TP 6n \fRsudo must be owned by uid 0 and have the setuid bit set\fR دستور \fBsudo\fR با امتیازات root اجرا نشد. فایل باینری \fBsudo\fR مالک یا مجوزهای صحیحی ندارد. این فایل باید متعلق به کاربر root باشد و بیت set-user-ID آن تنظیم شده باشد. .TP 6n \fRsudoedit is not supported on this platform\fR اجرای \fBsudoedit\fR تنها در سیستم‌هایی ممکن است که از تنظیم شناسه کاربری موثر پشتیبانی می‌کنند. .TP 6n \fRtimed out reading password\fR کاربر قبل از انقضای مهلت زمانی گذرواژه (به‌طور پیش‌فرض 5 دقیقه)، گذرواژه‌ای وارد نکرد. .TP 6n \fRyou do not exist in the passwd database\fR شناسه کاربری شما در پایگاه داده passwd سیستم وجود ندارد. .TP 6n \fRyou may not specify environment variables in edit mode\fR تنظیم متغیرهای محیطی تنها هنگام اجرای یک \fIcommand\fR امکان‌پذیر است. هنگام ویرایش یک فایل، ویرایشگر با محیط بدون تغییر کاربر اجرا می‌شود. .SH "هشدارها (CAVEATS)" اگر به کاربری اجازه داده شود تا دستورات \fIcommands\fR دلخواهی را از طریق \fBsudo\fR اجرا کند، هیچ راه آسانی برای جلوگیری از دستیابی آن کاربر به پوسته root وجود ندارد. همچنین، بسیاری از برنامه‌ها (مانند ویرایشگرها) به کاربر اجازه می‌دهند تا \fIcommand\fRها را از طریق گریزهای پوسته (shell escapes) اجرا کنند، و در نتیجه بررسی‌های \fBsudo\fR را دور بزنند. با این حال، در اکثر سیستم‌ها می‌توان با قابلیت \fInoexec\fR پلاگین sudoers(5) از گریزهای پوسته جلوگیری کرد. .PP اجرای مستقیم دستور \(oqcd\(cq از طریق sudo بی‌معنی است، برای مثال: .nf .sp .RS 4n $ sudo cd /usr/local/protected .RE .fi .PP زیرا پس از خروج دستور \fIcommand\fR، فرایند والد (پوسته شما) همچنان همان خواهد بود. می‌توان از گزینه \fB\-D\fR برای اجرای یک \fIcommand\fR در یک دایرکتوری \fIdirectory\fR خاص استفاده کرد. .PP اجرای اسکریپت‌های پوسته از طریق \fBsudo\fR می‌تواند همان باگ‌های هسته را آشکار کند که اسکریپت‌های پوسته set-user-ID را در برخی سیستم‌های عامل ناامن می‌سازند (اگر سیستم‌عامل شما دارای دایرکتوری /dev/fd/ باشد، اسکریپت‌های پوسته set-user-ID عموماً ایمن هستند). .SH "تاریخچه (HISTORY)" برای تاریخچه مختصری از sudo، به فایل HISTORY.md در توزیع \fBsudo\fR (https://www.sudo.ws/about/history/) مراجعه کنید. .SH "نویسنده (AUTHOR)" افراد زیادی در طول سال‌ها روی \fBsudo\fR کار کرده‌اند؛ این نسخه عمدتاً شامل کدهای نوشته‌شده توسط افراد زیر است: .sp .RS 6n Todd C. Miller .RE .PP برای فهرست کاملی از افرادی که در توسعه \fBsudo\fR مشارکت داشته‌اند، فایل CONTRIBUTORS.md در توزیع \fBsudo\fR (https://www.sudo.ws/about/contributors/) را ببینید. .SH "گزارش باگ‌ها (REPORTING BUGS)" اگر فکر می‌کنید باگی در \fBsudo\fR پیدا کرده‌اید، می‌توانید گزارش باگ را در https://bugzilla.sudo.ws/ ارسال کنید. .SH "پشتیبانی (SUPPORT)" پشتیبانی رایگان محدود از طریق فهرست پستی sudo-users در دسترس است، برای اشتراک یا جستجو در آرشیوها به https://www.sudo.ws/mailman/listinfo/sudo-users مراجعه کنید. .SH "سلب مسئولیت (DISCLAIMER)" نرم‌افزار \fBsudo\fR به صورت \(lqهمان‌گونه که هست (AS IS)\(rq ارائه می‌شود و هرگونه ضمانت صریح یا ضمنی، از جمله، اما نه محدود به، ضمانت‌های ضمنی قابلیت خرید و فروش و تناسب برای یک هدف خاص سلب می‌شود. برای جزئیات کامل به فایل LICENSE.md توزیع‌شده با \fBsudo\fR یا https://www.sudo.ws/about/license/ مراجعه کنید. .SH "حق نشر (COPYRIGHT)" حق نشر \(co 1994\-1996, 1998\-2005, 2007\-2023 متعلق به Todd C. Miller . .br این نرم‌افزار تحت شرایط مجوز ISC توزیع می‌شود. برای جزئیات کامل به فایل LICENSE.md توزیع‌شده با \fBsudo\fR یا https://www.sudo.ws/about/license/ مراجعه کنید. .SH "همچنین ببینید (SEE ALSO)" su(1), stat(2), login_cap(3), passwd(5), sudo.conf(5), sudo_plugin(5), sudoers(5), sudoers_timestamp(5), sudoreplay(8), visudo(8)