CVTSUDOERS(1) General Commands Manual CVTSUDOERS(1)

cvtsudoers — تبدیل بین فرمتهای مختلف پیکربندی sudoers

cvtsudoers [-ehMpV] [-b dn] [-c conf_file] [-d deftypes] [-f output_format] [-i input_format] [-I increment] [-l log_file] [-m filter] [-o output_file] [-O start_point] [-P padding] [-s sections] [input_file ...]

ابزار cvtsudoers یک یا چند خط‌مشی امنیتی را در هر یک از قالب‌های sudoers یا LDIF به عنوان ورودی می‌پذیرد و یک خط‌مشی واحد از قالب مشخص‌شده را به عنوان خروجی تولید می‌کند. قالب ورودی پیش‌فرض sudoers است. قالب خروجی پیش‌فرض LDIF است. تنها امکان تبدیل یک فایل خط‌مشی وجود دارد که از نظر نحوی درست باشد.

اگر هیچ input_file مشخص نشده باشد، یا اگر ‘-’ باشد، خط‌مشی از ورودی استاندارد خوانده می‌شود. فایل‌های ورودی می‌توانند به صورت اختیاری با یک نام میزبان به همراه دونقطه (‘:’) پیشوندگذاری شوند تا قواعد خط‌مشی هنگام ادغام چند فایل، در صورت امکان مختص به یک میزبان خاص شوند. به‌طور پیش‌فرض، نتیجه در خروجی استاندارد نوشته می‌شود.

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

dn, --base=dn
شناسه پایه (distinguished name یا DN) که هنگام انجام پرس‌وجوهای LDAP استفاده خواهد شد. معمولاً برای دامنه my-domain.com این مقدار به شکل “ou=SUDOers,dc=my-domain,dc=com” است. اگر این گزینه مشخص نشود، مقدار متغیر محیطی SUDOERS_BASE به جای آن استفاده خواهد شد. تنها هنگام تبدیل به قالب LDIF ضروری است.
conf_file, --config=conf_file
مسیر فایل پیکربندی را مشخص می‌کند. مقدار پیش‌فرض /etc/cvtsudoers.conf است.
deftypes, --defaults=deftypes
تنها ورودی‌های Defaults از نوع‌های مشخص‌شده را تبدیل می‌کند. یک یا چند نوع Defaults می‌تواند مشخص شود که با کاما (‘,’) از یکدیگر جدا می‌شوند. نوع‌های پشتیبانی‌شده عبارتند از:
all
تمام ورودی‌های Defaults.
global
ورودی‌های سراسری Defaults که صرف‌نظر از کاربر، runas، میزبان یا دستور اعمال می‌شوند.
user
ورودی‌های Defaults مربوط به هر کاربر.
runas
ورودی‌های Defaults مربوط به هر کاربر runas.
host
ورودی‌های Defaults مربوط به هر میزبان.
command
ورودی‌های Defaults مربوط به هر دستور.

برای اطلاعات بیشتر، بخش Defaults در sudoers(5) را ببینید.

اگر گزینه -d مشخص نشود، تمام ورودی‌های Defaults تبدیل خواهند شد.

, --expand-aliases
نام‌های مستعار را در input_file گسترش می‌دهد. زمانی که قالب خروجی format برابر JSON یا sudoers باشد، نام‌های مستعار به‌طور پیش‌فرض حفظ می‌شوند.
output_format, --output-format=output_format
قالب خروجی را مشخص می‌کند (غیرحساس به بزرگی و کوچکی حروف). قالب‌های زیر پشتیبانی می‌شوند:
CSV
فایل‌های CSV (مقادیر جداشده با کاما) اغلب توسط برنامه‌های صفحه‌گسترده و ابزارهای تولید گزارش استفاده می‌شوند. برای جزئیات بیشتر به بخش قالب خروجی CSV (CSV output format) مراجعه کنید.
JSON
فایل‌های JSON (نشانه‌گذاری اشیاء جاوااسکریپت) معمولاً برای برنامه‌های شخص ثالث آسان‌تر از قالب سنتی sudoers قابل پردازش هستند. مقادیر مختلف دارای انواع صریح هستند که بخش عمده‌ای از ابهام قالب sudoers را برطرف می‌کند. برای جزئیات بیشتر به بخش قالب خروجی JSON (JSON output format) مراجعه کنید.
LDIF
فایل‌های LDIF (قالب تبادل داده LDAP) را می‌توان برای استفاده با sudoers.ldap(5) به یک سرور LDAP وارد کرد.

