در پایتون از ماژول های os و pwd و spwd می‌توان برای بدست آوردن اطلاعات حساب کاربری استفاده کرد. در سیستم عامل های یونیکسی هر حساب کاربری (هر کاربر) دارای یک شناسه منحصر به فرد به نام User ID است. همچنین هر حساب کاربری حتماً عضو یک گروه است که این گروه را گروه اصلی کاربر می گویند. همچنین کاربر می‌تواند عضو گروه‌های دیگری باشد. گروه‌ها نیز دارای یک شناسه منحصر به فرد به نام Group ID هستند. ماژول os دارای متدهای ()getuid و ()getgid است که به ترتیب شناسه های UID و GID را برای کاربری بر می‌گردانند که اسکریپت پایتون را اجرا می کند. متد ()getlogin نام کاربری (Username) کاربر فعلی را نشان می‌دهد که به سیستم لاگین کرده است. متد ()getgroups نیز لیستی تمامی شناسه های گروه‌هایی که کاربر عضو آن است را بر می گرداند.

فرمت فایل etc/passwd/

هرخط از فایل passwd متعلق به یک کاربر (حساب کاربری) است که هر خط از ۷ سری اطلاعات تشکیل شده است که با یک : از هم جدا شده اند. این اطلاعات شامل موارد زیر است :

  • Username : نام کاربری را مشخص می‌کند که معادل خروجی ()getlogin است.
  • Password : یک مدخل به خطی از فایل etc/shadow/ است. هر خط فایل shadow اطلاعات گذرواژه یک کاربر را نگه می دارد.
  • User ID : شناسه عددی کاربر را نشان می‌دهد که معادل خروجی ()getuid است.
  • Group ID : شناسه عددی گروه اصلی کاربر را نشان می‌دهد که معادل خروجی ()getgid است.
  • User ID Info : در این فلید اطلاعات اضافه‌ای در مورد کاربر مانند نام کامل کاربر و شماره تلفن تماس آن نشان داده می شود.
  • Home Directory : محل دایرکتوری خانگی کاربر را تعیین می کند. در لینوکس به صورت پیشفرض دایرکتوری خانگی هر کاربر در زیر دایرکتوری home/ و در مکینتاش دایرکتوری خانگی هر کاربر زیر دایرکتوری Users/ قرار دارد.
  • Shell : نام و مسیر پوسته ای که به کاربر اختصاص داده شده است را نگه می دارد. در لینوکس bash پوسته پیشفرض است.

دسترسی به پایگاه داده حساب کاربری از فایل etc/passwd/

مقدار برگشتی ماژول pwd یک شی تاپل است که شامل ۷ خصیه زیر است که هر یک به یکی از اطلاعات بالا اشاره می‌کند که pw_uid و pw_gid از نوع عدد صحیح و بقیه به صورت رشته هستند.

  • pw_name : نام کاربری را تعیین می کند. شماره اندیس آن صفر است.
  • pw_passwd : گذرواژه رمز شده را تعیین می کند. شماره اندیس آن یک است.
  • pw_uid : شناسه کاربری را تعیین می کند. شماره اندیس آن دو است.
  • pw_gid : شناسه گروه اصلی کاربر را تعیین می کند. شماره آن اندیس سه است.
  • pw_gecos : اطلاعات اضافی را تعیین می کند. شماره اندیس آن چهار است.
  • pw_dir : محل دایرکتوری خانگی کاربر را تعیین می کند. شماره اندیس آن پنج است.
  • pw_shell : پوسته اختصاص داده شده به کاربر را تعیین می کند. شماره اندیس آن شش است.

گذرواژه های هر کاربر در فایل etc/shadow/ به صورت رمز شده ذخیره شده‌اند، بنابراین مقداری که فیلد pw_passwd نشان می‌دهد رشته ای از کاراکترهای * یا x است و خود گذرواژه واقعی کاربر نشان داده نمی شود.

