سؤال

أحتاج إلى تطبيق يعمل في الخلفية على خادم الويب الخاص بي، لكنني بحاجة إلى أن أكون قادرا على بدء / إيقاف التطبيق مع امتيازات الجذر.

من أجل القيام بذلك، أريد إجراء خدمة تعمل على امتيازات الجذر، بحيث يمكنها قتل التطبيق، وابدأ تشغيلها مرة أخرى إذا لزم الأمر.

أخيرا، أحتاج إلى أن أكون قادرا على إرسال أوامر البدء وقتل إلى الخدمة عبر Apache / PHP، بحيث يمكن التحكم بطريقة غير مباشرة عبر الويب.

كيف يمكنني إنشاء خدمة Linux؟
كيف يمكنني التواصل مع خدمة Linux بهذه الطريقة؟

شكرا لك مقدما!

هل كانت مفيدة؟

المحلول

استخدم الأمر EXEC في البرنامج النصي PHP الخاص بك لاستدعاء ملفات Shell. يمكن إعداد ملفات Shell مع BIT "SEATUSER" بحيث يتم تشغيلها كالمالك (بدلا من تشغيل أذونات خادم الويب).

بالطبع، ستحتاج إلى أن تكون حذرا للغاية - الكثير من الاختبارات والرصد وغيرها

أخيرا، فكر في الخدمة التي تعمل كمستخدم مخصص، وليس كجذر. على سبيل المثال مثل Apache ومعظم الخدمات التي تم إجراؤها جيدا تفعل.

وأضاف: إعادة: تشغيل خدمة في لينكس. يعتمد على نكهة لينكس الخاص بك. إذا كنت تريد أن تكون متأكدا من إعادة تشغيل خدمة التطبيق تلقائيا إذا فشلت، بالإضافة إلى التسجيل، checkout Runit:

https:/web.archive.org/web/1/http:/blogs.techrepublic٪2ECOM٪2ECOM/OPenSource/؟p=202.

http://smarden.org/runit.

وأضاف: بدلا من Setuid Bit، أعتقد أن اقتراح فرانك (في التعليق) لاستخدام نظام Sudo أفضل.

نصائح أخرى

لذلك، لديك ثلاث قطع هنا:

  • خادم الويب الخاص بك دون امتياز الجذر
  • تطبيق
  • الخفي الذي يراقب التطبيق

لا تطلق مشكلتك البرنامج الخفي، فهو يكتبها، والتواصل معها من خادم الويب، دون الحاجة إلى امتياز الجذر.

يمكن أن يكون البرنامج الخلفي بسيطا مثل تطبيق غير تفاعلي تم إطلاقه في الخلفية:

# my_dameon &

أنا لست مطور PHP، ولكن البحث عن قائمة انتظار الرسائل و PHP، لقد اكتشفت Beanstalkd.
بالنظر إلى المثال في الصفحة الأولى يبدو أنه يمكنك استخدامه للقيام بما يلي:

  • اباتشي / PHP يرسل بعض الرسائل إلى Beanstalkd
  • خفي يقرأ الرسالة من Beanstalkd. بناء على الأمر الذي يبدأه أو يقتل أو إعادة تحميل تطبيق الخلفية.

يمكنك كتابة الخفي في PHP، لأن هناك العميل في العديد من اللغات
يمكنك أيضا التحقق هذا السؤال

يمكنك إنشاء برنامج مخفي يقبل الأوامر التالية:

  • daemon_name start
  • daemon_name stop
  • daemon_name restart
  • deamon_name reload

بدء الخفي لا ينبغي أن يكون صعبا. فقط تنفيذ daemon_name start من البرنامج النصي PHP يجب تشغيله. بعد البدء، يمكنك كتابة PID من العملية إلى ملف القفل (للتوقف أو إعادة التشغيل أو إعادة التحميل لاحقا). يجب أن يعالج الخفي الإشارات.

في البرنامج النصي PHP، يمكنك بعد ذلك الاحتجاج daemon_name stop. وبعد يجب أن يقوم هذا بإطلاق برنامج مخطط جديد من شأنه أن يتحقق من ملف القفل والحصول على PID من البرنامج الخفي التشغيل وإرسال إشارة سيتم التعامل معها بواسطة برنامج الخفي التشغيل. يجب إزالة ملف القفل / تطهيرها ثم stop بدء الخفي / العملية يمكن أن يستقيل.

أعتقد أنك يجب أن ننظر إلى inetd, ، والتي يمكن تكوينها لتشغيل جميع أنواع الخدمات، ويتم تشغيلها كجذر. يمكنك بعد ذلك كتابة برنامج بسيط نسبيا ليس في حد ذاته جذر متميزا، ولكن عند تشغيله بالجذر يقوم به المهام التي تحتاجها.

فيما يتعلق بالتواصل مع الخدمة التي لم تقل فيها نوع الخدمة، ومع ذلك، فإنك على افتراض أنك تكتب، فستكون الطريقة الأكثر شيوعا هي comunicate عبر مآخذ يونيكس أو mmap. يعتمد على احتياجاتك حقا.

أوه نعم، يجب أن تشير إلى وجود بالفعل تطبيقات لإدارة الويب لأنظمة Linux. ديبمين هو فكرة جيدة حقا يمكن تكوينها للسماح بقدر من السيطرة على ما تحتاجه.

كما يوحي ashodanex، فإن استخدام Beanstalkd سيكون وسيلة ممتازة لفصل الواجهة الأمامية من عامل سطر الأوامر من الجذر. يمكن أن يتم تعيين تافهة لتشغيل فقط ما هو مطلوب بالضبط.

لتشغيل العامل، System_daemon في الكمثرى يمكن توليد وتشغيل البرنامج النصي الذي تشغيل الخفي، مع بدء / إيقاف / إعادة التشغيل.

عند القيام بذلك كن حذرا جدا. لا تستخدم أي بيانات قدمها أي مستخدم من الويب في الأمر exec. هذا قد يسمح لشخص ما بتنفيذ الأوامر بشكل تعسفي على جهازك.

أيضا أنا فرانك الثاني استخدم قاعدة سودو حتى تتمكن من تشغيل الأمر المحدد مع الأذونات التي تحتاجها ولكن لا شيء آخر. سيكون أكثر أمانا بهذه الطريقة.

بالطبع مع

sudo apt-get install openbsd-inetd

يمكنك إنشاء خدمة تريدها

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top