تبدیل به LDIF دارای محدودیت‌های زیر است:

  • خطوط Defaults خاص دستور، میزبان، runas و کاربر قابل ترجمه نیستند زیرا معادلی در طرح‌واره (schema) اسناد LDAP مربوط به sudoers ندارند.
  • نام‌های مستعار دستور، میزبان، runas و کاربر توسط طرح‌واره LDAP مربوط به sudoers پشتیبانی نمی‌شوند، بنابراین در طول تبدیل گسترش می‌یابند.
sudoers
قالب سنتی sudoers. یک فایل sudoers جدید از روی فایل ورودی تجزیه‌شده بازسازی خواهد شد. کامنت‌ها حفظ نمی‌شوند و داده‌های فایل‌های الحاقی (include) به صورت درون‌خطی در خروجی قرار می‌گیرند.
=file
هنگامی که گزینه -M نیز مشخص شده باشد، پرس‌وجوهای گروه را به جای پایگاه‌داده گروه سیستم با استفاده از file انجام می‌دهد.
, --help
یک پیام راهنمای کوتاه در خروجی استاندارد نمایش می‌دهد و خارج می‌شود.
input_format, --input-format=input_format
قالب ورودی را مشخص می‌کند. قالب‌های زیر پشتیبانی می‌شوند:
LDIF
فایل‌های LDIF (قالب تبادل داده LDAP) را می‌توان از یک سرور LDAP استخراج کرد تا خط‌مشی‌های امنیتی مورد استفاده توسط sudoers.ldap(5) تبدیل شوند. اگر یک DN پایه (distinguished name) مشخص شده باشد، تنها اشیاء sudoRole که با DN پایه مطابقت دارند پردازش خواهند شد. همه sudoOptions مشخص‌شده در یک sudoRole را نمی‌توان از قالب LDIF به قالب sudoers تبدیل کرد.
sudoers
قالب سنتی sudoers. این قالب ورودی پیش‌فرض است.
increment, --increment=increment
هنگام تولید خروجی LDIF، صفت sudoOrder را به ازای هر ورودی به میزان عدد مشخص‌شده افزایش می‌دهد. مقدار پیش‌فرض افزایش 1 است.
log_file, --logfile=log_file
هشدارهای تبدیل را به جای خروجی خطای استاندارد، در log_file ثبت می‌کند. این قابلیت به‌ویژه هنگام ادغام چندین فایل sudoers که ممکن است تعداد زیادی هشدار ایجاد کنند، مفید است.
filter, --match=filter
تنها قواعدی را خروجی می‌دهد که با filter مشخص‌شده مطابقت داشته باشند. یک عبارت filter از یک یا چند جفت key = value تشکیل می‌شود که با کاما (‘,’) از هم جدا شده‌اند. کلید key می‌تواند “cmnd” (یا “cmd”), “host”, “group”, یا “user” باشد. به عنوان مثال، = operator یا = www. می‌توان یک Cmnd_Alias, , یا User_Alias با حروف بزرگ را به عنوان “cmnd”, “host”, یا “user” مشخص کرد.

یک قاعده منطبق sudoers ممکن است شامل کاربران، گروه‌ها و میزبان‌هایی نیز باشد که بخشی از filter نیستند. این حالت زمانی رخ می‌دهد که یک قاعده شامل چندین کاربر، گروه یا میزبان باشد. برای هرس کردن و حذف کاربران، گروه‌ها یا میزبان‌های غیرمنطبق از قواعد، می‌توان از گزینه -p استفاده کرد.

به‌طور پیش‌فرض، پایگاه‌های داده گذرواژه و گروه هنگام بررسی مطابقت با فیلتر در نظر گرفته نمی‌شوند، بنابراین نیازی نیست کاربران و گروه‌ها روی سیستم محلی وجود داشته باشند (به گزینه -M مراجعه کنید). تنها نام‌های مستعاری که توسط قواعد خط‌مشی فیلترشده ارجاع داده شده باشند، نمایش داده خواهند شد.

, --match-local
هنگامی که گزینه -m نیز مشخص شده باشد، هنگام بررسی مطابقت کاربران و گروه‌ها در فیلتر، از اطلاعات پایگاه‌های داده گذرواژه و گروه سیستم استفاده می‌کند. تنها کاربران و گروه‌هایی در فیلتر مطابقت خواهند داشت که روی سیستم محلی وجود داشته باشند، و گروه‌های کاربر به‌طور خودکار به فیلتر اضافه خواهند شد. اگر گزینه -M مشخص نشده باشد، نیازی نیست کاربران و گروه‌های موجود در فیلتر روی سیستم محلی وجود داشته باشند، اما تمام گروه‌های مورد استفاده برای تطبیق باید صریحاً در فیلتر فهرست شوند.
output_file, --output=output_file
خروجی تبدیل‌شده را در output_file می‌نویسد. اگر هیچ output_file مشخص نشده باشد، یا اگر ‘-’ باشد، خط‌مشی تبدیل‌شده sudoers در خروجی استاندارد نوشته خواهد شد.
start_point, --order-start=start_point
هنگام تولید خروجی LDIF، از عدد مشخص‌شده توسط start_point در صفت sudoOrder اولین شیء sudoRole استفاده می‌کند. اشیاء sudoRole بعدی از مقدار sudoOrder حاصل از افزودن یک increment استفاده می‌کنند، برای جزئیات به گزینه -I مراجعه کنید. مقدار پیش‌فرض نقطه شروع 1 است. نقطه شروع 0 تولید صفت‌های sudoOrder را در فایل LDIF حاصل غیرفعال خواهد کرد.
=file
هنگامی که گزینه -M نیز مشخص شده باشد، پرس‌وجوهای passwd را به جای پایگاه‌داده passwd سیستم با استفاده از file انجام می‌دهد.
, --prune-matches
هنگامی که گزینه -m نیز مشخص شده باشد، cvtsudoers کاربران، گروه‌ها و میزبان‌های غیرمنطبق را از ورودی‌های منطبق هرس (حذف) خواهد کرد.
padding, --padding=padding
هنگام تولید خروجی LDIF، مقدار اولیه sudoOrder را با الحاق کردن order_start و increment می‌سازد، به طوری که increment با صفرها پدینگ می‌شود تا زمانی که شامل padding رقم باشد. به عنوان مثال، اگر order_start برابر 1027 باشد، padding برابر 3، و increment برابر 1 باشد، مقدار sudoOrder برای نخستین ورودی 1027000 خواهد بود و به دنبال آن 1027001، 1027002 و غیره می‌آیند. اگر تعداد ورودی‌های sudoRole بزرگ‌تر از مقداری باشد که پدینگ اجازه می‌دهد، cvtsudoers با یک خطا خارج خواهد شد. به‌طور پیش‌فرض، هیچ پدینگی انجام نمی‌شود.
sections, --suppress=sections
از تولید بخش‌های مشخص‌شده از خط‌مشی امنیتی در خروجی جلوگیری می‌کند. می‌توان یک یا چند نام بخش را مشخص کرد که با کاما (‘,’) از یکدیگر جدا می‌شوند. نام‌های بخش پشتیبانی‌شده عبارتند از: defaults, aliases و (که می‌توان آن را به کوتاه کرد).
, --version
نسخه‌های cvtsudoers و گرامر sudoers را چاپ کرده و خارج می‌شود.

هنگامی که چندین فایل ورودی مشخص شده باشند، cvtsudoers تلاش می‌کند تا آن‌ها را در یک فایل خط‌مشی واحد ادغام کند. فرض بر این است که نام‌های کاربری و گروه در میان فایل‌های خط‌مشی مورد نظر برای ادغام، یکپارچه و سازگار هستند. برای مثال، کاربر “bob” روی یک میزبان همان کاربر “bob” روی میزبان دیگر است.

هنگام ادغام فایل‌های خط‌مشی، این امکان وجود دارد که پیش از نام فایل ورودی، نام میزبان به همراه دونقطه (‘:’) قرار داده شود. هنگامی که فایل‌ها ادغام می‌شوند، از نام میزبان در صورت امکان برای محدود کردن قواعد خط‌مشی به آن میزبان خاص استفاده خواهد شد.

فرآیند ادغام به شرح زیر انجام می‌شود:

  • هر فایل ورودی به ساختارهای داده داخلی sudoers تجزیه می‌شود.
  • نام‌های مستعار ادغام شده و در صورت نیاز برای جلوگیری از تداخل تغییر نام می‌یابند. در صورت بروز تداخل، نخستین نام مستعار یافت‌شده دست‌نخورده باقی می‌ماند و نام‌های مستعار بعدی با همان نام با یک پسوند عددی که با زیرخط (‘_’) جدا شده است، تغییر نام داده می‌شوند. برای مثال، اگر دو نام مستعار متفاوت با نام SERVERS وجود داشته باشند، اولی دست‌نخورده باقی می‌ماند و دومی به SERVERS_1 تغییر نام می‌یابد. ارجاعات به نام مستعار تغییریافته نیز در فایل خط‌مشی به‌روزرسانی می‌شوند. نام‌های مستعار تکراری (آن‌هایی که محتوای کاملاً یکسان دارند) هرس می‌شوند.
  • تنظیمات Defaults ادغام می‌شوند و موارد تکراری حذف می‌گردند. اگر در تنظیمات Defaults تداخلی وجود داشته باشد، برای هر تداخل یک هشدار صادر می‌شود. اگر یک نام میزبان همراه با فایل ورودی مشخص شده باشد، cvtsudoers تنظیمات سراسری Defaults در آن فایل را به تنظیمات مختص میزبان تغییر می‌دهد. برای تنظیمات Defaults خاص دستور، کاربر، یا runas که امکان تبدیل آن‌ها به تنظیمات مختص میزبان وجود ندارد، یک هشدار صادر می‌شود.
  • قواعد به ازای هر کاربر ادغام می‌شوند و موارد تکراری حذف می‌گردند. اگر نام میزبان همراه با فایل ورودی مشخص شده باشد، cvtsudoers قواعدی را که نام میزبان ALL را مشخص کرده‌اند، به نام میزبان مرتبط با فایل خط‌مشی در حال ادغام تغییر می‌دهد. ادغام قواعد در حال حاضر نسبتاً ساده است اما در نسخه‌های بعدی بهبود خواهد یافت.

امکان ادغام فایل‌های خط‌مشی با قالب‌های مختلف وجود دارد.

گزینه‌ها در قالب “keyword = value” را می‌توان در یک فایل پیکربندی نیز مشخص کرد که به‌طور پیش‌فرض در /etc/cvtsudoers.conf قرار دارد. کلمات کلیدی زیر شناخته‌شده هستند:

deftypes
توضیحات گزینه خط فرمان -d را ببینید.
yes | no
توضیحات گزینه خط فرمان -e را ببینید.
file
توضیحات گزینه خط فرمان --group-file را ببینید.
ldif | sudoers
توضیحات گزینه خط فرمان -i را ببینید.
filter
توضیحات گزینه خط فرمان -m را ببینید.
yes | no
توضیحات گزینه خط فرمان -M را ببینید.
increment
توضیحات گزینه خط فرمان -I را ببینید.
start_point
توضیحات گزینه خط فرمان -O را ببینید.
csv | json | ldif | sudoers
توضیحات گزینه خط فرمان -f را ببینید.
padding
توضیحات گزینه خط فرمان -P را ببینید.
file
توضیحات گزینه خط فرمان --passwd-file را ببینید.
yes | no
توضیحات گزینه خط فرمان -p را ببینید.
dn
توضیحات گزینه خط فرمان -b را ببینید.
sections
توضیحات گزینه خط فرمان -s را ببینید.

گزینه‌های مشخص‌شده در خط فرمان، مقادیر موجود در فایل پیکربندی را نادیده گرفته و جایگزین (override) می‌کنند.

قالب JSON مربوط به sudoers می‌تواند شامل هر یک از اشیاء سطح بالای زیر باشد:

Defaults
آرایه‌ای از اشیاء، که هر کدام شامل یک آرایه Options و یک آرایه اختیاری Binding هستند.

آرایه Options شامل یک یا چند شیء است، که هر یک دارای یک جفت “name:value” منطبق بر یک تنظیم Defaults در sudoers هستند. گزینه‌هایی (Options) که روی یک فهرست عمل می‌کنند، همچنین شامل یک ورودی در شیء خواهند بود، با مقدار “list_assign” برای ‘=’, مقدار “list_add” برای ‘+=’, یا “list_remove” برای ‘-=’.

آرایه اختیاری Binding شامل یک یا چند شیء است که هر کدام دارای یک جفت “name:value” و یک ورودی اختیاری negated هستند که هر مقایسه انجام‌شده با آن شیء را نفی (معکوس) می‌کند. اگر یک Binding حضور داشته باشد، تنظیم تنها زمانی اعمال می‌شود که یکی از ورودی‌های مشخص‌شده command, hostname, netgroup, networkaddr, nonunixgid, nonunixgroup, usergid, usergroup, userid, username, یا نام‌های مستعار مطابقت داشته باشد.

برای مثال، ورودی sudoers زیر:

Defaults@somehost set_home, env_keep += DISPLAY

تبدیل می‌شود به:

"Defaults": [
    {
        "Binding": [
            { "hostname": "somehost" }
        ],
        "Options": [
            { "set_home": true },
            {
                "operation": "list_add",
                "env_keep": [
                    "DISPLAY"
                ]
            }
        ]
    }
]
User_Aliases
یک شیء JSON شامل یک یا چند ورودی User_Alias در sudoers است که در آن هر نام مستعار به عنوان مقدار خود، دارای آرایه‌ای شامل یک یا چند شیء است. هر شیء شامل یک جفت “name:value” و یک ورودی اختیاری negated است که هر مقایسه انجام‌شده با آن شیء را نفی می‌کند. نام می‌تواند یکی از موارد netgroup, nonunixgid, nonunixgroup, useralias, usergid, usergroup, userid, یا username باشد.

برای مثال، ورودی sudoers زیر:

User_Alias SYSADMIN = will, %wheel, +admin

تبدیل می‌شود به:

"User_Aliases": {
    "SYSADMIN": [
        { "username": "will" },
        { "usergroup": "wheel" },
        { "netgroup": "admin" }
    ]
}
Runas_Aliases
یک شیء JSON شامل یک یا چند ورودی Runas_Alias در sudoers است، که در آن هر نام مستعار به عنوان مقدار خود، دارای آرایه‌ای شامل یک یا چند شیء است. هر شیء شامل یک جفت “name:value” و یک ورودی اختیاری negated است که هر مقایسه انجام‌شده با آن شیء را نفی می‌کند. نام می‌تواند یکی از موارد netgroup, nonunixgid, nonunixgroup, runasalias, usergid, usergroup, userid, یا username باشد.

برای مثال، ورودی sudoers زیر:

Runas_Alias DB = oracle, sybase : OP = root, operator

تبدیل می‌شود به:

"Runas_Aliases": {
    "DB": [
        { "username": "oracle" },
        { "username": "sybase" }
    ],
    "OP": [
        { "username": "root" },
        { "username": "operator" }
    ]
}
Host_Aliases
یک شیء JSON شامل یک یا چند ورودی Host_Alias در sudoers است که در آن هر نام مستعار به عنوان مقدار خود، دارای آرایه‌ای شامل یک یا چند شیء است. هر شیء شامل یک جفت “name:value” و یک ورودی اختیاری negated است که هر مقایسه انجام‌شده با آن شیء را نفی می‌کند. نام می‌تواند یکی از موارد hostalias, hostname, netgroup, یا networkaddr باشد.

برای مثال، ورودی‌های sudoers زیر:

Host_Alias DORMNET = 128.138.243.0, 128.138.204.0/24
Host_Alias SERVERS = boulder, refuge

تبدیل می‌شوند به:

"Host_Aliases": {
    "DORMNET": [
        { "networkaddr": "128.138.243.0" },
        { "networkaddr": "128.138.204.0/24" }
    ],
    "SERVERS": [
        { "hostname": "boulder" },
        { "hostname": "refuge" }
    ]
}
Cmnd_Aliases
یک شیء JSON شامل یک یا چند ورودی Cmnd_Alias در sudoers است که در آن هر نام مستعار به عنوان مقدار خود، دارای آرایه‌ای شامل یک یا چند شیء است. هر شیء شامل یک جفت “name:value” و یک ورودی اختیاری negated است که هر مقایسه انجام‌شده با آن شیء را نفی می‌کند. نام می‌تواند یک دیگر یا یک command باشد. برای مثال، ورودی‌های sudoers زیر:
Cmnd_Alias SHELLS = /bin/bash, /bin/csh, /bin/sh, /bin/zsh
Cmnd_Alias VIPW = /usr/bin/chpass, /usr/bin/chfn, /usr/bin/chsh, \
                  /usr/bin/passwd, /usr/sbin/vigr, /usr/sbin/vipw

تبدیل می‌شوند به:

"Cmnd_Aliases": {
    "SHELLS": [
        { "command": "/bin/bash" },
        { "command": "/bin/csh" },
        { "command": "/bin/sh" },
        { "command": "/bin/zsh" }
    ],
    "VIPW": [
        { "command": "/usr/bin/chpass" },
        { "command": "/usr/bin/chfn" },
        { "command": "/usr/bin/chsh" },
        { "command": "/usr/bin/passwd" },
        { "command": "/usr/sbin/vigr" },
        { "command": "/usr/sbin/vipw" }
    ]
}
User_Specs
یک آرایه JSON شامل یک یا چند شیء، که هر کدام نشان‌دهنده یک User_Spec در sudoers هستند. هر شیء در آرایه باید شامل یک آرایه User_List, یک آرایه Host_List و یک آرایه Cmnd_Specs باشد.

یک User_List از یک یا چند شیء تشکیل می‌شود. هر شیء شامل یک جفت “name:value” و یک ورودی اختیاری negated است که هر مقایسه انجام‌شده با آن شیء را نفی می‌کند. نام می‌تواند یکی از موارد netgroup, nonunixgid, nonunixgroup, useralias, usergid, usergroup, userid, یا username باشد. اگر username بر روی مقدار ویژه ALL تنظیم شود، با هر کاربری مطابقت خواهد داشت.

یک Host_List شامل یک یا چند شیء است. هر شیء شامل یک جفت “name:value” و یک ورودی اختیاری negated است که هر مقایسه انجام‌شده با آن شیء را نفی می‌کند. نام می‌تواند یکی از موارد hostalias, hostname, netgroup, یا networkaddr باشد. اگر hostname بر روی مقدار ویژه ALL تنظیم شود، با هر میزبانی مطابقت خواهد داشت.

آرایه Cmnd_Specs شامل یک یا چند شیء JSON است که دستوری را که مجاز به اجرا است توصیف می‌کند. هر Cmnd_Specs از یک آرایه Commands, یک آرایه اختیاری runasusers, یک آرایه اختیاری runasgroups, و یک آرایه اختیاری Options تشکیل شده است.

آرایه Commands شامل یک یا چند شیء دارای عناصر جفت “name:value” است. نام‌ها و مقادیر زیر پشتیبانی می‌شوند:

command
رشته‌ای حاوی دستوری که باید اجرا شود. مقدار ویژه ALL با هر دستوری مطابقت خواهد داشت.
negated
یک مقدار بولی که اگر درست (true) باشد، هر مقایسه انجام‌شده با آن شیء را نفی می‌کند.
sha224
یک یا چند چکیده SHA224 برای command به شکل رشته. چندین چکیده از یک نوع به عنوان یک آرایه ذخیره می‌شوند.
sha256
یک یا چند چکیده SHA256 برای command به شکل رشته. چندین چکیده از یک نوع به عنوان یک آرایه ذخیره می‌شوند.
sha384
یک یا چند چکیده SHA384 برای command به شکل رشته. چندین چکیده از یک نوع به عنوان یک آرایه ذخیره می‌شوند.
sha512
یک یا چند چکیده SHA512 برای command به شکل رشته. چندین چکیده از یک نوع به عنوان یک آرایه ذخیره می‌شوند.

آرایه runasusers شامل اشیایی است که کاربرانی را توصیف می‌کنند که دستور می‌تواند به عنوان آن‌ها اجرا شود. هر شیء شامل یک جفت “name:value” و یک ورودی اختیاری negated است که هر مقایسه انجام‌شده با آن شیء را نفی می‌کند. نام می‌تواند یکی از موارد netgroup, nonunixgid, nonunixgroup, runasalias, usergid, usergroup, userid, یا username باشد. اگر username بر روی مقدار ویژه ALL تنظیم شود، با هر کاربری مطابقت خواهد داشت. اگر username بر روی رشته خالی “” تنظیم شود، با کاربر فراخواننده مطابقت خواهد داشت.

