حل مشکل عدم لاگین با کاربران غیر root در گنو/لینوکس.

توسط: vahit

سلام

خب اولین مشکل بزرگم بعد از نصب آرچ این بود که کاربران غیر روت نمی تونستن لاگین کنن چه توی tty و چه login manager که به لطف و کمک فرود حل شد. ولی می خوام نکات و راه حل هایی رو که برای حلش بررسی کردیم رو اینجا بنویسم تا هم برای دیگران مفید باشه و هم اینکه خدای نکرده دیگه خودم یادم نره. (آخه چیزهایی رو که می نویسیم توی حافظم موندگار ترن نسبت به بقیه D: )

اولین نکته یی که بعد از مواجه با این مشکل باید چک کنیم بررسی کاربر ساخته شده هست برای این کار دستور زیر رو توی ترمینال بزنیم:

نکته:

username۱.  همون کاربری هست که مشکل عدم لاگین داره.
۲. چون احتمالا با هیچ کاربری به غیر از root نمی تونیم لاگین کنیم نیازی به sudo و … برای این دستور نیست.
۳. برای دستور grep از آپشن i استفاده می کنم تا به بزرگ یا کوچیک بودن نام کاربریم توجه نکنه. (شاید برای این مورد زیاد لازم نباشه ولی خب دست من عادت کرده.)

خب خروجیش باید چیزی شبیه به این باشه:

فیلد اوّل: معلومه که دیگه نام کاربری من هست.
فیلد دوّم: جای رمز عبور منه ولی خوشبختانه به جاش x گذاشتن هر چند اگر اینم نبود قطعاً هش شده ی رمز باید می بود.
فیلد سوّم: شماره کاربری (User Id) این نام کاربری هست.
فیلد چهارم: شماره گروه (Group Id) اصلی این نام کاربری هست.
فیلد پنجم: فیلد توضیحات شامل اطلاعات اضافی که هنگام ایجاد نام کاربری وارد می کنیم مثله آدرس، شماره تلفن و … . و چون من این اطلاعات رو وارد نکردم خالی هست.
فیلد ششم: مشخص کننده ی مسیر پوشه ی خانگی من هست.
فیلد هفتم: مشخص کننده ی شل انتخابی من هست.

مهم ترین فیلدهایی که باید توی این خروجی بهشون دقت کنیم تا شاید مشکل رو بتونیم پیدا کنیم می شه گفت به ترتیب اینها هستن:

فیلد هفتم: شاید شل رو به طور اشتباه تعریف کردیم که نمی شه باهاش لاگین کرد. مثلاً اگر من zsh رو نصب نداشتم.
فیلد ششم: اگر این مسیر مشکل داشته باشه. مثلاً سطح دسترسی (permission) درستی نداشته باشه، دستور adduser نتونسته باشه مسیر رو ایجاد کنه و …
فیلد اوّل: مثلاً ممکنه اشتباه تایپی داشته باشیم. (هواس پرتی داره به جزء مهمی از زندگی من تبدیل میشه :)) )
فیلد های سوم و چهارم: امکان اشتباه در این دو گزینه خیلی سخت به نظر میاد مخصوصاً اگر به صورت اتوماتیک توسط دستور adduser مقدار دهی بشن و من نمی تونم موقعیتی رو متصور بشم که بشه به صورت دستی باعث ایجاد اشکال توسط این دو مقدار شد ولی نباید کلاً غافل شد.

اگر تا اینجا مشکلی نبود یا مشکل حل نشد میریم سراغ مرحله ی بعد.

تو این مرحله باید گروه هایی که کاربر مورد نظرمون عضو اون/ها هست رو چک کنیم. در حالت عادی هر کاربر باید عضو گروه users باشد طبق ویکی آرچ تا تاریخ نگارش این پست (Friday, January 11, 2013 (IRST)) این گروه، گروه استاندارد کاربران هست.(+) امّا  برای استفاده از دیگر امکانات و کاربری ها کاربر ما می تونه عضو گروه های دیگه هم باشه. می شه مهم ترین گروه ها و توضیحات مختصرشون رو توی ویکی آرچ دید. برای اینکه بفهمیم کاربر مورد نظر ما توی کدوم گروه ها عضویت داره دو کار می تونیم انجام بدیم:

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

 محتویات این فایل خطوطی به شکل زیر هست:

