| SUDOERS_TIMESTAMP(5) | File Formats Manual | SUDOERS_TIMESTAMP(5) |
نام (NAME)
sudoers_timestamp —
فرمت
فایلهای
برچسب
زمانی sudoers
توضیحات (DESCRIPTION)
پلاگین
sudoers از
پروندههای
برچسب
زمانی به
ازای هر
شناسه
کاربر (user-ID)
برای
حافظهٔ
نهان
اعتبارنامهها
استفاده
میکند.
هنگامی که
کاربری
احراز هویت
شد،
میتواند
برای مدت
کوتاهی
(5
دقیقه، مگر
اینکه توسط
گزینهٔ
timestamp_timeout لغو
شده باشد)
بدون نیاز
به گذرواژه
از sudo
استفاده
کند. به طور
پیشفرض،
sudoers از یک
رکورد مجزا
برای هر
ترمینال
استفاده
میکند، به
این معنی که
نشستهای
ورود کاربر
به طور
جداگانه
احراز هویت
میشوند.
گزینهٔ
timestamp_type
میتواند
برای
انتخاب نوع
رکورد
برچسب
زمانی که
sudoers
استفاده
خواهد کرد،
به کار رود.
یک فرمت
پرونده
برچسب
زمانی
چندرکوردی
در sudo 1.8.10
معرفی شد که
از یک
پرونده
واحد برای
هر کاربر
استفاده
میکند. پیش
از این، یک
پرونده
جداگانه
برای هر
ترکیب
کاربر و
ترمینال
استفاده
میشد، مگر
اینکه
برچسبهای
زمانی
مبتنی بر tty
غیرفعال
شده بودند.
فرمت جدید
قابل گسترش
است و
رکوردهایی
از انواع و
نسخههای
مختلف
میتوانند
درون یک
پرونده
مشترک
همزیستی
داشته
باشند.
تمام رکوردها، صرفنظر از نوع یا نسخه، با یک شماره نسخهٔ ۱۶ بیتی و یک اندازه رکورد ۱۶ بیتی آغاز میشوند.
رکوردهای برچسب زمانی ساختار زیر را دارند:
/* Time stamp entry types */
#define TS_GLOBAL 0x01U /* not restricted by tty or ppid */
#define TS_TTY 0x02U /* restricted by tty */
#define TS_PPID 0x03U /* restricted by ppid */
#define TS_LOCKEXCL 0x04U /* special lock record */
/* Time stamp flags */
#define TS_DISABLED 0x01U /* entry disabled */
#define TS_ANYUID 0x02U /* ignore uid, only valid in key */
struct timestamp_entry {
unsigned short version; /* version number */
unsigned short size; /* entry size */
unsigned short type; /* TS_GLOBAL, TS_TTY, TS_PPID */
unsigned short flags; /* TS_DISABLED, TS_ANYUID */
uid_t auth_uid; /* uid to authenticate as */
pid_t sid; /* session ID associated with tty/ppid */
struct timespec start_time; /* session/ppid start time */
struct timespec ts; /* time stamp (CLOCK_MONOTONIC) */
union {
dev_t ttydev; /* tty device number */
pid_t ppid; /* parent pid */
} u;
};
فیلدهای ساختار timestamp_entry به شرح زیر هستند:
- version
- شماره نسخهٔ ساختار timestamp_entry. ورودیهای جدید با شماره نسخهٔ ۲ ایجاد میشوند. رکوردهایی با شماره نسخههای مختلف میتوانند درون یک پرونده همزیستی داشته باشند اما با یکدیگر سازگار و دارای عملکرد متقابل (inter-operable) نیستند.
- size
- اندازهٔ رکورد بر حسب بایت.
- type
- نوع رکورد،
در حال حاضر
TS_GLOBAL,TS_TTY, یاTS_PPID. - flags
- صفر یا چند
پرچم رکورد
که
میتوانند
با یکدیگر OR
بیتی شوند.
پرچمهای
پشتیبانیشده
عبارتند از
TS_DISABLED, برای رکوردهای غیرفعالشده از طریقsudo-kوTS_ANYUID, که تنها هنگام تطبیق رکوردها به کار میرود. - auth_uid
- شناسه کاربری (user-ID) که برای احراز هویت استفاده شده است. بسته به مقدار گزینههای rootpw, runaspw و targetpw, شناسه کاربری ممکن است متعلق به کاربر فراخواننده، کاربر root، کاربر پیشفرض runas یا کاربر هدف باشد.
- sid
- شناسهٔ
نشست
ترمینال
کاربر، در
صورت وجود.
شناسهٔ
نشست تنها
هنگام
تطبیق
رکوردهای
از نوع
TS_TTYاستفاده میشود. - start_time
- زمان شروع
رهبر نشست
برای
رکوردهای
از نوع
TS_TTYیا فرایند والد برای رکوردهای از نوعTS_PPID. فیلد start_time برای کمک به جلوگیری از استفادهٔ مجدد از یک رکورد برچسب زمانی پس از خروج کاربر از سیستم استفاده میشود. همه سیستمها از روشی برای بازیابی آسان زمان شروع فرایند پشتیبانی نمیکنند. فیلد start_time درsudoersنسخهٔ 1.8.22 برای بازبینی دوم ساختار timestamp_entry اضافه شد. - ts
- برچسب
زمانی
واقعی. در
صورتی که
سیستم از آن
پشتیبانی
کند، یک
منبع زمانی
یکنواخت (monotonic time
source، که رو به
عقب حرکت
نمیکند)
استفاده
میشود. در
صورت
امکان،
sudoersاز یک تایمر یکنواخت استفاده میکند که حتی در زمان تعلیق سیستم نیز افزایش مییابد. مقدار ts هر بار که دستوری از طریقsudoاجرا میشود، بهروزرسانی میگردد. اگر اختلاف بین ts و زمان فعلی کمتر از مقدار گزینهٔ timestamp_timeout باشد، نیازی به گذرواژه نخواهد بود. - u.ttydev
- شماره
دستگاه
ترمینال
مرتبط با
نشست برای
رکوردهای
از نوع
TS_TTY. - u.ppid
- شناسهٔ
فرایند
والد برای
رکوردهای
از نوع
TS_PPID.
ابزار
tsdump, که
همراه با
توزیع سورس
sudo ارائه شده
است،
میتواند
برای نمایش
محتویات یک
پروندهٔ
برچسب
زمانی
sudoers
استفاده
شود.
قفلگذاری (LOCKING)
در sudoers
نسخههای 1.8.10
تا 1.8.14، هنگام
خواندن یا
نوشتن در
پرونده، کل
پروندهٔ
برچسب
زمانی برای
دسترسی
انحصاری
قفل میشد.
از sudoers 1.8.15 به
بعد، به جای
کل پرونده،
رکوردهای
مجزا در
پرونده
برچسب
زمانی قفل
میشوند و
قفل برای
مدت زمان
طولانیتری
نگه داشته
میشود. این
سازوکار در
ادامه شرح
داده شده
است.
نخستین
رکورد در
پرونده
برچسب
زمانی از
نوع TS_LOCKEXCL
است و به
عنوان یک
رکورد
lock
(قفل) به کار
میرود تا
از افزودن
رکورد جدید
توسط بیش از
یک فرایند
sudo به طور
همزمان
جلوگیری
کند. به محض
اینکه
رکورد
برچسب
زمانی مورد
نظر پیدا یا
ایجاد (و قفل)
شد، قفل
رکورد TS_LOCKEXCL
آزاد
میشود. با
این حال،
قفل روی
رکورد
مجزای
برچسب
زمانی تا
زمان تکمیل
احراز هویت
حفظ میشود.
این قابلیت
به sudoers
اجازه
میدهد تا
از درخواست
چندبارهٔ
گذرواژه در
زمانی که
بیش از یک
بار در یک خط
لوله (pipeline)
استفاده
میشود،
جلوگیری
کند.
رکوردهای
از نوع TS_GLOBAL
نمیتوانند
برای مدت
طولانی قفل
شوند، زیرا
انجام این
کار با سایر
فرایندهای
sudo تداخل
ایجاد
میکند. در
عوض، از یک
رکورد قفل
جداگانه
استفاده
میشود تا
از درخواست
همزمان
گذرواژه
توسط چندین
فرایند
sudo که از
یک ترمینال
(یا شناسه
فرایند
والد) یکسان
استفاده
میکنند،
جلوگیری به
عمل آید.
همچنین ببینید (SEE ALSO)
تاریخچه (HISTORY)
در ابتدا،
sudo از یک
پروندهٔ تک
با طول صفر
برای هر
کاربر
استفاده
میکرد و
زمان
ویرایش
پرونده به
عنوان
برچسب
زمانی به
کار میرفت.
نسخههای
بعدی sudo
محدودیتهایی
بر مالکیت
پروندهها
و
دایرکتوری
برچسب
زمانی و
همچنین
بررسیهایی
بر صحت خود
برچسب
زمانی
اضافه
کردند.
تغییرات
قابل توجه
در
نسخههای
زیر از sudo
معرفی
شدند:
- 1.4.0
- پشتیبانی از پرونده برچسب زمانی مبتنی بر tty با الحاق نام ترمینال به انتهای نام پرونده برچسب زمانی اضافه شد.
- 1.6.2
- پرونده برچسب زمانی با یک دایرکتوری به ازای هر کاربر که شامل پروندههای برچسب زمانی مبتنی بر tty بود، جایگزین گردید.
- 1.6.3p2
- هنگامی که گزینهٔ targetpw تنظیم شده بود، نام کاربر هدف به نام پرونده برچسب زمانی اضافه شد.
- 1.7.3
- اطلاعات مربوط به دستگاه ترمینال برای بررسیهای اعتبار در پروندههای برچسب زمانی مبتنی بر tty ذخیره شد. این اطلاعات شامل شمارههای دستگاه ترمینال، شماره inode و در سیستمهایی که هنگام نوشتن روی دستگاه بهروزرسانی نمیشد، زمان تغییر inode بود. این امر به جلوگیری از استفاده مجدد از پرونده برچسب زمانی پس از خروج از سیستم کمک کرد.
- 1.8.6p7
- شناسهٔ نشست ترمینال به پروندههای برچسب زمانی مبتنی بر tty اضافه شد تا از استفاده مجدد از برچسب زمانی توسط همان کاربر در یک نشست ترمینال دیگر جلوگیری به عمل آید. همچنین به جلوگیری از استفاده مجدد از پرونده برچسب زمانی در سیستمهایی که در آنها زمان تغییر inode دستگاه ترمینال هنگام نوشتن بهروزرسانی میشد، کمک کرد.
- 1.8.10
- یک فرمت جدید و چندرکوردی برای پرونده برچسب زمانی معرفی شد که از یک پرونده واحد به ازای هر کاربر استفاده میکند. زمان تغییر دستگاه ترمینال گنجانده نشد، زیرا اکنون بیشتر سیستمها همانطور که توسط POSIX الزامی شده است، پس از انجام عمل نوشتن، زمان تغییر را بهروز میکنند.
- 1.8.15
- رکوردهای منفرد در پرونده برچسب زمانی به جای کل پرونده قفل میشوند و قفل تا زمان تکمیل احراز هویت حفظ میشود.
- 1.8.22
- زمان شروع
رهبر نشست
ترمینال یا
فرایند
والد اکنون
در
رکوردهای
غیرسراسری
(non-global) برچسب
زمانی
ذخیره
میشود. این
کار در اکثر
موارد مانع
از استفاده
مجدد از
پرونده
برچسب
زمانی پس از
خروج از
سیستم
میشود.
پشتیبانی از برچسبهای زمانی tty مبتنی بر هسته که در OpenBSD موجود است و از پرونده برچسب زمانی روی دیسک استفاده نمیکند، افزوده شد.
- 1.9.15
- مسیرهای پرونده برچسب زمانی اکنون به جای نام کاربر، بر اساس شناسه کاربری (user-ID) کاربر فراخواننده تعیین میشوند. این امر از بروز مشکلات با نامهای کاربری که شامل نویسهٔ جداکننده مسیر هستند، جلوگیری میکند.
نویسندگان (AUTHORS)
افراد
بسیاری در
طول سالها
بر روی sudo
کار
کردهاند؛
این نسخه
عمدتاً
متشکل از
کدهایی است
که توسط
افراد زیر
نوشته شده
است:
برای
مشاهده
فهرست
جامعی از
افرادی که
در sudo
مشارکت
داشتهاند،
پرونده CONTRIBUTORS.md
را در توزیع
sudo (https://www.sudo.ws/about/contributors)
ببینید.
اشکالات (BUGS)
اگر فکر
میکنید
اشکالی در
sudoers_timestamp
یافتهاید،
میتوانید
گزارش
اشکال را در
پایگاهداده
اشکالات 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های عمومی گیتهاب، Bugzilla یا لیستهای پستی گزارش ندهید. در عوض، آنها را از طریق ایمیل به <Todd.Miller@sudo.ws> ارسال نمایید. در صورت تمایل میتوانید پیام خود را با استفاده از کلید موجود در https://www.sudo.ws/dist/PGPKEYS با PGP رمزگذاری کنید.
پشتیبانی (SUPPORT)
پشتیبانی محدود و رایگان از طریق فهرست پستی sudo-users در دسترس است، برای عضویت یا جستجو در آرشیوها به https://www.sudo.ws/mailman/listinfo/sudo-users مراجعه نمایید.
سلب مسئولیت (DISCLAIMER)
sudo به
صورت
“همانطور
که هست (AS IS)”
ارائه
میشود و
هرگونه
ضمانت صریح
یا ضمنی،
شامل، اما
نه محدود
به،
ضمانتهای
ضمنی
خریدوفروش
و تناسب
برای یک هدف
خاص سلب
میشود.
برای
جزئیات
کامل،
پروندهٔ LICENSE.md
توزیعشده
همراه با
sudo یا
https://www.sudo.ws/about/license را
ببینید.
| November 26, 2023 | Sudo 1.9.17p2 |