منبع اصلی نوشتار زیر در این لینک قرار دارد

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

سلام

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

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

cat /etc/passwd | grep -i username

نکته:

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

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

vahid:x:1000:100::/home/vahid:/bin/zsh

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

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

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

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

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

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

grep -i username /etc/group
cat /etc/group | grep -i username

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

video:x:91:vahid

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

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

audio, video, power, disk, wheel, bin, optical, storage

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

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

% id vahid
uid=1000(vahid) gid=100(users) groups=100(users),1(bin),6(disk),7(lp),10(wheel),19(log),21(locate),90(network),91(video),92(audio),93(optical),95(storage),98(power)

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

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

su vahid

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

su: warning: cannot change directory to /home/vahid: Permission denied
su: /bin/bash: Permission denied

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

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

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

chmod 755 /
chmod 755 /bin

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

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

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



برچسب ها : , , , , ,

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد