| PKEXEC(1) | pkexec | PKEXEC(1) |
نام (NAME)
pkexec - اجرای یک دستور با هویت کاربری دیگر
خلاصه دستور (SYNOPSIS)
pkexec [--version] [--disable-internal-agent] [--help]
pkexec [--keep-cwd] [--user username] PROGRAM [ARGUMENTS...]
توضیحات (DESCRIPTION)
دستور pkexec به یک کاربر مجاز اجازه میدهد تا PROGRAM را با هویت کاربری دیگر اجرا کند. اگر PROGRAM مشخص نشده باشد، شل پیشفرض اجرا خواهد شد. اگر username تعیین نشده باشد، برنامه با هویت کاربر مدیر سیستم، یعنی root، اجرا خواهد شد.
مقدار بازگشتی (RETURN VALUE)
در صورت اتمام موفقیتآمیز، مقدار بازگشتی همان مقدار بازگشتی PROGRAM خواهد بود. چنانچه فرایند فراخواننده مجاز نباشد، یا مجوز لازم از طریق احراز هویت کسب نشود، یا خطایی رخ دهد، pkexec با مقدار بازگشتی 127 خارج میشود. اگر به دلیل لغو کردن کادر گفتگوی احراز هویت توسط کاربر، مجوزی حاصل نشود، pkexec با مقدار بازگشتی 126 خارج خواهد شد.
عامل احراز هویت (AUTHENTICATION AGENT)
دستور pkexec، مانند هر برنامهٔ polkit دیگری، از عامل احراز هویت ثبتشده برای فرایند یا نشست (session) فراخواننده استفاده خواهد کرد. با این حال، اگر هیچ عامل احراز هویتی در دسترس نباشد، pkexec عامل احراز هویت متنیِ داخلی خود را ثبت میکند. این رفتار را میتوان با ارسال گزینهٔ --disable-internal-agent غیرفعال کرد.
نکات امنیتی (SECURITY NOTES)
اجرای یک برنامه با هویت کاربری دیگر، یک عملیات ممتاز (privileged) است. بهطور پیشفرض، کنشی که باید برای آن بررسی انجام شود (بخش “کنشها و مجوزها (ACTION AND AUTHORIZATIONS)” را ببینید) نیازمند احراز هویت مدیر سیستم است. علاوه بر این، کادر گفتگوی احراز هویت که به کاربر نشان داده میشود، مسیر کامل برنامه برای اجرا را نمایش میدهد تا کاربر از آنچه رخ خواهد داد آگاه باشد.
محیطی که PROGRAM در آن اجرا خواهد شد، به منظور جلوگیری از تزریق کد از طریق LD_LIBRARY_PATH یا سازوکارهای مشابه، بر روی یک محیط کمینه، شناختهشده و امن تنظیم میشود. علاوه بر این، متغیر محیطی PKEXEC_UID روی شناسهٔ کاربری (UID) فرایندی که pkexec را فراخوانده است تنظیم میشود. در نتیجه، pkexec بهطور پیشفرض اجازهٔ اجرای برنامههای X11 را با هویت کاربری دیگر نخواهد داد، چرا که متغیرهای محیطی $DISPLAY و $XAUTHORITY تنظیم نشدهاند. در صورتی که حاشیهنویسی org.freedesktop.policykit.exec.allow_gui روی یک کنش با مقداری غیرخالی مقداردهی شده باشد، این دو متغیر حفظ خواهند شد؛ با این حال، استفاده از این کار توصیه نمیشود و فقط باید برای برنامههای قدیمی و موروثی (legacy) به کار رود.
دستور pkexec برنامهٔ PROGRAM را در دایرکتوری خانگی username اجرا خواهد کرد، مگر اینکه از گزینهٔ --keep-cwd برای تغییر این رفتار استفاده شود.
توجه داشته باشید که pkexec هیچ اعتبارسنجیای روی ARGUMENTS ارسالشده به PROGRAM انجام نمیدهد. در حالت عادی (که در آن احراز هویت مدیر سیستم با هر بار استفاده از pkexec الزامی است)، این امر مشکلی به وجود نمیآورد زیرا اگر کاربر مدیر سیستم باشد، میتواند بهراحتی pkexec bash را برای دسترسی به root اجرا کند.
با این حال، اگر کنشی استفاده شود که کاربر بتواند مجوز را در آن حفظ کند (یا اگر کاربر بهطور ضمنی مجاز باشد)، این میتواند یک رخنهٔ امنیتی باشد. بنابراین، به عنوان یک قاعدهٔ کلی، برنامههایی که مجوز مورد نیاز پیشفرض آنها تغییر یافته است، هرگز نباید بهطور ضمنی به ورودیهای کاربر اعتماد کنند (به عنوان مثال، مانند هر برنامهٔ خوبنوشتهشدهٔ suid دیگر).
کنشها و مجوزها (ACTION AND AUTHORIZATIONS)
بهطور پیشفرض، از کنش org.freedesktop.policykit.exec استفاده میشود. برای استفاده از کنشی دیگر، از حاشیهنویسیِ org.freedesktop.policykit.exec.path روی یک کنش با مقداری که برابر با مسیر کامل برنامه است استفاده کنید. علاوه بر تعیین برنامه، میتوان پیام احراز هویت، شرح، آیکون و مقادیر پیشفرض را نیز مشخص کرد. اگر حاشیهنویسی org.freedesktop.policykit.exec.argv1 وجود داشته باشد، کنش تنها در صورتی انتخاب خواهد شد که آرگومان اول برنامه با مقدار این حاشیهنویسی مطابقت داشته باشد.
توجه داشته باشید که پیامهای احراز هویت ممکن است به متغیرها ارجاع دهند (بخش “متغیرها (VARIABLES)” را ببینید)؛ برای نمونه، $(user) به مقدار متغیر user بسط مییابد.
کاربرد به عنوان لفاف (WRAPPER USAGE)
برای جلوگیری از تغییر نرمافزارهای موجود جهت افزودن پیشوند pkexec به فراخوانیهای خط فرمان آنها، میتوان از pkexec در یک لفاف she-bang[1] به این صورت استفاده کرد:
#!/usr/bin/pkexec /usr/bin/python
import os
import sys
print "Hello, I'm running as uid %d"%(os.getuid())
for n in range(len(sys.argv)):
print "arg[%d]=`%s'"%(n, sys.argv[n])
اگر این اسکریپت در /usr/bin/my-pk-test نصب شده باشد، آنگاه حاشیهنویسیهای زیر:
[...] <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/python</annotate> <annotate key="org.freedesktop.policykit.exec.argv1">/usr/bin/my-pk-test</annotate> [...]
میتوانند برای انتخاب کنش مناسب polkit استفاده شوند. دقت کنید که حاشیهنویسی دوم را بهدرستی تنظیم کنید، در غیر این صورت با هر فراخوانی pkexec برای اسکریپتهای /usr/bin/python تطبیق داده خواهد شد.
متغیرها (VARIABLES)
متغیرهای زیر توسط pkexec تنظیم میشوند. میتوان از آنها در قواعد صدور مجوز و پیامهای نمایشیافته در کادرهای گفتگوی احراز هویت استفاده کرد:
program
command_line
user
user.gecos
user.display
نویسندگان (AUTHORS)
نوشتهشده توسط David Zeuthen <davidz@redhat.com> با کمکهای بسیار از سوی افراد متعدد دیگر.
گزارش باگها (BUGS)
لطفاً گزارش باگها را به توزیع خود یا به فهرست پستی polkit-devel ارسال کنید، ببینید: https://github.com/polkit-org/polkit#bugs-and-development.
همچنین ببینید (SEE ALSO)
polkit(8), polkitd(8), pkaction(1), pkcheck(1), pkttyagent(1)
نکات (NOTES)
- 1.
- لفاف she-bang
| May 2009 | polkit |