راستش اگه اشتباه نکنم
هر چیزی که توی بوت اجرا بشه با دسترسی روت اجرا می شه. مثلا شما یک سرویس درست که خروجی whoami رو توی یک فایل ذخیره کنه بعد این رو فعال کن (enable) حالا کامپیوتر رو ری استارت کن و خروجی رو اگر ببینی نوشته root.
نه وحید جان نیگاه کن ، الان ابزارهای خط فرمان هم با بوت بالا میان ولی دسترسی روت ندارن. در کل تو این مورد که در موردش صحبت می کنیم ، تفاوتی بین ابزارهای گرافیکی و غیرگرافیکی وجود نداره اگه ابزار گرافیکی برای یه کاری دسترسی روت نخواد پس میشه ابزارهای خط فرمانی رو پیدا و استفاده کرد که دسترسی روت نخوان ... (تخصیص منابع و مدیریتشون توی ابزارهای مختلف متفاوت هستش به خاطر همون هم هستش که یه کاری که تو ظاهراً یکسان انجام می شه ممکنه یه ابزار براش دسترسی روت لازم داشته باشه و یه ابزار دیگه ای نداشته باشه)
در مورد موضوع سرویسی هم که مطرح کردین بله به صورت
پیش فرض ، systemd با کاربر روت کارا رو انجام می ده ، ولی فقط به صورت پیش فرض چون شما می تونین خیلی راحت تعریف کنین کاربری که می خواین کارا رو انجام بده کی باشه.
مثلا این فایل رو ایجاد کنین:
sudo nano /etc/systemd/system/whoami.service
بعدش این محتوی رو توش قرار بدین (البته به جای asus چه تو آدرس و چه تو کاربر و گروه باید کاربر و گروه خودتون رو قرار بدین):
[Unit]
Description=whoami testing
[Service]
PermissionsStartOnly=true
User=asus
Group=asus
ExecStart=/bin/bash -c 'echo $(whoami) >> /home/asus/Desktop/whoami.txt'
[Install]
WantedBy=multi-user.target
حالا سرویس رو فعال کنین و اجرا کنین:
sudo systemctl enable whoami
sudo systemctl restart whoami
حالا چه الان و چه بعد ری استارت محتوی اون فایل ساخته شده به این صورت هستش:
cat ~/Desktop/whoami.txt
asus
پس ما می تونیم کنترل کنیم که یک پروسه که تحت بوت اجرا می شه هم با کاربری غیر روت اجرا بشه و یا دسترسی غیر روت داشته باشه.
من فایل sudoer ام مال خیلی وقت پیش هست (قبل از systemd توی آرچ ) و توی این فایل تنظیم کردم که poweroff بدون پسورد اجرا بشه. یادم نمی یاد ولی حتما یک دلیلی داشته که اینکار رو کردم.
بله زمان upstart مدیریت منابع با systemd متفاوت بود و برای چیزی که شما می خواین ، باید این خط (یا یه چیزی شبیه این) رو توی فایل /etc/sudoers قرار می دادیم:
asus ALL=(ALL) NOPASSWD: /sbin/poweroff, /sbin/reboot
ولی systemd بدون نیاز به روت امکان استفاده از poweroff و reboot و ... فراهم کرده.
حالا ممکنه این سوال براتون پیش بیاد که مثلاً زمان ابونتو 14.04 که systemd نبود و Upstart استفاده می شد چرا رابط گرافیکی پسورد روت نمی خواست ولی مثلاً دستور poweroff دسترسی روت می خواست ؟
جواب این سوال رو من تو این قسمت داده بودمش:
در ضمن دستوری رو که خود رابط گرافیکی اوبونتو برای خاموش کردن سیستم استفاده می کنه این هستش :
برای نسخه های قدیمی:
dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
رابط گرافیکی چه زمان Upstart و چه الان که systemd اومده از دستورات poweroff یا reboot استفاده نمی کرد.
رابط گرافیکی اون زمان از دستور بالا برای خاموش کردن سیستم استفاده می کرد که این دستور هیچ نیازی به دسترسی روت نداشت و می شد خیلی راحت با زدن دستور بالا
بدون دسترسی روت سیستم رو خاموش کرد که البته الان شکل اون دستور به این صورت تغییر پیدا کرده:
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true
ممنون علی جان اگه اینطوری که پس اشتباه می کردم. نمی دونم شاید systemd اینکار رو می کنه. چون به قول خودت محل /sbin/poweroff توی پوشه sbin هست که اگه دوباره اشتباه نکنم
باید با روت اجرا بشه.
در مورد دایرکتوی sbin/poweroff هم درسته که مالک این فایل و گروهش روت هستش ولی به این معنی نیست که باید با روت اجرا بشه.
برای توضیح بهتر این خروجی رو نیگاه کنین:
stat -c '%a %n' /sbin/poweroff
777 /sbin/poweroff
همون طور که می بینین پرمیشن این فایل 777 هستش پس همه می تونن این فایل رو اجرا کنین.