ماژول pwd شامل سه متد ()getpwuid و()getpwnam و ()getpwall است. متد ()getpwuid یک شناسه UID را به عنوان ورودی دریافت می‌کند و اطلاعات passwd مربوط به آنرا نشان می دهد. در قطعه کد ۲ در خط ۴ عدد صفر به تابع ارسال شده است (در تمامی سیستم عامل های یونیکسی شناسه کاربر root عدد صفر است) و در خط ۱۵ متد ()getuid از ماژول os به آن ارسال شده است.

متد ()getpwnam نام یک کاربر را به عنوان ورودی دریافت می‌کند و اطلاعات passwd آنرا نمایش می دهد. در قطعه کد ۳ در خط ۴ نام کاربر root به متد ارسال شده است و در خط ۱۵ متد ()getlogin از ماژول os به متد ارسال شده است.

متد ()getpwall لیست تمامی اطلاعات passwd را برای تمامی کاربران نشان می دهد. این متد هیچ ورودی را دریافت نمی‌کند. قطعه کد ۴ مثال ساده‌ای را نشان می دهد.

دسترسی به پایگاه داده گذرواژه ها از فایل etc/shadow/

همانطور که گفته شد دومین فیلد از هر خط فایل etc/passwd/ به یک خط از فایل etc/shadow/ اشاره می‌کند که اشاره به گذرواژه کاربر دارد. هر خط از فایل etc/shadow/ دارای ۹ فیلد است که با علامت : از هم جدا شده‌اند و شامل اطلاعات زیر می شود.

  • Username : نام کاربری را مشخص می‌کند که معادل خروجی ()getlogin است.
  • Password : رشته ای که گذرواژه رمز شده را نشان می دهد.
  • Last Password Change : تعداد روزهایی از تاریخ یکم ژانویه سال ۱۹۷۰ که که پسورد کاربر تغییر کرده است.
  • Minimum : حداقل زمانی را نشان می‌دهد که گذرواژه باید در طول آن تغییر کند. به عبارتی تعداد روزهایی که تا پیش از کاربر اجازه دارد گذروازه خود را تغییر دهد.
  • Maximum : حداکثر تعداد روزهایی را نشان می‌دهد که گذرواژه کاربر معتبر است.
  • Warn : تعداد روزهایی را نشان می‌دهد که تا پیش از آن کاربر باید گذرواژه خود را تغییر دهد.
  • Inactive : تعداد روزهایی که پس از انقضای گذرواژه، حساب کاربری غیر فعال می‌شود.
  • Expire : تعداد روزها از یکم ژانویه سال ۱۹۷۰ که حساب کاربری غیر فعال است.

ماژول spwd برای درسترسی به shadow استفاده می شود. بر خللاف ماژول pwd برای اجرای اسکریپت های پایتونی که از این ماژول استفاده می کنند، باید با مجوز root اسکریپت را اجرا کنید مقدار برگشتی ماژول spwd یک شی تاپل است که شامل ۸ خصیه زیر است که هر یک به یکی از اطلاعات بالا اشاره می‌کند که sp_login و sp_pwd از نوع رشته و بقیه عدد صحیح هستند.

  • sp_login : نام کاربری را تعیین می کند. شماره اندیس آن صفر است.
  • sp_pwd : گذرواژه رمز شده را تعیین می کند. شماره اندیس آن یک است.
  • sp_lstchg : آخرین زمانی که پسورد کاربر تغییر کرده است را تعیین می کند. شماره اندیس آن دو است.
  • sp_min : حداقل تعداد روزها میان تغییر دادن گذرواژه را تعیین می کند. شماره اندیس آن سه است.
  • sp_max : حداکثر تعداد روزها میان تغییر دادن گذرواژه را تعیین می کند. شماره اندیس آن چهار است.
  • sp_warn : تعداد روزهایی تا پیش از انقضای گذرواژه را نشان می دهد. شماره اندیس آن پنج است.
  • sp_inact : تعداد روزهایی که پس از منقضی شدن گذروازه، حساب کاربری غیر فعال خواهد ماند. شماره اندیس آن شش است.
  • sp_expire : تعداد روزها از یکم ژانویه سال ۱۹۷۰ که تا زمانی که حساب کاربری غیر فعال بوده است را تعیین می کند. شماره اندیس آن هفت است.
  • sp_flag : فیلد رزوز شده را تعیین می کند. شماره اندیس آن هشت است.

