זהו הפקודה safecat שניתן להפעיל בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS
תָכְנִית:
שֵׁם
safecat - כתוב בבטחה נתונים לקובץ
תַקצִיר
safecat tempdir destdir
מבוא
safecat היא תוכנית המיישמת את זה של פרופסור דניאל ברנשטיין maildir אלגוריתם
העתק סטדין בבטחה לקובץ בספרייה שצוינה. עם safecat, מוצע למשתמש
שני הבטחות. ראשית, אם safecat מחזיר סטטוס יציאה מוצלח, ואז כל הנתונים כן
מובטח להישמר בספריית היעד. שנית, אם קיים קובץ ב-
ספריית יעד, ממוקמת שם על ידי safecat, אז מובטח שהקובץ יהיה
להשלים.
בעת שמירת נתונים עם safecat, המשתמש מציין ספריית יעד, אך לא קובץ
שֵׁם. שם הקובץ נבחר על ידי safecat כדי להבטיח שלא יתרחשו התנגשויות שמות קבצים,
גם אם רבים safecat תהליכים ותוכניות אחרות המיישמות את maildir אלגוריתם הם
כתיבה לספרייה בו זמנית. אם רוצים שמות קבצים מסוימים, אז
המשתמש צריך לשנות את שם הקובץ לאחר safecat משלים. באופן כללי, בעת סליל נתונים עם
safecat, תהליך בודד ונפרד אמור לטפל במתן שמות, איסוף ומחיקה של אלה
קבצים. דוגמאות לתהליך כזה הן דמונים, משרות קרון וקוראי דואר.
אמינות סוגיות
מכונה עלולה לקרוס בזמן כתיבת נתונים לדיסק. עבור תוכניות רבות, כולל
סוכני משלוחי דואר רבים, המשמעות היא שהנתונים יקוצצו בשקט. באמצעות
של פרופסור ברנשטיין maildir אלגוריתם, כל קובץ מובטח שלם או לא קיים.
אנשים או תוכניות רבים עשויים לכתוב נתונים לספריית "סליל" משותפת. מערכות כמו מה-
דואר אחסן קבצים באמצעות שמות מספריים בספרייה. כתיבה לא זהירה לקבצים יכולה
לגרום להתנגשות, שבה כתיבה אחת מצליחה והשני נראה מצליח אבל
נכשל. אסטרטגיות נפוצות לפתרון בעיה זו כוללות יצירה של קבצי נעילה או אחרים
מנגנוני סנכרון, אך מנגנונים כאלה נתונים לכישלון. כל מי שיש לו
נמחק $HOME/.netscape/lock כדי להפעיל netscape יכול להעיד על כך. ה maildir
האלגוריתם חסין לבעיה זו מכיוון שהוא אינו משתמש במנעולים כלל.
LA מיילדיר אַלגוֹרִיתְם
כפי שתואר ב maildir(5), safecat חל על maildir אלגוריתם על ידי כתיבת נתונים בשישה
צעדים. ראשית, זה stat()s שני המדריכים tempdir ו destdir, ויוצא אלא אם כן שניהם
ספריות קיימות וניתנות לכתיבה. שנית, זה stat()s השם tempdir/time.pid.host,
איפה זמן הוא מספר השניות מאז תחילת 1970 GMT, PID היא של התוכנית
מזהה תהליך, ו המארח הוא שם המארח. שלישית, אם stat () החזיר כל דבר מלבד
ENOENT, התוכנית ישנה לשתי שניות, מתעדכנת זמן, ומנסה את stat () שוב, א
מספר מוגבל של פעמים. רביעית, התוכנית יוצרת tempdir/time.pid.host. חמישית, ה
התוכנית NFS-כותב ההודעה לקובץ. שישית, התוכנית קישור()הקובץ אל
destdir/time.pid.host. באותו רגע הנתונים נכתבו בהצלחה.
בנוסף, safecat מתחיל טיימר של 24 שעות לפני היצירה tempdir/time.pid.host, ו
מבטל את הכתיבה אם פג תוקף הטיימר. לאחר שגיאה, פסק זמן או השלמה רגילה, safecat
ניסיונות בטל קישור () tempdir/time.pid.host.
יְצִיאָה סטָטוּס
מצב יציאה של 0 (הצלחה) מרמז שכל הנתונים עברו בבטחה לדיסק. א
יש לראות בסטטוס יציאה שאינו אפס כמשמעות של כישלון, אם כי יש מצב חיצוני
סיכוי לכך safecat כתב את הנתונים בהצלחה, אבל לא חשב כך.
שים לב שוב שאם קובץ מופיע בספריית היעד, אז זה מובטח
להיות שלם.
If safecat הושלם בהצלחה, ואז הוא ידפיס את שם הקובץ החדש שנוצר
(ללא הנתיב שלו) לפלט סטנדרטי.
מוּצָע יישומים
שימושים מרגשים עבור safecat יש בשפע, כמובן, אבל אולי מילה יכולה להציע מה
הם.
אם אתה מריץ לינוקס ומשתמש ב-qmail במקום sendmail, עליך לשקול להמיר את הקובץ שלך
תיבת דואר נכנס ל maildir על האמינות המעולה שלו. אם ספריית הבית שלך מותקנת על NFS,
qmail מאלץ אותך להשתמש maildir.
אם אתה כותב יישומי CGI כדי לאסוף נתונים דרך ה-World Wide Web, אתה עשוי למצוא
safecat מוֹעִיל. יישומי אינטרנט סובלים משתי בעיות עיקריות. הביצוע שלהם
סובל מכל עצירה או צוואר בקבוק באינטרנט; הם לא יכולים להרשות לעצמם להציג
בעיות ביצועים משלהם. בנוסף, יישומי אינטרנט לעולם לא צריכים לעזוב את
שרת ומסד נתונים במצב לא עקבי. עם זאת, זה סביר אם סקריפטים של CGI
לבטל ישירות מסד נתונים כלשהו - במיוחד אם מסד הנתונים עמוס יתר על המידה או איטי. מה
קורה כאשר משתמשים משתעממים ולוחצים על "עצור" או "חזרה"? אולי פעילות מסד הנתונים
משלים. אולי הסקריפט של CGI נהרג, ומשאיר את ה-DB במצב לא עקבי.
שקול את האסטרטגיה הבאה. הפוך את סקריפט ה-CGI שלך לשפוך את הבקשה שלו לסליל
ספריה באמצעות safecat. החזר מיידית קבלה לדפדפן. עכשיו הדפדפן
יש ערובה מלאה שהגשתם תתקבל, והביצוע הנתפס
של יישום האינטרנט שלך הוא אופטימלי.
בינתיים, דמון ספולר מבחין בבקשה הטרייה, חוטף אותה ומעדכן את
מאגר מידע. ניתן להודיע לדפדפנים שבקשתם תתמלא תוך X דקות.
התוצאה היא ביצועים אופטימליים למרות אינטרנט קפריזי. בנוסף, משתמשים יכולים
יוצע אמינות של כמעט 100%.
דוגמאות
כדי לשכנע את sendmail להשתמש maildir למסירת הודעות, הוסף את השורה הבאה שלך
קובץ .forward:
| SAFECAT HOME/Maildir/tmp HOME/Maildir/חדש || יציאה 75 #שם משתמש
איפה SAFECAT הוא הנתיב השלם של ה safecat תָכְנִית, עמוד הבית הוא הדרך השלמה אל
ספריית הבית שלך, ו את USERNAME הוא שם הכניסה שלך. ביצוע השינוי הזה עשוי להשתלם
כבוי; קמפוסים וחברות רבות מעלים ספריות ביתיות של משתמשים עם NFS. באמצעות maildir ל
משלוח לתיקיית הדואר הנכנס שלך עוזר להבטיח שהדואר שלך לא יאבד בגלל NFS מסויים
שְׁגִיאָה. כמובן, אם אתה מנהל מערכת, אתה צריך לשקול לעבור ל
qmail.
כדי להפעיל תוכנית ולתפוס את הפלט שלה בבטחה לתוך ספרייה כלשהי, אתה יכול להשתמש במעטפת
תסריט כמו הבא.
#!/ bin / bash
MYPROGRAM=cat # התוכנית שברצונך להפעיל
TEMPDIR=/ Tmp # שם ספרייה זמנית
DESTDIR=$HOME/work/data # הספרייה לאחסון מידע
try() { $* 2>/dev/null || echo NO 1>&2 }
הגדר `( try $MYPROGRAM | try safecat $TEMPDIR $DESTDIR ) 2>&1`
מבחן "$?" = "0" || יציאה -1
test "$1" = "לא" && { rm -f $DESTDIR/$2; יציאה -1; }
סקריפט זה ממחיש את המלכודות של כתיבת תוכניות מאובטחות עם המעטפת. ה
הסקריפט מניח שהתוכנית שלך עשויה לייצר פלט כלשהו, אך לאחר מכן לא תצליח.
אין דרך לזה safecat כדי לדעת אם התוכנית שלך הושלמה בהצלחה או לא,
בגלל הסמנטיקה של הקליפה. כתוצאה מכך, safecat עשוי ליצור קובץ ב-
ספריית נתונים שהיא "שלמה" אך לא שימושית. סקריפט המעטפת מוחק את הקובץ פנימה
המקרה הזה.
באופן כללי יותר, הדרך הבטוחה ביותר לשימוש safecat הוא מתוך תוכנית C אשר מפעילה
חתול בטוח עם מזלג() ו לבצע (). תהליך ההורה יכול בפשטות לַהֲרוֹג() מה היא safecat
תהליך אם מתפתחות בעיות כלשהן, ובאופן אופציונלי יכול לנסות שוב. האם ללכת לזה
הבעיה תלויה במידת הרצינות שלך בהגנה על הנתונים שלך. כך או כך, safecat
לא יהיה החוליה החלשה בזרימת הנתונים שלך.
השתמש ב-safecat באינטרנט באמצעות שירותי onworks.net