تفاوت real user id و effective user id

برای توضیح این تفاوت لازم است کمی به عمق سیستم عامل‌های شبه یونیکس بروم. در کرنل به دلیل نیاز به سرعت و کارآیی بالا از ساختارهای داده‌ای (تا حد امکان) ساده استفاده می‌شود. به همین دلیل است که به جای نام‌ها و گروه‌های کاربری (user /group) از یک متغییر منحصربفرد از نوع unsigned interger استفاده می‌شود که یک عدد است. مشخصا کارکردن با اعداد سریعتر از کارکردن با رشته‌ها (string) است. user ها و groupها بر اساس فایل‌های etc/passwd/ و etc/group/ به شناسه‌ی انحصاری خودشان (user id/ group id) مرتبط می‌شوند. به عنوان مثال، عدد صفر (۰) مشخص کننده‌ی user id و group id کاربر ریشه (root) است.

این user id/ group id در پروسه‌ها نیز وجود دارد. کرنل بر اساس همین user id/group id تصمیم می‌گیرد که پروسه به چه منابعی دسترسی داشته باشد. اغلب منظور از user id/group id  همان effective user id/ effective group id است. پس به طور ساده می‌توان گفت که EUID/EGID تعیین کننده‌ی دسترسی پروسه به منابع سیستم است.

ابزار passwd را در نظر بگیرید. این ابزاری است که برای تنظیم رمزعبور کاربران استفاده می‌شود. این ابزار فایل etc/passwd/ را مورد دسترسی قرار می‌دهد. هر کاربری این دستور را اجرا کند می‌تواند رمزعبور خودش را تغییر دهد. ولی چطور برنامه تشخیص می‌دهد که چه کسی آن را اجرا کرده؟ به کمک effective UID/ effective GID فقط می‌توان گفت که دسترسی به فایل passwd وجود داشته باشد یا خیر. اینجاست که جفت دیگر user id/ group id مطرح می‌شوند که به آن real user id/read group id گفته می‌شود. این دو پارامتر پروسه‌، مشخص می‌کنند که کاربر اجرا کننده‌ی پروسه با چه حساب کاربری لوگین کرده است. پس کافیست برنامه این مشخصات را درخواست کند تا بتواند به درستی عمل کند.

معمولا effective user id/effective group id با جفت‌های real user id/real group id یکی هستند. موضوع وقتی جالب می‌شود که یک برنامه‌ی setuid دار را اجرا کنید. فرض کنید به حساب کاربری خودتان که user id آن ۵۰۰ است وارد شده اید. حالا برنامه‌ای که setuid root دارد اجرا می‌کنید. بخاطر وجود setuid root سیستم عامل effective user ID پروسه را به root (معادل صفر) تغییر می‌دهد. ولی real user id همچنان ۵۰۰ می‌ماند. به این ترتیب برنامه همچنان هویت کسی که آن را اجرا کرده می‌شناسد و می‌تواند به فایل‌ها و سایر منابع با مجوز کاربر ریشه دسترسی داشته باشد.

برگرفته از Real and Effective IDs با تصرف و تلخیص

———————————————

ظاهرا این مقاله‌ چندان گویا نبوده است. پس تصمیم گرفتم مساله رو کمی بیشتر شفاف کنم:

effective UID / effective GID روی ساختن و دسترسی به فایل تاثیر می‌گذارند. موقع ساخته شدن فایل، کرنل ویژگی owner (مالک) فایل را بر اساس effective UID و effective GID پروسه‌ی سازنده‌ی فایل تنظیم می‌کند. یعنی اگر آن effective UID پروسه root بود، مالک فایل root می‌شود. همچنین موقع دسترسی به فایل (مثلا خواندن/نوشتن یا اجرا کردن) کرنل از effective UID و effective GID پروسه برای تشخیص امکان دسترسی به فایل استفاده می‌کند.

پس کاربرد effective UID منحصر به تعیین دسترسی به منابع است. (accessing to resouces)

از طرف دیگر real UID/ real GID برای تشخیص اجرا کننده‌ی پروسه استفاده می‌شود. این مثلا در مجوز‌های ارسال سیگنال تاثیر گذار است. همانطور که می‌دانیم پروسه‌ای که از طرف کاربر root اجرا نشده باشد، فقط در شرایطی می‌تواند به پروسه‌ای دیگر سیگنال ارسال کند که real UID آن پروسه با real UID خودش یکی باشد.

