SUDOREPLAY(8) راهنمای مدیر سیستم (System Manager's Manual) SUDOREPLAY(8)

sudoreplay - بازپخش گزارشهای ثبت نشست در sudo

sudoreplay [-FhnRS] [-d dir] [-f filter] [-m num] [-s num] ID[@offset]

sudoreplay [-h] [-d dir] -l [search expression]

ابزار sudoreplay گزارش‌های خروجی ایجاد شده توسط sudo را بازپخش کرده یا فهرست می‌کند. هنگام بازپخش، sudoreplay می‌تواند نشست را به صورت بی‌درنگ (real-time) پخش کند، یا سرعت بازپخش بر اساس گزینه‌های خط فرمان تنظیم شود (سریع‌تر یا کندتر).

شناسه ID باید یک دنباله شش‌نویسه‌ای از ارقام و حروف بزرگ انگلیسی باشد (مانند “0100A5”) یا یک نام مسیر (path name). همچنین ID می‌تواند شامل پسوند اختیاری @offset باشد که برای شروع بازپخش از یک آفست زمانی مشخص به کار می‌رود. مقدار @offset به صورت عددی بر حسب ثانیه از ابتدای نشست همراه با کسر اعشاری اختیاری مشخص می‌شود.

نام‌های مسیر می‌توانند نسبت به دایرکتوری گزارش‌های ورودی/خروجی /var/log/sudo-io باشند (مگر اینکه توسط گزینه -d بازنویسی شود) یا یک مسیر کامل باشند که با نویسه ‘/’ آغاز می‌شود. هنگامی که دستوری از طریق sudo با فعال بودن log_output در فایل sudoers اجرا می‌شود، یک رشته “TSID=ID” از طریق syslog(3) یا در فایل گزارش sudo ثبت می‌شود. همچنین می‌توان ID را با استفاده از حالت فهرست‌گیری (list mode) در sudoreplay تعیین کرد.

در حالت فهرست‌گیری، sudoreplay می‌تواند برای یافتن شناسه یک نشست بر اساس معیارهای متعددی از جمله کاربر، tty، یا دستور اجرا شده استفاده شود.

در حالت بازپخش، اگر ورودی و خروجی استاندارد به یک ترمینال متصل باشند و گزینه -n مشخص نشده باشد، sudoreplay به صورت تعاملی کار خواهد کرد. در حالت تعاملی، sudoreplay تلاش می‌کند اندازه ترمینال را با اندازه نشست مطابقت دهد و مستقیماً روی ترمینال بنویسد (همه ترمینال‌ها از این قابلیت پشتیبانی نمی‌کنند). علاوه بر این، صفحه کلید را بررسی کرده و بر اساس کلیدهای زیر عمل می‌کند:

‘\n’ یا ‘\r’
پرش به رویداد بازپخش بعدی؛ برای مکث‌های طولانی مفید است.
‘ ’ (فاصله / space)
توقف موقت خروجی؛ فشردن هر کلیدی بازپخش را ادامه می‌دهد.
‘<’
کاهش سرعت بازپخش به نصف.
‘>’
دو برابر کردن سرعت بازپخش.

نشست را می‌توان از طریق control-C متوقف کرد. پس از پایان نشست، اگر اندازه ترمینال در طول بازپخش تغییر کرده باشد، به اندازه اولیه خود بازگردانده می‌شود.

گزینه‌ها به شرح زیر هستند:

ذخیره گزارش‌های نشست در دایرکتوری dir به جای دایرکتوری پیش‌فرض، /var/log/sudo-io.
انتخاب اینکه کدام نوع(های) ورودی/خروجی نمایش داده شوند. به طور پیش‌فرض، sudoreplay خروجی استاندارد دستور، خطای استاندارد و خروجی tty را نمایش می‌دهد. آرگومان filter یک فهرست جداشده با کاما است که شامل یک یا چند مورد از موارد زیر است: stdin, stdout, stderr, ttyin, و ttyout.
فعال‌سازی “حالت پیگیری” (“follow mode”). هنگام بازپخش یک نشست، sudoreplay پایان فایل (EOF) را نادیده گرفته و تا زمان تکمیل گزارش به بازپخش ادامه می‌دهد. این ویژگی می‌تواند برای بازپخش نشستی که هنوز در حال اجراست استفاده شود، مشابه دستور “tail -f”. یک فایل گزارش ورودی/خروجی زمانی کامل در نظر گرفته می‌شود که بیت‌های نوشتن (write bits) در فایل زمان‌بندی (timing) نشست پاک شده باشند. نسخه‌های sudo پیش از 1.9.1 بیت‌های نوشتن را پس از اتمام پاک نمی‌کنند.
نمایش یک پیام راهنمای کوتاه در خروجی استاندارد و خروج.
فعال‌سازی “حالت فهرست‌گیری” (“list mode”). در این حالت، sudoreplay نشست‌های موجود را در قالبی شبیه به قالب فایل گزارش sudo و مرتب‌شده بر اساس نام فایل (یا شماره دنباله) فهرست می‌کند. هرگونه نویسه کنترلی موجود در داده‌های گزارش به صورت هشت‌هشتی (octal) با یک نویسه پیشین ‘#’ قالب‌بندی می‌شوند. به عنوان مثال، نویسه تب افقی به صورت ‘#011’ و یک بازگشت به ابتدای سطر (carriage return) تعبیه‌شده به صورت ‘#015’ نمایش داده می‌شود. نویسه‌های فاصله در نام دستور و آرگومان‌ها نیز به صورت هشت‌هشتی قالب‌بندی می‌شوند.

اگر یک search expression (عبارت جستجو) مشخص شده باشد، برای محدود کردن شناسه‌های نمایش داده شده استفاده خواهد شد. یک عبارت از گزاره‌های (predicates) زیر تشکیل می‌شود:

در صورتی که دستور اجرا شده با عبارت منظم گسترده پازیکس (POSIX extended regular expression) pattern تطبیق داشته باشد، درست (true) ارزیابی می‌شود.
در صورتی که دستور با دایرکتوری کاری فعلی مشخص‌شده اجرا شده باشد، درست ارزیابی می‌شود.
در صورتی که دستور در تاریخ date یا پس از آن اجرا شده باشد، درست ارزیابی می‌شود. برای شرح قالب‌های تاریخ و زمان پشتیبانی‌شده، بخش قالب تاریخ و زمان (Date and time format) را ببینید.
در صورتی که دستور با runas_group مشخص‌شده اجرا شده باشد، درست ارزیابی می‌شود. مگر اینکه یک runas_group به طور صریح هنگام اجرای sudo مشخص شده باشد، این فیلد در گزارش خالی خواهد بود.
در صورتی که دستور روی hostname مشخص‌شده اجرا شده باشد، درست ارزیابی می‌شود.
در صورتی که دستور با عنوان runas_user مشخص‌شده اجرا شده باشد، درست ارزیابی می‌شود. به طور پیش‌فرض، sudo دستورات را با عنوان کاربر root اجرا می‌کند.
در صورتی که دستور در تاریخ date یا پیش از آن اجرا شده باشد، درست ارزیابی می‌شود. برای شرح قالب‌های تاریخ و زمان پشتیبانی‌شده، بخش قالب تاریخ و زمان (Date and time format) را ببینید.
در صورتی که دستور روی دستگاه ترمینال مشخص‌شده اجرا شده باشد، درست ارزیابی می‌شود. مقدار tty name باید بدون پیشوند /dev/ مشخص شود؛ به عنوان مثال، tty01 به جای /dev/tty01.
در صورتی که شناسه با دستوری مطابقت داشته باشد که توسط user name اجرا شده است، درست ارزیابی می‌شود.

گزاره‌ها را می‌توان به کوتاه‌ترین رشته یکتا خلاصه کرد.

گزاره‌ها را می‌توان با استفاده از عملگرهای and, or, و ! و همچنین گروه‌بندی با ‘(’ و ‘)’ ترکیب کرد (پرانتزها معمولاً در شل باید اسکیپ شوند). عملگر and اختیاری است؛ گزاره‌های مجاور دارای یک and ضمنی هستند مگر اینکه توسط یک or از یکدیگر جدا شده باشند.

تعیین یک کران بالا برای حداکثر زمان انتظار میان فشردن کلیدها یا داده‌های خروجی. به طور پیش‌فرض، sudoreplay تاخیرهای بین فشردن کلیدها یا خروجی برنامه را با دقت بازتولید می‌کند. با این حال، زمانی که نشست شامل مکث‌های طولانی باشد، این موضوع می‌تواند خسته‌کننده باشد. هنگامی که گزینه -m مشخص شود، sudoreplay این مکث‌ها را به حداکثر max_wait ثانیه محدود می‌کند. این مقدار می‌تواند به عنوان یک عدد ممیز شناور (مانند 2.5) مشخص شود. مقدار max_wait صفر یا کمتر، مکث‌ها را به طور کامل حذف می‌کند.
عدم درخواست ورودی از کاربر یا عدم تلاش برای تغییر اندازه ترمینال. نشست در خروجی استاندارد نوشته می‌شود و نه مستقیماً در ترمینال کاربر.
عدم تلاش برای تغییر اندازه ترمینال جهت مطابقت با اندازه ترمینال نشست.
انتظار در مدت زمانی که دستور تعلیق (suspend) شده بود. به طور پیش‌فرض، sudoreplay بازه زمانی بین تعلیق دستور و از سرگیری مجدد آن را نادیده می‌گیرد. اگر گزینه -S مشخص شود، sudoreplay به جای نادیده گرفتن، منتظر خواهد ماند.
این گزینه باعث می‌شود که sudoreplay تعداد ثانیه‌هایی را که بین فشردن کلیدها یا خروجی برنامه منتظر می‌ماند، تنظیم کند. از این گزینه می‌توان برای کندتر یا سریع‌تر کردن نمایش استفاده کرد. به عنوان مثال، یک speed_factor با مقدار 2 خروجی را دو برابر سریع‌تر می‌کند، در حالی که speed_factor با مقدار .5 خروجی را دو برابر کندتر می‌کند.
چاپ شماره نسخه sudoreplay و خروج.

زمان و تاریخ را می‌توان به روش‌های مختلفی مشخص کرد، قالب‌های رایج عبارتند از:

زمان ۲۴ ساعته را می‌توان به جای am/pm به کار برد.
زمان ۲۴ ساعته را می‌توان به جای am/pm استفاده کرد و نام ماه‌ها و روزها می‌تواند کوتاه شود. نام ماه و روز هفته باید به زبان انگلیسی مشخص شود.
قالب زمان ISO.
نام ماه می‌تواند به صورت مخفف مشخص شود.

می‌توان زمان یا تاریخ را حذف کرد؛ بخش‌های am/pm و منطقه زمانی (timezone) اختیاری هستند. اگر هیچ تاریخی مشخص نشود، روز جاری در نظر گرفته می‌شود؛ اگر هیچ زمانی مشخص نشود، اولین ثانیه از تاریخ تعیین‌شده استفاده می‌شود. بخش‌های با اهمیت کمتر هر دو مقدار زمان و تاریخ را نیز می‌توان حذف کرد، که در این صورت مقدار صفر در نظر گرفته می‌شود.

موارد زیر همگی مشخصات معتبر زمان و تاریخ هستند:

زمان و تاریخ جاری.
دقیقاً یک روز پس از زمان حال.
۲۴ ساعت قبل.
2 hours ago
۲ ساعت قبل.
اولین ثانیه از روز جمعه در هفته آینده (پیش‌رو). نباید با “this Friday” اشتباه گرفته شود که مطابق با جمعه هفته جاری است.
زمان فعلی اما ۷ روز قبل. این معادل “a week ago” است.
زمان فعلی اما ۱۴ روز قبل (دو هفته پیش).
10:01 am 9/17/2009
ساعت ۱۰:۰۱ صبح، ۱۷ سپتامبر ۲۰۰۹.
10:01 am
ساعت ۱۰:۰۱ صبح در روز جاری.
10
ساعت ۱۰:۰۰ صبح در روز جاری.
9/17/2009
ساعت ۰۰:۰۰ بامداد، ۱۷ سپتامبر ۲۰۰۹.
10:01 am Sep 17, 2009
ساعت ۱۰:۰۱ صبح، ۱۷ سپتامبر ۲۰۰۹.

مشخصات زمان نسبی همیشه طبق انتظار عمل نمی‌کنند. به عنوان مثال، توصیف‌کننده “next” برای استفاده در کنار روزها مانند “next Monday” طراحی شده است. هنگامی که این توصیف‌کننده با واحدهایی مانند هفته، ماه، سال و غیره استفاده شود، نتیجه یک واحد بیشتر از مقدار مورد انتظار خواهد بود. به عنوان مثال، “next week” منجر به زمانی دقیقاً دو هفته از اکنون می‌شود که احتمالاً همان چیزی نیست که مد نظر بوده است. این مشکل در نسخه‌های آینده sudoreplay رفع خواهد شد.

ابزار sudoreplay در نسخه‌های 1.8.4 و بالاتر از یک چارچوب اشکال‌زدایی انعطاف‌پذیر پشتیبانی می‌کند که از طریق خطوط Debug در فایل sudo.conf(5) پیکربندی می‌شود.

برای اطلاعات بیشتر درباره پیکربندی sudo.conf(5)، به راهنمای آن مراجعه کنید.

/etc/sudo.conf
پیکربندی چارچوب اشکال‌زدایی
/var/log/sudo-io
دایرکتوری پیش‌فرض گزارش‌های ورودی/خروجی.
/var/log/sudo-io/00/00/01/log
نمونه اطلاعات گزارش نشست.
/var/log/sudo-io/00/00/01/log.json
نمونه اطلاعات گزارش نشست (قالب JSON).
/var/log/sudo-io/00/00/01/stdin
نمونه گزارش ورودی استاندارد نشست.
/var/log/sudo-io/00/00/01/stdout
نمونه گزارش خروجی استاندارد نشست.
/var/log/sudo-io/00/00/01/stderr
نمونه گزارش خطای استاندارد نشست.
/var/log/sudo-io/00/00/01/ttyin
نمونه فایل ورودی tty نشست.
/var/log/sudo-io/00/00/01/ttyout
نمونه فایل خروجی tty نشست.
/var/log/sudo-io/00/00/01/timing
نمونه فایل زمان‌بندی نشست.

فایل‌های stdin, stdout و stderr خالی خواهند بود مگر اینکه sudo به عنوان بخشی از یک خط لوله (pipeline) برای دستوری خاص استفاده شده باشد.

فهرست کردن نشست‌های اجرا شده توسط کاربر millert:

# sudoreplay -l user millert

فهرست کردن نشست‌های اجرا شده توسط کاربر bob همراه با دستوری که شامل رشته vi باشد:

# sudoreplay -l user bob command vi

فهرست کردن نشست‌های اجرا شده توسط کاربر jeff که با یک عبارت منظم مطابقت دارند:

# sudoreplay -l user jeff command '/bin/[a-z]*sh'

فهرست کردن نشست‌های اجرا شده توسط jeff یا bob روی کنسول:

# sudoreplay -l ( user jeff or user bob ) tty console

script(1), sudo.conf(5), sudo(8)

افراد زیادی در طول سال‌ها روی sudo کار کرده‌اند؛ این نسخه عمدتاً شامل کدهایی است که توسط شخص زیر نوشته شده است:

Todd C. Miller

برای مشاهده فهرست جامعی از افرادی که در توسعه sudo مشارکت داشته‌اند، فایل CONTRIBUTORS.md را در توزیع sudo (https://www.sudo.ws/about/contributors) ببینید.

اگر فکر می‌کنید اشکالی در sudoreplay یافته‌اید، می‌توانید یک گزارش اشکال در پایگاه داده اشکالات sudo در https://bugzilla.sudo.ws ثبت کنید یا یک issue در https://github.com/sudo-project/sudo/issues باز کنید. اگر ترجیح می‌دهید از ایمیل استفاده کنید، پیام‌ها را می‌توانید به فهرست پستی sudo-workers ارسال کنید: https://www.sudo.ws/mailman/listinfo/sudo-workers (عمومی) یا به <sudo@sudo.ws> (خصوصی).

لطفاً آسیب‌پذیری‌های امنیتی را از طریق issueهای عمومی گیت‌هاب، باگزیلا یا فهرست‌های پستی گزارش نکنید. در عوض، آن‌ها را از طریق ایمیل به <Todd.Miller@sudo.ws> گزارش دهید. در صورت تمایل می‌توانید پیام خود را با استفاده از کلید موجود در https://www.sudo.ws/dist/PGPKEYS توسط PGP رمزنگاری کنید.

پشتیبانی رایگان محدود از طریق فهرست پستی sudo-users در دسترس است؛ برای عضویت یا جستجو در بایگانی، https://www.sudo.ws/mailman/listinfo/sudo-users را مشاهده کنید.

ابزار sudoreplay به صورت “همان‌گونه که هست” (“AS IS”) ارائه می‌شود و هرگونه ضمانت صریح یا ضمنی، از جمله ضمانت‌های ضمنی خریدوفروش و تناسب برای یک هدف خاص، سلب می‌شود. برای جزئیات کامل، فایل LICENSE.md توزیع‌شده با sudo یا https://www.sudo.ws/about/license را ببینید.

January 16, 2023 Sudo 1.9.17p2