انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: دلیل استفاده از sudo در اسکریپتی متعلق به کاربر root (حل شد)  (دفعات بازدید: 2213 بار)

0 کاربر و 4 مهمان درحال مشاهده موضوع.

آفلاین احمد حقیقی

  • Full Member
  • *
  • ارسال: 229
  • جنسیت : پسر
  • MrRolling
سلام دوستان
یه سوال (این مشکل رو خیلی وقت پیش هم بهش برخورده بودم،‌و امروز دوباره دیدمش و میخوام دلیلش رو بفهمم)

من بش اسکریپت نوشتم که توسط cron و با یوزر root اجرا میشه (با یوزر روت هم ساخته شده)
*/2 * * * * root sh /root/foo.sh
(خط فوق در etc/cron.d/foo/ نوشته شده و فایل پرمیشن +x داره)
منتهی بعضی از کامند های داخل اسکریپتم اجرا نمی شن
و نیاز داره قبلشون sudo بذارم. به عنوان مثال در بخشی از اسکریپت نیازه تا اینترفیس ی Up بشه، اگر بدون sudo مثلا بنویسم ifconfig eth1 up ، اینترفیس آپ نمیشه، مگر اینکه sudo بیاد جلوش

ولی بش اسکریپت دستی که اجرا میشه کار میکنه
با کران ک اجرا میشه (وقتی sudo نداره) کار نمی کنه
بیت های SUID و SGUID برا هیچ کدوم ست نشدن (نه اسکریپتم نه برنامه مورد نظر) و پرمیشن اسکریپتم ۷۵۵ هستش
هیچ لاگ خطا یا هشداری هم وجود نداره

کاربر سیستم root هستش و مالک اسکریپت نوشته :)ه است.

سپاس :)
« آخرین ویرایش: 05 اسفند 1395، 10:26 ق‌ظ توسط احمد حقیقی »
“Open source is a development methodology; free software is a social movement”

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4869
  • جنسیت : پسر
  • masoft قدیم
از چه توزیعی استفاده می‌کنید؟

آفلاین احمد حقیقی

  • Full Member
  • *
  • ارسال: 229
  • جنسیت : پسر
  • MrRolling
از چه توزیعی استفاده می‌کنید؟

Debian 8.2
#uname -a
Linux XXXXX 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u4 (2015-09-19) x86_64 GNU/Linux
« آخرین ویرایش: 17 بهمن 1395، 07:14 ب‌ظ توسط acu281 »
“Open source is a development methodology; free software is a social movement”

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4869
  • جنسیت : پسر
  • masoft قدیم
سعی کردید که فایل رو مستقیم بدون پیش‌دستور sh اجرا کنید؟
مسلما نیاز هست که خط اول فایلتون چنین چیزی داشته باشه:
#!/bin/bash
« آخرین ویرایش: 17 بهمن 1395، 08:17 ب‌ظ توسط nixoeen »

آفلاین احمد حقیقی

  • Full Member
  • *
  • ارسال: 229
  • جنسیت : پسر
  • MrRolling
سعی کردید که فایل رو مستقیم بدون پیش‌دستور sh اجرا کنید؟
مسلما نیاز هست که خط اول فایلتون چنین چیزی داشته باشه:
#!/usr/bin/bash
قبل هر چیز، ممنون از جواب هاتون

بله،‌این ها رو هم تست کردم قبلا.


shebang رو اینطوری نوشتم:
#!/bin/shو کران رو از
root sh /root/foo.shبه این تغییر دادم:
root /root/foo.shولی بازم هم کار نمیکنه
منتهی به صورت دستی که اسکریپت رو (حتی بدون sh و به صورت فراخوانی اسمش) اجرا میکنم،‌کار میکنه!


البته تا جایی که میدونم،‌وقتی با صراحت اسکریپت رو با sh یا bash یا کلا در هر زمینه ای (مثلا پایتون و ..) اجرا می کنیم. نیازی به shebang نیست. چون قبلش خودمون مفسر رو فراخوانی می کنیم
ولی بازم تست کردم و نشد.
“Open source is a development methodology; free software is a social movement”

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4869
  • جنسیت : پسر
  • masoft قدیم
با bash هم تست کردید؟ توی پستم مستقیما گفته بودم که از bash استفاده کنید :)

آفلاین احمد حقیقی

  • Full Member
  • *
  • ارسال: 229
  • جنسیت : پسر
  • MrRolling
با bash هم تست کردید؟ توی پستم مستقیما گفته بودم که از bash استفاده کنید :)

آره تست کردم
تو گروه تلگرام گفتم که توی سیستم من sh به bash اشاره میکنه و فرقی ندارن

ولی با این وجود هم، کران و اسکریپت رو عوض کردم و bash گذاشتم
باز هم کار نمی کنه
و همچنین دو حالت bash foo.sh  و اجرای مستقیم foo.sh (در کران) رو هم تست کردم.