ای خط به ترتیب شامل اطلاعات زیر هست:
نام گروه:رمز عبور گروه (که برای استفاده در ایجاد محدودیت برای عضویت در گروه به کار می ره و مثل فایل passwd اینجا نمایش داده نمی شه.):شماره ی گروه (gid):کاربر/ان عضو گروه

و خروجی دستورات ما خطوطی هستن شامل گروه هایی که کاربر ما عضو اونها هست. در حالت کلی برای اینکه یه کاربر برای کار به مشکل خاصی برنخوره باید عضو گروههای زیر باشه.

 اسامی گروه هایی مثه video, audio و disk به حد کافی گویای مورد کاربری شون هستن ولی برای فهمیدن مورد کاربری گروههای دیگه و پیدا کردن گروههای دیگه می تونید به صفحه ی Users and Groups در ویکی آرج مراجعه کنید.

۲. استفاده از دستور id به همراه نام کاربری به عنوان آرگومان. پیشنهاد من استفاده از این دستور هست چون خیلی ساده و گویا اطلاعاتی که ما در این مرحله لازم داریم رو در اختیارمون میزاره. برای مثال:

اگر در این مرحله هم مشکلی نبود یا مشکل برطرف نشد میریم سراغ آخرین تیرمون.

تغییر کاربر بعد از ورود: این کار رو احتمالاً قبلاً امتحان کردیم. برای مثال لازم داشتیم یک دستوری رو به طور مستقیم از طریق کاربر root اجرا کنیم نه از طریق sudo. خب برای این کار از دستور su‌ استفاده می کردیم بدون هیج آرگومانی و اگر پسورد کاربر root رو درست وارد می کردیم root می شدیم. خب حالا بازم میخوایم از همین دستور استفاده می کنیم با این تفاوت که نام کاربر رو به جای آرگومان به دستور می دیم. (می تونید man page دستور su‌ رو از این لینک ببینید.) به شکل زیر:

 اگر خوش شانس باشم خطا/هایی در این حالت برای من نشون داده خواهد شد که به فهمیدن مشکل و پیدا کردن راه حل به من کمک خواهند کرد. خطاهایی مثل خطاهای زیر:

 احتمالاً شما هم به اندازه ی من با دیدن خطا ها تعجب کردید! مخصوصاً وقتی از صحیح بودن سطح دسترسی فایل bash و دایرکتوری home خودتون مطمئن باشید.

خب مشکل این هست که سطح دسترسی باید از خیلی بالاتر درست بشه منظور خیلی بالاتر از این سطح از درخت فایل سیستم که بشه توجه کردیم. یعنی همون / !!

برای حل مشکل باید سطح دسترسی / (روت) و شاخه bin/ رو اصلاح کنیم. برای این کار از دستورات زیر استفاده می کنیم:

 با این کار مشکل حل می شه و هر کاربر غیر روت هم می تونه لاگین کنه. امّا اینکه این مشکل چیه و چطور باعث می شه من خودم هنوز نتونستم چیزی بفهمم و از خیلی هایی هم که پرسیدن اظهار بی اطلاعی کردن ولی اینو می دونم که با این روش مشکل حل می شه. البته یک احتمالی می دم اونم اینکه چون من پارتیشن ها رو قبل از نصب Arch با یه CD دیگه آماده کرده بودم شاید موقع نصب Arch‌ نتونسته درست پرمیشن بندی کنه! البته فقط در حد همون احتمال هست!

در آخر لازم هست از فرود عزیز که در طول حل این مشکل من رو راهنمایی کرد تشکر کنم و اگر کمک هاش نبود احتمالش می رفت که شیطون بره تو جلدم و برگردم سراغ … لعنت بر شیطون :D

خوب و خوش باشید :)