آرایه runasgroups شامل اشیایی است که گروه‌هایی را توصیف می‌کنند که دستور می‌تواند به عنوان آن‌ها اجرا شود. هر شیء شامل یک جفت “name:value” و یک ورودی اختیاری negated است که هر مقایسه انجام‌شده با آن شیء را نفی می‌کند. نام می‌تواند یکی از موارد runasalias, usergid, یا usergroup باشد. اگر usergroup بر روی مقدار ویژه ALL تنظیم شود، با هر گروهی مطابقت خواهد داشت.

آرایه Options دارای قالبی مشابه آرایه موجود در شیء Defaults است. هر ورودی Tag_Spec در sudoers به Options تبدیل می‌شود. یک کاربر با امتیازات “sudo ALL” به‌طور خودکار گزینه را فعال خواهد داشت تا با رفتار ضمنی ارائه‌شده توسط sudoers مطابقت داشته باشد.

برای مثال، ورودی sudoers زیر:

millert ALL = (ALL : ALL) NOPASSWD: ALL, !/usr/bin/id

تبدیل می‌شود به:

"User_Specs": [
    {
        "User_List": [
            { "username": "millert" }
        ],
        "Host_List": [
            { "hostname": "ALL" }
        ],
        "Cmnd_Specs": [
            {
                "runasusers": [
                    { "username": "ALL" }
                ],
                "runasgroups": [
                    { "usergroup": "ALL" }
                ],
                "Options": [
                    { "authenticate": false },
                    { "setenv": true }
                ],
                "Commands": [
                    { "command": "ALL" },
                    {
                        "command": "/usr/bin/id",
                        "negated": true
                    }
                ]
            }
        ]
    }
]

فایل‌های CSV (مقادیر جداشده با کاما) اغلب توسط برنامه‌های صفحه‌گسترده و ابزارهای تولید گزارش استفاده می‌شوند. برای خروجی CSV، cvtsudoers رشته‌هایی را که دارای کاما هستند در گیومه دوتایی قرار می‌دهد. به ازای هر نویسه گیومه دوتایی واقعی موجود در داخل رشته، دو گیومه دوتایی چاپ می‌شود. این روش محصور کردن کاما با اغلب برنامه‌های صفحه‌گسترده سازگار است.

سه بخش ممکن در خروجی CSV دستور cvtsudoers وجود دارد که هر یک با یک خط خالی جدا می‌شوند:

defaults
این بخش شامل هر یک از تنظیمات Defaults در sudoers است. بخش defaults با سربرگ زیر آغاز می‌شود:
defaults_type,binding,name,operator,value

فیلدها به شرح زیر هستند:

defaults_type
نوع تنظیم Defaults; یکی از موارد defaults, defaults_command, defaults_host, defaults_runas, یا defaults_user.
binding
برای defaults_command, defaults_host, defaults_runas, و defaults_user این مقداری است که برای اعمال تنظیم باید مطابقت داشته باشد.
name
نام تنظیم Defaults.
operator
عملگر مشخص می‌کند که مقدار چگونه بر روی تنظیم اعمال شود. این مقدار می‌تواند یکی از موارد ‘=’ (انتساب)، ‘+=’ (افزودن)، یا ‘-=’ (حذف) باشد.
value
مقدار تنظیم، معمولاً یک رشته است یا برای تنظیماتی که در زمینه بولی استفاده می‌شوند، یا .
aliases
این بخش شامل هر یک از ورودی‌های Cmnd_Alias, Host_Alias, Runas_Alias, یا User_Alias از sudoers است. بخش aliases با سربرگ زیر آغاز می‌شود:
alias_type,alias_name,members

فیلدها به شرح زیر هستند:

alias_type
نوع نام مستعار؛ یکی از موارد Cmnd_Alias, Host_Alias, Runas_Alias, یا User_Alias.
alias_name
نام این نام مستعار؛ رشته‌ای که با یک حرف بزرگ انگلیسی آغاز می‌شود و شامل حروف بزرگ انگلیسی، ارقام یا زیرخط است.
members
فهرستی جداشده با کاما از اعضای متعلق به این نام مستعار. به دلیل استفاده از کاما، اگر شامل بیش از یک عضو باشد، در گیومه دوتایی محصور می‌شود.
rules
این بخش شامل قواعد sudoers است که امتیازات را اعطا می‌کنند. بخش با سربرگ زیر آغاز می‌شود:
rule,user,host,runusers,rungroups,options,command

فیلدها به شرح زیر هستند:

