| SU(1) | دستورات کاربر | SU(1) |
نام (NAME)
su - اجرای یک دستور با شناسه کاربر و گروه جایگزین
خلاصه دستور (SYNOPSIS)
su [گزینهها] [-] [کاربر [آرگومان...]]
توضیحات (DESCRIPTION)
دستور su اجازه میدهد دستورها با شناسه کاربر و گروه جایگزین اجرا شوند.
هنگامی که بدون مشخص کردن کاربر فراخوانی شود، su به طور پیشفرض یک پوسته تعاملی را به عنوان root اجرا میکند. هنگامی که کاربر مشخص شود، میتوان آرگومانهای بیشتری تعیین کرد که در این صورت به پوسته منتقل میشوند.
برای سازگاری با گذشته، su به طور پیشفرض دایرکتوری جاری را تغییر نمیدهد و تنها متغیرهای محیطی HOME و SHELL (به علاوه USER و LOGNAME اگر کاربر هدف root نباشد) را مقداردهی میکند. توصیه میشود همیشه از گزینه --login (به جای فرم کوتاه آن -) استفاده شود تا از عوارض جانبی ناشی از ترکیب محیطها جلوگیری به عمل آید.
این نسخه از su برای احراز هویت، مدیریت حساب و نشست از PAM استفاده میکند. برخی از گزینههای پیکربندی موجود در پیادهسازیهای دیگر su، مانند پشتیبانی از گروه wheel، باید از طریق PAM پیکربندی شوند.
دستور su عمدتاً برای کاربران بدون امتیاز طراحی شده است؛ راهکار پیشنهادی برای کاربران دارای امتیاز (مانند اسکریپتهایی که توسط کاربر ریشه اجرا میشوند) استفاده از دستور غیر set-user-ID به نام runuser(1) است که نیازی به احراز هویت ندارد و پیکربندی PAM مجزایی ارائه میدهد. اگر به نشست PAM اصلاً نیازی نباشد، راهکار پیشنهادی استفاده از دستور setpriv(1) است.
توجه داشته باشید که su در تمام موارد برای اعمال تغییر نهایی متغیرهای محیطی از PAM (pam_getenvlist(3)) استفاده میکند. گزینههای خط فرمان مانند --login و --preserve-environment محیط را قبل از تغییر توسط PAM تحت تأثیر قرار میدهند.
از نسخه 2.38 دستور su محدودیتهای منابع فرایند شامل RLIMIT_NICE، RLIMIT_RTPRIO، RLIMIT_FSIZE، RLIMIT_AS و RLIMIT_NOFILE را بازنشانی میکند.
گزینهها (OPTIONS)
- -c, --command=دستور
- ارسال دستور به پوسته با گزینه -c.
- -f, --fast
- ارسال -f به پوسته، که بسته به پوسته ممکن است مفید باشد یا نباشد.
- -g, --group=گروه
- مشخص کردن گروه اصلی. این گزینه فقط برای کاربر root در دسترس است.
- -G, --supp-group=گروه
- مشخص کردن گروه تکمیلی. این گزینه فقط برای کاربر root در دسترس است. اولین گروه تکمیلی مشخصشده در صورتی که گزینه --group مشخص نشده باشد، به عنوان گروه اصلی نیز استفاده میشود.
- -, -l, --login
- شروع پوسته به عنوان یک پوسته ورود (login shell) با محیطی مشابه ورود واقعی:
- پاکسازی تمام متغیرهای محیطی به جز TERM و متغیرهای مشخصشده با --whitelist-environment
- مقداردهی اولیه متغیرهای محیطی HOME، SHELL، USER، LOGNAME و PATH
- تغییر مسیر به دایرکتوری خانگی کاربر هدف
- تنظیم argv[0] پوسته به '-' به منظور تبدیل پوسته به یک پوسته ورود
- -m, -p, --preserve-environment
- حفظ کل متغیرهای محیطی، یعنی عدم مقداردهی HOME، SHELL، USER یا LOGNAME. در صورت مشخص شدن گزینه --login، این گزینه نادیده گرفته میشود.
- -P, --pty
- ایجاد یک ترمینال کاذب (pseudo-terminal) برای نشست. ترمینال مستقل امنیت بهتری فراهم میکند زیرا کاربر ترمینال را با نشست اصلی به اشتراک نمیگذارد. این کار میتواند برای جلوگیری از تزریق ترمینال از طریق TIOCSTI ioctl و سایر حملات امنیتی علیه توصیفکنندههای فایل ترمینال استفاده شود. کل نشست را میتوان به پسزمینه نیز منتقل کرد (مانند su --pty - نام_کاربر -c برنامه &). اگر ترمینال کاذب فعال باشد، su به عنوان یک پروکسی بین نشستها عمل میکند (همگامسازی ورودی و خروجی استاندارد).
- این ویژگی عمدتاً برای نشستهای تعاملی طراحی شده است. اگر ورودی استاندارد یک ترمینال نباشد، بلکه به عنوان مثال یک پایپ (pipe) باشد (مانند echo "date" | su --pty)، پرچم ECHO برای ترمینال کاذب غیرفعال میشود تا از خروجی نامرتب جلوگیری شود.
- -s, --shell=پوسته
- اجرای پوسته مشخصشده به جای پوسته پیشفرض. پوسته مورد نظر بر اساس قوانین زیر و به ترتیب انتخاب میشود:
- پوسته مشخصشده با --shell
- پوسته مشخصشده در متغیر محیطی SHELL، در صورتی که گزینه --preserve-environment استفاده شده باشد
- پوسته فهرستشده در مدخل passwd کاربر هدف
- /bin/sh
- اگر کاربر هدف دارای یک پوسته محدودشده باشد (یعنی در /etc/shells فهرست نشده باشد)، گزینه --shell و متغیر محیطی SHELL نادیده گرفته میشوند مگر اینکه کاربر فراخوان root باشد.
- --session-command=دستور
- مشابه -c، اما یک نشست جدید ایجاد نمیکند (استفاده از آن توصیه نمیشود).
- -w, --whitelist-environment=فهرست
- هنگام پاکسازی محیط برای --login، متغیرهای محیطی مشخصشده در فهرست جداشده با ویرگول را بازنشانی نمیکند. فهرست سفید برای متغیرهای محیطی HOME، SHELL، USER، LOGNAME و PATH نادیده گرفته میشود.
- -h, --help
- نمایش راهنما و خروج.
- -V, --version
- نمایش نسخه و خروج.
سیگنالها (SIGNALS)
به هنگام دریافت SIGINT، SIGQUIT یا SIGTERM، دستور su فرایند فرزند خود را خاتمه داده و سپس با همان سیگنال دریافتی خود را خاتمه میدهد. فرزند ابتدا با SIGTERM خاتمه مییابد؛ پس از تلاش ناموفق و ۲ ثانیه تأخیر، فرزند توسط SIGKILL کشته میشود.
فایلهای پیکربندی (CONFIG FILES)
دستور su فایلهای پیکربندی /etc/default/su و /etc/login.defs را میخواند. موارد پیکربندی زیر برای su مرتبط هستند:
- FAIL_DELAY (عدد)
- میزان تأخیر بر حسب ثانیه در صورت شکست در احراز هویت. این عدد باید یک عدد صحیح غیرمنفی باشد.
- ENV_PATH (رشته)
- متغیر محیطی PATH را برای یک کاربر معمولی تعریف میکند. مقدار پیشفرض /usr/local/bin:/bin:/usr/bin است.
- ENV_ROOTPATH (رشته)، ENV_SUPATH (رشته)
- متغیر محیطی PATH را برای کاربر root تعریف میکند. ENV_SUPATH اولویت دارد. مقدار پیشفرض /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin است.
- ALWAYS_SET_PATH (بولی)
- اگر روی yes تنظیم شود و گزینههای --login و --preserve-environment مشخص نشده باشند، su متغیر PATH را مقداردهی اولیه میکند.
متغیر محیطی PATH ممکن است در سیستمهایی که /bin و /sbin در /usr ادغام شدهاند متفاوت باشد؛ این متغیر همچنین تحت تأثیر گزینه خط فرمان --login و تنظیمات سیستم PAM (مانند pam_env(8)) قرار میگیرد.
وضعیت خروج (EXIT STATUS)
دستور su به طور معمول وضعیت خروج دستوری را که اجرا کرده بازمیگرداند. اگر دستور توسط یک سیگنال کشته شده باشد، su شماره آن سیگنال را به علاوه ۱۲۸ بازمیگرداند.
وضعیت خروج ایجاد شده توسط خود su:
- 1
- خطای عمومی پیش از اجرای دستور درخواستی
- 126
- دستور درخواستی قابل اجرا نبود
- 127
- دستور درخواستی پیدا نشد
فایلها (FILES)
- /etc/pam.d/su
- فایل پیکربندی پیشفرض PAM
- /etc/pam.d/su-l
- فایل پیکربندی PAM در صورت مشخص شدن --login
- /etc/default/su
- فایل پیکربندی logindef مخصوص دستور
- /etc/login.defs
- فایل پیکربندی logindef سراسری
نکات (NOTES)
به دلایل امنیتی، su همیشه تلاشهای ناموفق برای ورود را در فایل btmp ثبت میکند، اما اصلاً در فایل lastlog نمینویسد. از این راهکار میتوان برای کنترل رفتار su از طریق پیکربندی PAM استفاده کرد. اگر میخواهید از ماژول pam_lastlog(8) برای چاپ پیام هشدار در مورد تلاشهای ناموفق برای ورود استفاده کنید، باید pam_lastlog(8) پیکربندی شود تا فایل lastlog را نیز بهروزرسانی کند؛ به عنوان مثال توسط:
session required pam_lastlog.so nowtmp
تاریخچه (HISTORY)
این دستور su از su در coreutils گرفته شده است که بر اساس پیادهسازی David MacKenzie بود. نسخه util-linux توسط Karel Zak بازنویسی و بازسازی شده است.
نویسنده (AUTHOR)
نوشته شده توسط Karel Zak و David MacKenzie.
گزارش باگها (REPORTING BUGS)
برای
گزارش
باگها از
سامانه
پیگیری
مشکلات در
آدرس زیر
استفاده
کنید:
https://github.com/util-linux/util-linux/issues
حق نشر (COPYRIGHT)
حق نشر © 2014 Karel Zak
<kzak@redhat.com>
مجوز GPLv2+: مجوز
عمومی
همگانی گنو
نسخه ۲ یا
بالاتر. این
نرمافزار
آزاد است:
شما
میتوانید
آن را تغییر
داده و
دوباره
توزیع کنید.
هیچ ضمانتی
وجود
ندارد، تا
حدی که
قانون
اجازه
میدهد.
همچنین ببینید (SEE ALSO)
| 2022-05-11 | util-linux 2.38.1 |