پس کاربرد real UID منحصر به تشخیص کاربر اجرا کننده‌ی پروسه است. (process owner)

چند نکته کاربردی:

real UID: این UID پروسه/کاربر است که تعیین می‌کند چه کسی پروسه را بوجود آورده است. این مقدار فقط وقتی قابل تغییر است که EUID پروسه برابر با صفر باشد.

effective UID: این uid برای تعیین دسترسی پروسه برای اجرای اعمال خاصی استفاده می‌شود. euid می‌تواند به RUID یا SUID تغییر داده شود (در حالتیکه euid برابر با صفر نباشد، اگر euid برابر با صفر باشد می‌تواند به هر چیزی تغییر داده شود!)

Saved UID: اگر بیت set-UID فایل باینری که اجرا شده فعال باشد، SUID با UID مالک فایل یکی خواهد بود. در غیر اینصورت SUID با RUID یکی است.

نکته: set-UID مجوزی است که بر روی فایل‌های باینری فعال می‌شود (به کمک دستور chmod) که Saved UID را تحت تاثیر قرار می‌دهد، این را نباید با setuid که تابعی در زبان‌های برنامه‌نویسی است اشتباه گرفت. این تابع effective UID را تغییر می‌دهد.

منابع:

what i learned 2day

allexperts.com

ساخت فهرست در Open Office.org writer

در این مقاله قصد دارم نحوه‌ی اضافه کردن فهرست به یک فایل نوشتاری که با نرم افزار writer از بسته‌ی اداری OpenOffice.org تولید شده آموزش بدم. فهرستی که ایجاد خواهد شد، یک فهرست اتوماتیک بوده و در صورتیکه بعدا تغییری در فایل ایجاد شود، با چند کلیک ساده به روز (update) می‌شود. همچنین کاربر می‌تواند با کلیک کردن روی هر عنوان روی فهرست به صفحه‌ی مورد نظر هدایت شود.

برای شروع لازم است مطالب نوشته شده به طور مناسبی فرمت بندی شده باشد. به این ترتیب که style مناسبی به عناوین هر بخش داده شده باشد.

styled header in writer

همچنین فرض می‌کنم هنوز شماره‌ی صفحات به سند اضافه نشده است. پس با این راهنما خواهیم داشت:

  • یک فهرست اتوماتیک که کاربر با کلیک روی هر عنوان، به صفحه‌ی مربوطه هدایت می‌شود.
  • شماره‌ی صفحات در قسمت‌های اولیه‌ی سند، از متن اصلی مجزا خواهد بود.

بسیار خب، مراحل زیر می‌بایست اجرا شوند:

۱٫  یک سند جدید ایجاد شود.

۲٫ از منوی Format گزینه‌ی Styles and Formatting انتخاب شود. در پنجره‌ی باز شده‌ی گزینه‌ی Page Styles انتخاب شود.

Styles and Formatting window

۳٫  حال در فضای خالی راست کلیک می‌کنم و گزینه‌ی …New را انتخاب می‌کنم. در پنجره‌ی باز شده، نام preface را وارد کرده و کادر Next Style را به preface تغییر می‌دهم و سپس OK را می‌زنم.

*‌ شما می‌توانید هر نامی که دوست داشته باشید به page style خود بدهید، همچنین می‌توانید پارامتر‌های این style را در سایر سربرگ‌های این پنجره تغییر دهید.

Page Style window ۴٫  حال در کادر Style and Formatting روی preface دوبار کلیک می‌کنم تا فعال شود.

۵٫ در سند چندین بار enter می‌زنم تا کمی فضای خالی برای بخش مقدماتی سند فراهم شود (شما می‌توانید اطلاعات مقدماتی سندتان را وارد کنید). من یک صفحه و نیم فضای خالی ایجاد می‌کنم.

حال می‌بایست بخش دوم سند که همان محتویات اصلی بوده است را بسازم. چون لازم است شماره‌ی صفحات این قسمت از بخش مقدماتی جدا باشد، این مراحل را دنبال می‌کنم.