ماژول spwd دارای دو متد ()getspnam و ()getspall است. متد ()getspnam نام کاربر را به عنوان ورودی دریافت می‌کند و سپس اطلاعات shadow آنرا بر می گرداند. قطعه کد ۶ اطلاعات کاربر root و نام کاربری که متد ()getlogin از ماژول os بر می گرداند را نشان می دهد. اگر اسکریپت قطعه کد ۶ را با یک حساب کاربری معمولی و غیر root اجرا کنید، خطا نشان داده می‌شود. همچنین این ماژول در سیستم عامل مکینتاش و سیستم عامل ویندوز وجود ندارد. در قطعه کد ۶ تابع ()userExists نام یک کاربر را به عنوان ورودی دریافت می‌کند و سپس بررسی می‌کند که آیا نام کاربر در سیستم عامل (لینوکس) وجود دارد یا نه.

دسترسی به پایگاه داده گروه‌ها و فرمت فایل etc/group/

در سیستم عامل های یونیکسی فایل etc/group/ به عنوان پایگاه داده تمامی گروه‌های سیستم عامل است. هر خط از این فایل مربوط به یک گروه است که شامل چهار بخش زیر و با علامت : از هم جدا شده اند.

  • Group Name : نام گروه را نشان می دهد.
  • Password : این فیلد معمولاً خالی است ولی می‌توانیم برای گروه‌ها نیز گذرواژه تعیین کنیم.
  • Group ID : همانطور که گفته شد در یونیکس ها هر گروه دارای یک شناسه منحصر به فرد است.
  • Group Member List : یک لیست از کاربرانی که عضو این گروه هستند را نشان می‌دهد که نام کاربران با ویرگول از هم جدا شده است.

مقدار برگشتی ماژول grp یک شی تاپل است که شامل ۴ خصیه زیر است که هر یک به یکی از اطلاعات بالا اشاره می‌کند که gr_gid از نوع عدد صحیح و g_name و g_passwd از نوع رشته و g_mem یک لیست از رشته ها است.

  • gr_name : نام گروه را تعیین می کند. شماره اندیس آن صفر است.
  • gr_passwd : اگر گذرواژه تنظیم شده باشد، گذرواژه رمز شده را بر می گرداند. شماره اندیس آن یک است.
  • gr_gid : شناسه عدد گروه را تعیین می کند. شماره اندیس آن دو است.
  • gr_mem : لیست اعضای گروه را بر می گرداند که خودش یک لیست از رشته (نام کاربران عضو گروه) است.

ماژول grp دارای سه متد ()getgrgid و ()getgrnam و ()getgrall است. متد ()getgrgid شناسه عددی گروه را دریافت می‌کند و متد ()getgrnam نام گروه را به عنوان ورودی دریافت می‌کند و سپس اطلاعات را برگشت می دهند. متد ()getgrall هیچ ورودی دریافت نمی‌کند و اطلاعات تمامی گروه‌ها را بر می گرداند. در قطعه کد ۷ دو مثال نشان داده شده است. در خط ۴ یک عدد به متد ()getgrgid ارسال شده است و در خط ۱۲ مقدار برگشتی متد ()getgid از ماژول os ارسال شده است.

اگر لیست برگشتی مربوط به gr_mem خالی باشد به این معنی است که گروه هیچ عضوی نداردقطعه کد ۸ یک دیکشنری ازتمامی گروههایی که دارای عضو هستند را بر می گرداندکلید در دیکشنری شناسه گروه و مقدار هر کلید، نام گروه خواهد بود.