من یک سرور Ubutu 12.4 دارم وقتی با دستور useradd یک user روش تعریف میکنم و بعدش با اون یوزر به سرور ssh میکنم با پیغام Could not chdir to home directory /home/behrooz: No such file or directory مواجه میشم و اینکه برای یوزری که ساختم bash نداره و وقتی میخوام کامندها رو تایپ کنم دکمه TAB کار نمیکنه و باید همه رو خودم دستی و به صورت کامل تایپ کنم. مشکل دوم اینکه کاربرم home directory نداره و این مشکل بزرگی هستش برام. چون وقتی یوزرها لاگین میکنند به سرور، توی home directory شون یه فایل .bash_history ایجاد میشه که از طریق اون میتونید بفهمید که هر یوزری از چه کامندهایی استفاده کرده و از این قبیل چیزها.
برای حل مشکل نداشتن bash اگر دستور bash رو تایپ کنید که یوزر شما به مد bash بره سپس میتونید دستورات تون رو راحت تایپ کنید. ولی این کار جالبی نیست که هرسری لاگین کردید کامند bash رو تایپ کنید.
برای حل مشکل نداشتن bash باید اون رو به صورت دائمی درست کنید که چند تا کار میشه انجام داد که در ادامه به آن میپردازیم.
روش اول : شما وقتی که یک یوزر توی سرور ایجاد میکنید اسم کاربر به فایل etc/passwd هم اضافه خواهد شد که اطلاعات کاربر از جمله نام یوزر، شماره GID, UID و مشخصات دایرکتوری home کاربر و همچنین نوع دسترسیش به shell را نمایش میدهد. فایل passwd را با استفاده از یک ادیتور باز کرده. و یوزر مورد نظرتون رو پیدا کنید. در اینجا من با دستور useradd mohammad یک یوزر دیگه به نام mohammad درست کردم. همونطور که در پایین مشاهده میکنید فایل passwd را باز کردم و shell یوزر mohammad به صورت bin/sh هستش. برای اینکه به شل کامل دسترسی داشته باشه باید bin/sh را به bin/bash تغییر دهیم :
بخشی که نوشته /bin/sh را ادیت کرده و به جای sh بنویسید bash :
مجددا که با یوزر mohammad لاگین کنید و مشاهده خواهید کرد که به bash دسترسی دارید و میتونید کارهاتون رو انجام بدید.
روش دوم : استفاده از دستور usermod با آپشن -s برای تغییر شل کاربر میباشد :
روش سوم : اینکه دستور useradd در اوبونتو 12.4 تنظیمات پیش فرض کاربران رو انجام نمیده. و توصیه میشه که از دستور adduser استفاده کنید. شما میتونید یوزر جدیدی که درست کردید رو حذف کنید و اونو با دستور adduser دوباره بسازید. وقتی با دستور adduser کار کنید موقع ساخت یوزر هم برای کاربر دایرکتوری home رو درست میکنه و هم bash کاربر رو ایجاد میکنه.
روش چهارم : این هست که شما یوزرتون رو با دستور useradd ساختید ولی بدون اینکه حذفش کنید میخواید home دایرکتوری براش ایجاد کنید و دسترسی bash رو هم بهش بدید. برای این کار اول یک دایرکتوری توی مسیری که میخواید home directory کاربر اونجا باشه را درست کنید، همانند دستورات زیر در اینجا من توی مسیر home یک دایرکتوری برای یوزر linuxzone درست کردم. بعدش دسترسی bash رو به user و دایرکتوری home کاربر linuxzone دادم سپس مالکیت یا owner دایرکتوری linuxzone هم به خود یوزر linuxzone دادم و بعدش فایل های مورد نیاز از جمله .bash_logout و .bashrc و .profile برای پروفایل کاربر رو از مسیر /etc/skel به دایرکتوری کاربرم انتقال دادم.
توجه داشته باشید که فایل bash_history که کامندهایی که کاربر وارد استفاده کرده رو نمایش میده بعد از لاگین کردن کاربر به صورت اتوماتیک خودش ایجاد میکنه.
امیدوارم آموزش به دردتون خورده باشه. موفق باشید.
کد PHP:
Could not chdir to home directory /home/shahab: No such file or directory
$
$
کد PHP:
$ bash
behrooz@voip:/$
روش اول : شما وقتی که یک یوزر توی سرور ایجاد میکنید اسم کاربر به فایل etc/passwd هم اضافه خواهد شد که اطلاعات کاربر از جمله نام یوزر، شماره GID, UID و مشخصات دایرکتوری home کاربر و همچنین نوع دسترسیش به shell را نمایش میدهد. فایل passwd را با استفاده از یک ادیتور باز کرده. و یوزر مورد نظرتون رو پیدا کنید. در اینجا من با دستور useradd mohammad یک یوزر دیگه به نام mohammad درست کردم. همونطور که در پایین مشاهده میکنید فایل passwd را باز کردم و shell یوزر mohammad به صورت bin/sh هستش. برای اینکه به شل کامل دسترسی داشته باشه باید bin/sh را به bin/bash تغییر دهیم :
کد PHP:
mohammad:x:1004:1004::/home/mohammad:/bin/sh
کد PHP:
mohammad:x:1004:1004::/home/mohammad:/bin/bash
روش دوم : استفاده از دستور usermod با آپشن -s برای تغییر شل کاربر میباشد :
کد PHP:
# usermod -s /bin/sh mohammad
OR
# usermod -s /bin/bash mohammad
روش چهارم : این هست که شما یوزرتون رو با دستور useradd ساختید ولی بدون اینکه حذفش کنید میخواید home دایرکتوری براش ایجاد کنید و دسترسی bash رو هم بهش بدید. برای این کار اول یک دایرکتوری توی مسیری که میخواید home directory کاربر اونجا باشه را درست کنید، همانند دستورات زیر در اینجا من توی مسیر home یک دایرکتوری برای یوزر linuxzone درست کردم. بعدش دسترسی bash رو به user و دایرکتوری home کاربر linuxzone دادم سپس مالکیت یا owner دایرکتوری linuxzone هم به خود یوزر linuxzone دادم و بعدش فایل های مورد نیاز از جمله .bash_logout و .bashrc و .profile برای پروفایل کاربر رو از مسیر /etc/skel به دایرکتوری کاربرم انتقال دادم.
کد PHP:
root@voip:~# mkdir /home/linuxzone
root@voip:~# usermod --shell /bin/bash --home /home/linuxzone linuxzone
root@voip:~# chown -R linuxzone:linuxzone /home/linuxzone/
root@voip:~# cp /etc/skel/.
./ ../ .bash_logout .bashrc .profile
root@voip:~# cp /etc/skel/.bash_logout .bashrc .profile /home/linuxzone/
root@voip:~#
root@voip:~# ls -la /home/linuxzone/
total 20
drwxr-xr-x 2 linuxzone linuxzone 4096 Nov 26 16:51 .
drwxr-xr-x 8 root root 4096 Nov 26 16:50 ..
-rw-r--r-- 1 root root 220 Nov 26 16:51 .bash_logout
-rw-r--r-- 1 root root 3711 Nov 26 16:51 .bashrc
-rw-r--r-- 1 root root 140 Nov 26 16:51 .profile
root@voip:~#
امیدوارم آموزش به دردتون خورده باشه. موفق باشید.