۱٫  از منوی Insert گزینه‌ی …Manual Break را انتخاب می‌کنم. در پنجره‌ی Insert Break گزینه‌ی Page break و از کادر Style گزینه‌ی default را انتخاب می‌کنم. سپس کادر Change page number را مارک دار می‌کنم و دکمه‌ی OK را کلیک می‌کنم.

Insert Break window

برای اضافه کردن شماره‌ی صفحه کافیست شماره‌ی صفحه را به page style مورد نظرتان اضافه کنید.

برای اضافه کردن فهرست، این مراحل را دنبال می‌کنم:

۱٫  کراسر را در ابتدای خطی در قسمت مقدماتی سند قرار می‌دهم.

۲٫  از منوی Insert، زیرمنوی Indexed and Tables و سپس گزینه‌ی …Indexes and Tables را انتخاب می‌کنم. در کادر Insert Index/Table در کادر Title عنوان فهرست را «فهرست» می‌نویسم و چک باکس کنار عبارت protect against manual changes را برمی‌دارم. به این ترتیب فهرست پس از تولید شدن، قابل ویرایش خواهد بود (فهرست معمولا به فرمت «چپ به راست» تولید می‌شود که لازم است آن را پس از تولید «راست به چپ» کرد.)

۳٫  حالا برای اینکه با کلیک روی هر عنوان فهرست به صفحه‌ی مورد نظر هدایت شویم، به سربرگ Entries وارد می‌شوم. در این پنجره کراسر ماوس را قبل از #E قرار می‌دهم و دکمه‌ی hyperlink را می‌زنم…

Insert index/tables - entries

حالا کارسر ماوس را پس از # قرار می‌دهم و یکبار دیگر دکمه‌ی hyperlink را کلیک می‌کنم.

Insert Index/Tables - Entries

به این ترتیب برای عناوینی که style آن‌ها header 1 بوده  لینک ساخته می‌شود (level 1). برای اینکه سایر عناوین فهرست به طور کامل از این ویژگی برخوردار شود، لازم است از کادر Level در سمت چپ این  پنجره، سایر level ها انتخاب شود و مراحل بالا برای آن‌ها نیز اجرا شود. (نیازی نیست برای هر ده level این کار را تکرار کنید، این عملیات را با توجه به header هایی که در متن به کار برده‌اید انجام دهید. مثلا اگر در سند عناوینی با style ‌سطح header 3 داشته باشیم، کافی است مراحل فوق را تا level 3 انجام دهیم.). پس از پایان کار، دکمه‌ی OK را کلیک می‌کنم تا فهرست ساخته شود.

منابع:

OpenOffice.org wiki:

آموزش سریع عبارت‌های باقاعده (regular expression)

روزی دوست خوبم آقای نبی کرمعلی زاده سناریویی مطرح کرد که لازم بود دو خط از یک فایل متنی با یک الگوی خاص تطبیق داده می‌شد. در نگاه اول مشخص بود که باید از ابزار sed، پرل یا awk استفاده کرد ولی در واقع همه‌ی این ابزارها با کمک یک موجودیت قادر به انجام دادن کار بودند: regular expression

پس از کمی جستجو در اینترنت متوجه شدم که هیچ راهنمای فارسی برای regular expression (که من فارسی آن را «عبارت‌ باقاعده» ترجمه کردم) وجود ندارد*. پس تصمیم گرفتم آنچه یاد می‌گیرم برای کمک به مخاطبانی که ممکن است به آن نیاز پیدا کنند بنویسم. مقاله‌ای که در اینجا عرضه می‌شود، حاصل این تلاش من است. لطفا در صورتیکه در مطالعه‌ی این مقاله به اشکال یا ایرادی نگارشی یا غلط تایپی برخورد کردید، به من اطلاع دهید تا ضمن اضافه شدن اسمتان در بخش مشارکت‌کنندگان به بهبود این اثر کمکی شده باشد.

*- البته بعد از خاتمه‌ی نگارش این مقاله متوجه شدم که کتابی در این زمینه قبلا نوشته شده است.

————————————

نسخه‌ی ۱.۱ این راهنما پس از ویرایش نسخه‌ی ۱.۰ برای دانلود آماده است؛

حجم: ۱۹۵.۷ کیلوبایت

quick regular expression guide Persian (farsi) language

"29655" مرتبه دانلود شده