יצירת שירות שלא ניתן לעצירה בלינוקס
-
אני יודע שככל הנראה התשובה היא לא, אבל בכל זאת אולי אני יחכים משהו
אני רוצה לשים לעצמי על המחשב (לינוק) תוכנה לניהול זמן, זאת אומרת שהמחשב ינעל בשעה X וכדו'
הבעיה היא שכל תוכנה שאני יעשה אני תמיד יוכל להרוג אותה (אם המחשב לא נעול)
חשבתי האם יש אפשרות להריץ תוכנה שתיצור מספר עותקים ממנה עם שם אקראי
וכל יחידה בודקת האם תוכנת חסימה פועלת כעת ואם לא היא יוצרת אותה מחדש
וכן התוכנה תיצור עותקים של התוכנה עם שמות ראנודמאלים ברחבי המערכת כך שאני לא יוכל למחוק אותה
והדרך היחידה לעצור את התוכנה תהיה ע"י הקשת סיסמה בתוכנה הראשית והתוכנה הראשית תשמור איכשהו את המידע איפה מוחבאים כל התהליכים ותסגור אותם (יותר נכון צריך למצוא דרך לעביר את הנתונים האלו שיהיו בכל הרשת למקרה שהתוכנה הראשית נופלת)
האם זה אפשרי? או שאני מדומיין?
נ.ב. אולי זה לא נושא טוב לדיון ציבורי כי נטפרי מנסים לבנות תוכנת וופרי ללינוקס ולא רוצים שידברו על המאחורי הקלעים -
@aaron
אכן אני רוצה להגביל את עצמי
והבעיה היא שroot יעיף את הכל
אבל אם אני לא יודע איזה תהליך להרוג אז לא עוזר לי root
@WWW
אולי זה הסיבה שלא מצאתי שום מדריך לתהליך כזה
כי זה יכול להיות בעייתי מאוד שיהיה תהליך אין לך שליטה עליו
עריכה: את האמת כנראה תמיד המשתמש יכול להפעיל מחדש את המחשב במצב recovery
(ואז נראה לי שהשירותים לא עולים)
ולמחוק את הקובץ של התהליך הראשי ולבטל את כל השירותים הלא מזוהים וכך הוא יעקוף את החסימה -
@clickone
נתת לי רעיון חדש
שיעזור למי גם למי שמכיר את לינוקס ישר והפוך (אולי זה פתרון לנטפרי)
וזה פשוט למוצא תוכנה כמו CRON שרצה במילא על כל מחשב לינוקס
ואם יש אותו בקוד פתוח פשוט להוסיף לתוכנה שורה שבודקת כל X דקות האם השירות הראשי פעיל ואם לא אז מפעיל שוב/מתקין
ואז לקמפל אותה (אפשר לעשות את התהליך הזה על שרת ואז לתוכנה תוריד אותה)
ולהחליף את התוכנה המזויפת עם התוכנה הישנה ואז גם ללקוח הכי מתוכם אין אפשרות לדעת מי שחדש את הפעולה כל הזמן
הבעיה היא שמידי פעם יש עדכוני תוכנה שפשוט ידרסו את התוכנה המזוייפת
בשביל זה אפשר אולי להריץ סקריפט בשירות הראשי שבודק כל הזמן האם יש עדכון לתוכנה הזאת
ואם כן, היא יוצרת עותק חדש של הגירסה האחרונה ומעדכנת בלי לשאול את הלקוח
החסרון בזה הוא שלא תמיד הלקוח רוצה עדכון והוא לא יבין מי עדכן את זה לבד (אבל ברוב המשתמשים זה לא רלוונטי)
אפשרות שניה היא להגדיר איכשהו שAPT ידלג על הבדיקה של התוכנה הזה והיא לעולם לא תתעדכן -
@nigun לא משנים דברים בקרנל, מודול קרנל זה ספרייה שנטענת על ידי הקרנל ומשתמשת ב-API של הקרנל להוסיף יכולות או התנהגויות שונות לקרנל.
דרייברים הם סוג של מודול קרנל, שמוסיפים יכולות לקרנל לתקשר מול התקנים שונים
ווייפרי הוא "מודול קרנל" בווינדוס שמשתשמת ב-API של הקרנל שמיועד עבור סינון תעבורה, (וגם הגנת הרכיבים הנחוצים ממחיקה)
מן הסתם יש משהו מקביל בלינוקס.
לעניינך אתה רוצה להשתמש ב-API של הקרנל עבור דבר אחד ויחיד - מניעת הריגת תהליך. כל השאר אין צורך ולא מומלץ לעשות בתוך הקרנל, תעשה ב-userland (מרחב ה-user לעומת מרחב הקרנל).
פה יש תחילת מהלך.
אבל שים לב לכמה דברים:- מודול קרנל צריך לכתוב ב-C.
- גם אם אתה מכיר את שפת C, יש קשיים והגבלות מיוחדים בתכנות קרנל שלא קיימים ב-userland
- שגיאה בקוד של המודול יגרום ל-kernel panic (המקביל של מסך כחול בלינוקס)
- בד"כ צריך להתאים אותו לגירסת הקרנל, (ה-API שפנימי של הקרנל לא יציב ומשתנה כל הזמן), אם זה לא מתקבל כחלק מהקוד של הקרנל, תצטרך לשדרג אותו בכל שחרור חדש של הקרנל או לחילופין לא לשדרג את גירסת הקרנל שלך.
(סוף דבר, תשקול פתרון לא טכנולוגי...)
-
המשפט הזה
נ.ב. אולי זה לא נושא טוב לדיון ציבורי כי נטפרי מנסים לבנות תוכנת וופרי ללינוקס ולא רוצים שידברו על המאחורי הקלעים
בכלל לא נכון. נטפרי לא עובדים על זה בינתיים בכלל,
וכשיעשו את זה זה יהיה די דומה למה שיש היום בwindows כלומר הרעיון אותו דבר והיעדר הביצוע אינו מהצורך לחשוב איך אלא פשוט מעיסוק במשימות אחרות. -
@dovid אמר ביצירת שירות שלא ניתן לעצירה בלינוקס:
המשפט הזה
נ.ב. אולי זה לא נושא טוב לדיון ציבורי כי נטפרי מנסים לבנות תוכנת וופרי ללינוקס ולא רוצים שידברו על המאחורי הקלעים
בכלל לא נכון. נטפרי לא עובדים על זה בינתיים בכלל,
התכוונתי שמתכננים לבנות, כי זה מופיע ברשימת דברים לפיתוח בנטפרי.
-
@nigun הדיון שם על כתיבת קרנל שלם ב-GO. לכתוב מודול עבור קרנל לינוקס נראה לי שכולי עלמא מודים שאי אפשר, כי תוכנות GO חייבים את ה-runtime של GO, וב-runtime של GO יש יותר מדי דברים שתלויים על ההנחה שהקוד רצה ב-userspace.
כתבתי מסברא, יכול להיות שאני טועה, או שיש runtime חילופי ל-GO שירוץ בתוך הקרנל, או שאפשר לכתוב אחד כזה.