و در تمامی سناریو ها، وقتی sudo میذارم،‌کار میکنه و بدون sudo  کار نمی کنه.
« آخرین ویرایش: 17 بهمن 1395، 09:28 ب‌ظ توسط acu281 »
“Open source is a development methodology; free software is a social movement”

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4869
  • جنسیت : پسر
  • masoft قدیم
آیا آدرس کامل برنامه‌ها رو برای اجرای اون‌ها نوشتید؟
برای مثال اگر نیاز به ifconfig دارید، باید بنویسید:
/sbin/ifconfig

آفلاین احمد حقیقی

  • Full Member
  • *
  • ارسال: 229
  • جنسیت : پسر
  • MrRolling
آیا آدرس کامل برنامه‌ها رو برای اجرای اون‌ها نوشتید؟
برای مثال اگر نیاز به ifconfig دارید، باید بنویسید:
/sbin/ifconfig

خیلی ممنون :)
آره،‌با گذاشتن sbin درست شد!
دلیلش چی میتونه باشه؟
به خاطر working directory اسکریپت؟


از کامند های دیگه ای مثل grep, ps, echo استفاده میکنم،‌منتهی این ها کار میکنن و مشکلی ندارن.
و البته هیچ کدوم این ها (grep, ps, echo, ...) برای کار کردن دسترسی روت نیاز ندارن!!  :-k
“Open source is a development methodology; free software is a social movement”

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4869
  • جنسیت : پسر
  • masoft قدیم
دلیلش متغیر محیطی PATH هستش که آدرس‌هایی مثل /sbin/ رو نداره.

آفلاین احمد حقیقی

  • Full Member
  • *
  • ارسال: 229
  • جنسیت : پسر
  • MrRolling
دلیلش متغیر محیطی PATH هستش که آدرس‌هایی مثل /sbin/ رو نداره.


آره
درسته!!
تو سیستم خودم (PC) همه ی این ها توی /usr/bin/ هستن، اما تو دبیان ifconfig توی /sbin/ هست و ps, grep, echo توی /bin/ هستند

ممنون  :)

“Open source is a development methodology; free software is a social movement”

آفلاین احمد حقیقی

  • Full Member
  • *
  • ارسال: 229
  • جنسیت : پسر
  • MrRolling
دلیلش متغیر محیطی PATH هستش که آدرس‌هایی مثل /sbin/ رو نداره.


مثل این که دلیلش این نیست
توی $PATH من sbin/ رو دارم!
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/rvm/bin
“Open source is a development methodology; free software is a social movement”

آفلاین M!lad

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1757
تو اسکریپتی که توسط cron اجرا میکنی از PATH یک echo بگیر redirect کن به یه فایل.
تو مورد شما ظاهرا cron داره در یک environment مجزا/متفاوت اسکریپت رو اجرا میکنه.

این‌ها رو هم بخونید:

https://superuser.com/questions/871704/why-does-root-cron-job-script-need-sudo-to-run-properly/1046126#1046126https://stackoverflow.com/questions/10129381/crontab-path-and-user/14694543#14694543https://stackoverflow.com/questions/10129381/crontab-path-and-user/10129701#10129701
« آخرین ویرایش: 19 بهمن 1395، 10:45 ب‌ظ توسط M!lad »
..I feel no fault for the fault I feel..

آفلاین احمد حقیقی

  • Full Member
  • *
  • ارسال: 229
  • جنسیت : پسر
  • MrRolling
تو اسکریپتی که توسط cron اجرا میکنی از PATH یک echo بگیر redirect کن به یه فایل.
تو مورد شما ظاهرا cron داره در یک environment مجزا/متفاوت اسکریپت رو اجرا میکنه.

این‌ها رو هم بخونید:

https://superuser.com/questions/871704/why-does-root-cron-job-script-need-sudo-to-run-properly/1046126#1046126https://stackoverflow.com/questions/10129381/crontab-path-and-user/14694543#14694543https://stackoverflow.com/questions/10129381/crontab-path-and-user/10129701#10129701

ممنون بابت پاسخ و لینک ها
آره مشکل همین بود که گفتین

کران یک شل جدا از شل کاربر و همچنین روت داره و به متغیر PATH دسترسی نداره  و برای اسکریپت من متغیر PATH فقط شامل مسیر های زیر بود:
/usr/bin:/bin
برای رفعش هم میشه sudo گذاشت، میشه مسیر دقیق برنامه ها رو داد و همچنین میشه متغیر های محیطی رو توی crontab ست کرد.
(لینک ها بسیار مفید هستند)
« آخرین ویرایش: 19 بهمن 1395، 11:01 ب‌ظ توسط acu281 »
“Open source is a development methodology; free software is a social movement”