'Could not chdir to home directory /home/[user]: Permission denied'
I have a secondary disk which holds a /home directory structure from a previous install of Linux. I installed a new version on a new primary drive and mounted this secondary drive as the new /home. Problem is, even though the users are the same names and I can access the home directories for the users, I cannot login directly to their home directories, as I get the following error: -
Code:
login as: [me] What have I broken? :) |
Have you tried using chown as root to change the ownership?
What are the permissions set as? Post the output from Code:
ls -la /home/ |
The problem is most likely related to the user and group IDs. When you create a user it is given a userid and a primary group ID. This information is stored in /etc/password normally (unless you use some form of network based authentication).
If you look at /etc/passwd you will see a number of user entries, below is a sample for some of the passwd file users on my system Quote:
I am guessing the previous system on which the /home directories were originally created had assigned different user id's in the password file. As devnull10 recommends the chown command can be used to change the owner and is probably a simpler way of fixing the access than trying to change the user ids in the /etc/passwd file because other files on the linux system will be using the new user id. |
The output: -
Code:
[jon@joshua11 /]$ ls -la /home/ chown -R 500:500 /home/jon ...but this doesn't seem to change the login problem, although I *do* have ownership of the files and directories as this user. Am I somehow missing changing the UID and GID for the hidden files even though the username is the same? Something that used the previous UID and GID in whatever scripts automatically moves your location to your home directory when you login? Thanks for your patience. |
The syntax of chown is:
Code:
chown [user] [dir] Code:
chown -R jon /home/jon/ |
I have already tried that to no effect. Login problem persists. Hidden files appear to have changed, but since both usernames are the same, it's hard to tell.
|
Quote:
I've also done chgrp -R 500 /home/jon (and tried substituting "500" for "jon") to no effect. I have acces to the home directory as that user, just not able to automatically login to the home directory. It fails and I have to do "cd /home/jon" after logging in. |
You could try creating a new home directory when logged in as root for the user jon. The following command will modify the user to have the home directory /home/jon_home (it will be created if it doesn't already exist). The -m flag will copy the contents of your existing home into the new directory.
Code:
usermod -d /home/jon_home -m |
The following command will show what user/group id's are set on the directory
ls -ln /home Is the version of linux the same as the one you had previously installed. When you create a user a default set of files are copied into the users home directory from the directory /etc/skel It could be that your .bash_profile .cshrc or other login files are what is causing the directory failure. It would be worth looking at these files to see if they are causing issues. The other thing that occurs is can you run the command cat /etc/fstab | grep /home This will list the entry for the /home partition showing the mount options that have been used to mount it. Regards Lee |
Thanks Cardy - that shows a little more information on /home: -
Code:
drwx------. 32 500 500 4096 2010-01-06 19:52 jon Code:
jon:x:500:500:Jonathan:/home/jon:/bin/bash Code:
/dev/sdb1 /home ext3 defaults 2 1 I couldn't see anything amiss with .bashrc or .bash_profile or anything like that, but it is definitely something to do with login. |
Have you checked the following:
The output of the command Quote:
Check the following files. Quote:
Regards Lee |
Output of secure log: -
Code:
Jan 6 22:53:44 joshua11 sshd[6194]: Accepted password for jon from [IP ADDRESS] port 2143 ssh2 |
Very odd looking problem you have there. Could it be a SELinux context issue?
Try looking at the output of these: # ls --context /home # ls --context /home/jon If not SELinux, it could also be an ACL issue. Try: # getfacl /home |
Quote:
Code:
[root@joshua11 ~]# ls --context /home |
Could it be the change from x86 to x86_64? Maybe some architecture incompatibility?
|
Quote:
Code:
usermod -d /home/jon_home -m jon Code:
login as: jon |
Gah, fixed it by shunting everything to another directory, deleting the user and recreating it and shunting everything back. It's fixed it, but I'd prefer to know why it happened in the first place...thanks anyway everyone for all your help.
|
This could be selinux related, there is a quick way to check by switching selinux into permissive mode rather than enforcing.
if you edit the file /etc/sysconfig/selinux Quote:
If you change this to SELINUX=permissive save the file and reboot the machine then selinux will change to warning you about policy issues rather than enforcing the security. Assuming after the reboot you can login without error then you can further diagnose the correct permissions that should be applied on the /home directory. If you still receive the errors even with selinux in permissive mode then its unlikely to be an selinux issue. You can easily change back to your default setting after performing the test by switching back to enforcing in the same file and again rebooting. Regards Lee |
Thanks, I'll look into that. I'm thinking more and more that this was an SELinux issue - it was/is certainly enabled on both machines.
|
Just out of interest what permissions are now shown when you run the commands
ls --context /home ls --context /home/jon Regards lee |
Quote:
Sure thing... Code:
[root@joshua11 ~]# ls --context /home Code:
[root@joshua11 ~]# ls --context /home/jon |
I just want to mention that I have *exactly* the same problem!
My usual setup is that I have a system partition and a user partition. Every time I upgrade, I just reformat the system partition and install the new system on it. Then I do "groupadd" and "user add" to add myself to the system with the home directory set to my directory in the user partition. I've been using Fedora and this procedure worked till FC8. The next system reinstall I tried after FC8 was FC11 and that's when I started to see this problem and I went back to FC8. Last week, my machine died. Luckily, my harddrive was fine and I have another machine that I can use. So, I move my harddrive from the dead machine to the other machine and installed FC13. I see exactly the same problem again! When I logged in, I get the error message and my current working directory is set to / and my login scripts in my user partition are not executed. Then I started googling this problem and found this thread. I just tried setting SELINUX=permissive and rebooted my machine and, Voila, everything is working! Thanks so much! -- Bill Cheng |
I have also faced the same problem using Fedora 13. I have shared the home directory from an NFS server for all the users in a cluster. Whenever I use SSH to login to a node, it is successful but changing to home directory of the user fails. But when I type cd, it changes to the user's home directory.
Code:
[root@garl-amd1 ~]# ssh akshay@garl-amd5 Akshay |
I have fixed it! It was an SELinux problem. I got an alert from the SELinux troubleshooter after I switched SELinux to permissive mode. It suggested that I should use the command
$setsebool -P use_nfs_home_dirs=1 But, I used the SELinux GUI instead. I guess other related problems can be fixed by configuring SELinux properly. |
SElinux
Quote:
I had the same problem. On one of my hosts I kept receiving this error: Could not chdir to home directory /home/me: Permission denied upon login. After logging in, I could just chdir manually into it. This error in turn also prevented SSH from using key authentication, as the .ssh directory was unreachable before logging in, and SSH defaulted to requesting the password. After painstakingly checking all the many usual things with SSH on both sides, I checked the SElinux contexts: on the well-behaving hosts: # ls --context -d /home /home/me drwxr-xr-x. root root system_u:object_r:home_root_t:s0 /home drwx------. me me unconfined_u:object_r:user_home_dir_t:s0 /home/me on the misbehaved host: # ls --context -d /home /home/me drwxr-xr-x. root root system_u:object_r:file_t:s0 /home drwx------. me me unconfined_u:object_r:user_home_dir_t:s0 /home/me Notice the /home/me has the same context, while /home hasn't, having file_t instead of home_root_t. Simply running # restorecon /home solved a problem which had taken a few hours to figure out. |
Thank you marcoecc! :)
I just installed CentOS 6. First time around, I installed the OS on the first drive. Then I added a larger RAID1 partition and copied content of /home into the new RAID1 partition and mounted on /home. Then I got this same problem. After googling around I finally got to your post. # restorecon /home does the trick. Thanks. |
All times are GMT -5. The time now is 02:19 PM. |