Working on a client-provided Linux server where my user account has unrestricted sudo privileges but lacks a home directory creates several practical challenges:
$ echo ~
/
$ ls -la /home
total 8
drwxr-xr-x 2 root root 4096 May 10 03:14 .
drwxr-xr-x 18 root root 4096 Jun 5 08:27 ..
The typical solution usermod -d /home/user -m user fails with "no changes" because:
- The user session is active (SSH or terminal)
- Some distributions prevent home directory modification for logged-in users
- The command may lack proper path resolution
Here are three reliable methods to create a home directory in this scenario:
Method 1: Manual Directory Creation with Proper Permissions
sudo mkdir -p /home/user
sudo chown user:user /home/user
sudo cp -r /etc/skel/. /home/user/
Method 2: Using Sudo to Mimic Usermod
sudo bash -c "mkdir -p /home/user && \
chown user:user /home/user && \
usermod -d /home/user user"
Method 3: Temporary Profile Update
sudo tee -a /etc/passwd <<<'user:x:1000:1000::/home/user:/bin/bash'
sudo mkdir -p /home/user
sudo chown user:user /home/user
After executing any method, verify with:
getent passwd user | cut -d: -f6
ls -ld ~
ls -la ~
- Environment variables may need updating:
sudo -i -u user env - SSH configurations might require:
sudo systemctl restart sshd - For SELinux systems:
sudo restorecon -Rv /home/user
Create an executable script to handle multiple scenarios:
#!/bin/bash
USERNAME="user"
HOMEDIR="/home/$USERNAME"
if [ ! -d "$HOMEDIR" ]; then
sudo mkdir -p "$HOMEDIR"
sudo chown "$USERNAME:$USERNAME" "$HOMEDIR"
sudo cp -r /etc/skel/. "$HOMEDIR/"
sudo chown -R "$USERNAME:$USERNAME" "$HOMEDIR"
echo "Created $HOMEDIR for $USERNAME"
else
echo "$HOMEDIR already exists"
fi
You've been given a Linux user account with unrestricted sudo privileges, but discover it lacks a home directory. This creates practical issues for storing configuration files, scripts, and personal data. The standard usermod approach fails with "no changes" message, likely because the user is currently logged in.
When you run:
sudo usermod -d /home/user -m user
The command fails because:
- The user session is active
- System prevents modifying critical account attributes during active sessions
- The
-mflag requires the original user directory to exist (which it doesn't)
Here are three reliable approaches:
Method 1: Manual Directory Creation with Proper Permissions
sudo mkdir /home/user
sudo cp -r /etc/skel/. /home/user/
sudo chown -R user:user /home/user
sudo chmod 755 /home/user
Method 2: Using Sudo to Create and Populate
sudo bash -c "mkdir -p /home/user && cp -rT /etc/skel /home/user && chown -R user:user /home/user"
Method 3: Temporary Script Execution
Create a temporary script:
cat << 'EOF' | sudo tee /tmp/create_home.sh
#!/bin/bash
mkdir -p /home/user
cp -r /etc/skel/. /home/user/
chown -R user:user /home/user
EOF
sudo bash /tmp/create_home.sh
sudo rm /tmp/create_home.sh
After creating the home directory, verify with:
sudo ls -ld /home/user
sudo -u user bash -c 'echo $HOME'
- Always back up important data before making system changes
- The
/etc/skeldirectory contains default configuration files - Some applications may require logout/login to recognize the new home directory
- For system-wide changes, consider updating
/etc/passwdmanually (advanced)
If possible, the cleanest solution is to recreate the user:
sudo userdel user
sudo useradd -m -s /bin/bash user
sudo usermod -aG sudo user
Note: This requires coordination as it will interrupt active sessions.