rule
این فیلد نشان‌دهنده یک ورودی در sudoers است.
user
کاربری که قاعده بر او اعمال می‌شود. همچنین می‌تواند یک گروه یونیکس (با پیشوند نویسه ‘%’ )، یک گروه غیر یونیکس (با پیشوند ‘%:’) یا یک نت‌گروپ (با پیشوند نویسه ‘+’ ) یا یک User_Alias باشد. اگر بر روی مقدار ویژه ALL تنظیم شود، با هر کاربری مطابقت خواهد داشت.
host
میزبانی که قاعده بر آن اعمال می‌شود. همچنین می‌تواند یک نت‌گروپ (با پیشوند نویسه ‘+’ ) یا یک Host_Alias باشد. اگر بر روی مقدار ویژه ALL تنظیم شود، با هر میزبانی مطابقت خواهد داشت.
runusers
یک فهرست اختیاری جداشده با کاما از کاربرانی (یا Runas_Aliasها) که دستور می‌تواند به عنوان آن‌ها اجرا شود. اگر شامل بیش از یک عضو باشد، مقدار در گیومه دوتایی محصور می‌شود. اگر بر روی مقدار ویژه ALL تنظیم شود، با هر کاربری مطابقت خواهد داشت. اگر خالی باشد، کاربر root فرض می‌شود.
rungroups
یک فهرست اختیاری جداشده با کاما از گروه‌هایی (یا Runas_Aliasها) که دستور می‌تواند به عنوان آن‌ها اجرا شود. اگر شامل بیش از یک عضو باشد، مقدار در گیومه دوتایی محصور می‌شود. اگر بر روی مقدار ویژه ALL تنظیم شود، با هر گروهی مطابقت خواهد داشت. اگر خالی باشد، گروه استفاده می‌شود.
options
یک فهرست اختیاری از تنظیمات Defaults برای اعمال بر روی دستور. هر ورودی Tag_Spec در sudoers به تبدیل می‌شود.
commands
فهرستی از دستورات، همراه با آرگومان‌های اختیاری، که کاربر مجاز به اجرای آن‌ها است. اگر بر روی مقدار ویژه ALL تنظیم شود، با هر دستوری مطابقت خواهد داشت.

برای مثال، ورودی sudoers زیر:

millert ALL = (ALL : ALL) NOPASSWD: ALL, !/usr/bin/id

تبدیل می‌شود به:

rule,millert,ALL,ALL,ALL,"!authenticate","ALL,!/usr/bin/id"

/etc/cvtsudoers.conf
پیکربندی پیش‌فرض برای cvtsudoers

تبدیل /etc/sudoers به LDIF (قالب تبادل داده LDAP) در صورتی که فایل ldap.conf از یک sudoers_base به شکل my-domain,dc=com استفاده کند، و ذخیره نتیجه در sudoers.ldif:

$ cvtsudoers -b ou=SUDOers,dc=my-domain,dc=com -o sudoers.ldif \
             /etc/sudoers

تبدیل /etc/sudoers به قالب JSON، و ذخیره نتیجه در sudoers.json:

$ cvtsudoers -f json -o sudoers.json /etc/sudoers

تجزیه /etc/sudoers و نمایش تنها قواعدی که با کاربر بر روی میزبان مطابقت دارند:

$ cvtsudoers -f sudoers -m user=ambrose,host=hastur /etc/sudoers

مشابه بالا، اما همراه با گسترش نام‌های مستعار و هرس کردن تمام کاربران و میزبان‌های غیرمنطبق از ورودی‌های گسترش‌یافته.

$ cvtsudoers -ep -f sudoers -m user=ambrose,host=hastur /etc/sudoers

تبدیل sudoers.ldif از LDIF به قالب سنتی sudoers:

$ cvtsudoers -i ldif -f sudoers -o sudoers.new sudoers.ldif

ادغام یک فایل سراسری sudoers با دو فایل خط‌مشی مختص میزبان از میزبان‌های “xyzzy” و “plugh”:

$ cvtsudoers -f sudoers -o sudoers.merged sudoers \
    xyzzy:sudoers.xyzzy plugh:sudoers.plugh

sudoers(5), sudoers.ldap(5), sudo(8)

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

Todd C. Miller

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

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

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

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

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

February 22, 2025 Sudo 1.9.17p2