홈 디렉토리로 이동할 수 없는 오류 해결 방법

LinuxBeginner
지금 연습하기

소개

"could not chdir to home directory" 오류는 Linux 사용자가 흔히 겪는 문제입니다. 이 오류는 일반적으로 사용자가 로그인할 때 시스템이 해당 사용자의 홈 디렉토리로 변경할 수 없을 때 나타납니다. 이 튜토리얼에서는 이 오류의 원인, 제어된 환경에서 이를 재현하는 방법, 문제 진단, 그리고 Linux 시스템에서 이 문제를 효과적으로 해결하는 방법을 안내합니다.

홈 디렉토리 오류 이해

"Could not chdir to home directory" 오류는 Linux 가 로그인 중에 홈 디렉토리에 접근할 수 없을 때 발생합니다. 이 의미를 실제 상황에서 이해해 봅시다.

홈 디렉토리란 무엇인가?

Linux 시스템에서 모든 사용자는 개인 파일과 설정을 저장하는 전용 홈 디렉토리를 갖습니다. 대부분의 사용자에게 이 디렉토리는 /home/username에 위치합니다. 예를 들어, 이 랩 환경의 기본 사용자는 /home/labex에 홈 디렉토리를 가지고 있습니다.

다음 명령으로 홈 디렉토리 경로를 확인할 수 있습니다.

echo $HOME

이 명령은 홈 디렉토리 경로를 표시해야 하며, 랩 환경에서는 다음과 같습니다.

/home/labex

로그인 시 발생하는 일

Linux 시스템에 로그인하면 여러 가지 일이 발생합니다.

  1. 시스템은 사용자 이름과 비밀번호를 인증합니다.
  2. /etc/passwd에서 사용자 정보를 읽습니다.
  3. 홈 디렉토리로 변경을 시도합니다.
  4. 시스템이 홈 디렉토리에 접근할 수 없으면 "Could not chdir to home directory" 오류를 표시합니다.

시스템에서 사용자 정보를 살펴보겠습니다.

grep labex /etc/passwd

다음과 유사한 출력을 볼 수 있습니다.

labex:x:1000:1000::/home/labex:/bin/bash

이 줄은 콜론으로 구분된 여러 필드를 포함하며, 여섯 번째 필드는 홈 디렉토리 경로를 보여줍니다.

오류의 일반적인 원인

"Could not chdir to home directory" 오류의 가장 일반적인 원인은 다음과 같습니다.

  1. 홈 디렉토리가 존재하지 않음
  2. 홈 디렉토리에 잘못된 권한이 있음
  3. /etc/passwd의 홈 디렉토리 경로가 잘못됨
  4. 사용자가 홈 디렉토리에 대한 접근 권한이 없음

다음 단계에서는 이 오류를 의도적으로 생성하여 더 잘 이해해 보겠습니다.

오류 시뮬레이션을 위한 테스트 사용자 생성

"Could not chdir to home directory" 오류를 더 잘 이해하기 위해 테스트 사용자를 생성한 다음 의도적으로 이 오류를 발생시키겠습니다. 이 실습 방식은 문제를 진단하고 해결하는 방법을 이해하는 데 도움이 될 것입니다.

테스트 사용자 생성

먼저, testuser라는 새 사용자를 생성해 보겠습니다.

sudo useradd testuser

이제 이 사용자에 대한 비밀번호를 설정해야 합니다.

sudo passwd testuser

프롬프트가 표시되면 password123과 같은 간단한 비밀번호를 입력하십시오. 두 번 입력해야 합니다.

/etc/passwd 파일을 확인하여 사용자가 생성되었는지 확인해 보겠습니다.

grep testuser /etc/passwd

다음과 유사한 출력을 볼 수 있습니다.

testuser:x:1001:1001::/home/testuser:/bin/sh

이는 시스템이 testuser/home/testuser에 홈 디렉토리를 가질 것으로 예상한다는 것을 확인합니다.

오류 시뮬레이션

이제 testuser의 홈 디렉토리가 실제로 존재하는지 확인해 보겠습니다.

ls -la /home/testuser

이 디렉토리가 아직 존재하지 않는 것을 알 수 있습니다. 이는 -m 플래그 없이 useradd 명령을 사용하면 홈 디렉토리가 자동으로 생성되지 않기 때문입니다. 이것이 바로 "Could not chdir to home directory" 오류를 발생시키는 상황입니다.

이 오류를 실제로 확인하기 위해 testuser 계정으로 전환해 볼 수 있습니다.

sudo su - testuser

다음과 유사한 오류 메시지를 볼 수 있습니다.

No directory, logging in with HOME=/
Could not chdir to home directory /home/testuser: No such file or directory

이는 오류를 성공적으로 재현했음을 확인합니다. 이제 testuser로 로그인했지만 홈 디렉토리 대신 루트 디렉토리 /에 있습니다.

일반 사용자 계정으로 돌아가려면 exit를 입력하십시오.

exit

이제 오류를 확인했으므로 이를 진단하고 수정하는 방법을 알아보겠습니다.

홈 디렉토리 오류 진단

이제 "Could not chdir to home directory" 오류가 있는 사용자를 생성했으므로 문제를 체계적으로 진단해 보겠습니다. 이 프로세스는 실제 시나리오에서 유사한 문제를 식별하는 데 도움이 될 것입니다.

사용자 정보 확인

먼저, 시스템이 테스트 사용자에 대해 어떤 홈 디렉토리를 예상하는지 확인해 보겠습니다.

grep testuser /etc/passwd

출력은 다음과 유사하게 표시되어야 합니다.

testuser:x:1001:1001::/home/testuser:/bin/sh

이는 시스템이 /home/testuser에서 홈 디렉토리를 찾고 있음을 알려줍니다.

홈 디렉토리 존재 여부 확인

다음으로, 지정된 홈 디렉토리가 실제로 존재하는지 확인해 보겠습니다.

ls -la /home | grep testuser

-m 플래그 없이 사용자를 생성했으므로 이 디렉토리는 존재하지 않으며, 이로 인해 오류가 발생합니다.

사용자 그룹 멤버십 확인

테스트 사용자의 그룹 멤버십도 확인해 보겠습니다.

groups testuser

출력은 다음과 같이 표시될 수 있습니다.

testuser : testuser

이는 testusertestuser라고도 하는 그룹에 속함을 나타냅니다.

디렉토리 권한

홈 디렉토리가 존재했다면, 해당 권한을 확인했을 것입니다.

ls -ld /home

출력은 다음과 같을 수 있습니다.

drwxr-xr-x 3 root root 4096 Sep 15 12:34 /home

이는 /home 디렉토리가 올바른 권한 (모든 사용자가 읽고 실행할 수 있음) 을 가지고 있음을 보여주며, 이는 해당 디렉토리 내에 사용자를 위한 디렉토리를 생성할 수 있음을 의미합니다.

진단 요약

조사 결과, testuser의 오류는 홈 디렉토리가 없기 때문에 발생한다는 결론을 내릴 수 있습니다. 사용자 계정은 존재하지만 /home/testuser에 해당하는 홈 디렉토리는 존재하지 않습니다.

다음 단계에서는 이 문제를 해결하고 오류를 해결할 것입니다.

홈 디렉토리 오류 해결

이제 테스트 사용자에 대한 "Could not chdir to home directory" 오류의 원인을 이해했으므로 이를 해결해 보겠습니다. 이 오류의 다양한 근본 원인을 해결하는 여러 가지 솔루션을 살펴보겠습니다.

솔루션 1: 누락된 홈 디렉토리 생성

진단 결과 testuser의 홈 디렉토리가 존재하지 않으므로 이를 생성할 수 있습니다.

sudo mkdir -p /home/testuser

다음으로, 이 디렉토리에 대한 올바른 소유권을 설정해야 합니다.

sudo chown testuser:testuser /home/testuser

적절한 권한도 설정해야 합니다.

sudo chmod 755 /home/testuser

디렉토리가 올바른 소유권 및 권한으로 생성되었는지 확인해 보겠습니다.

ls -ld /home/testuser

다음과 유사한 출력을 볼 수 있습니다.

drwxr-xr-x 2 testuser testuser 4096 Sep 15 13:45 /home/testuser

이제 testuser 계정으로 다시 전환해 보겠습니다.

sudo su - testuser

이번에는 "Could not chdir to home directory" 오류를 보지 않고 로그인할 수 있어야 합니다. pwd를 입력하여 올바른 디렉토리에 있는지 확인하십시오.

pwd

출력은 다음과 같아야 합니다.

/home/testuser

일반 사용자 계정으로 돌아가려면 exit를 입력하십시오.

exit

솔루션 2: 기본 사용자 파일 복사

홈 디렉토리를 수동으로 생성하면 기본 구성 파일이 부족합니다. 시스템 기본값에서 이러한 파일을 복사해 보겠습니다.

sudo cp -r /etc/skel/. /home/testuser/

파일이 복사되었는지 확인해 보겠습니다.

ls -la /home/testuser

이제 .bashrc, .profile 등과 같은 숨겨진 파일을 볼 수 있습니다.

이러한 파일이 올바른 소유권을 갖도록 해야 합니다.

sudo chown -R testuser:testuser /home/testuser

솔루션 3: 홈 디렉토리를 사용하여 사용자 다시 생성

또 다른 방법은 -m 플래그를 사용하여 사용자를 삭제하고 다시 생성하는 것입니다. 이 플래그는 홈 디렉토리를 자동으로 생성합니다.

sudo userdel -r testuser
sudo useradd -m testuser
sudo passwd testuser

프롬프트가 표시되면 password123과 같은 비밀번호를 다시 설정하십시오.

새 사용자 계정에 홈 디렉토리가 있는지 확인해 보겠습니다.

ls -ld /home/testuser

출력은 디렉토리가 올바른 소유권으로 존재함을 확인해야 합니다.

수정 사항 확인

수정 사항이 제대로 작동했는지 확인하기 위해 testuser로 다시 한 번 로그인해 보겠습니다.

sudo su - testuser

pwd를 입력하여 올바른 디렉토리에 있는지 확인하십시오.

pwd

출력은 다음과 같아야 합니다.

/home/testuser

일반 사용자 계정으로 돌아가려면 exit를 입력하십시오.

exit

테스트 사용자에 대한 "Could not chdir to home directory" 오류를 성공적으로 해결했습니다.

홈 디렉토리 오류 방지

이제 "Could not chdir to home directory" 오류를 수정하는 방법을 알았으므로, 처음부터 이 오류가 발생하지 않도록 하는 방법을 배우겠습니다. 이 단계에서는 Linux 에서 사용자 관리에 대한 모범 사례를 다룹니다.

올바른 사용자 생성 명령 사용

새 사용자를 생성할 때는 항상 useradd 명령과 함께 -m 플래그를 사용하여 홈 디렉토리를 자동으로 생성하십시오.

sudo useradd -m newuser

또는, 기본적으로 홈 디렉토리를 생성하는 사용자 친화적인 adduser 명령을 사용할 수 있습니다.

sudo adduser newuser2

adduser 명령은 비밀번호 및 사용자 세부 정보와 같은 추가 정보를 대화식으로 묻습니다.

두 방법 모두 홈 디렉토리를 생성했는지 확인해 보겠습니다.

ls -ld /home/newuser /home/newuser2

두 디렉토리가 모두 올바른 소유권으로 존재하는 것을 볼 수 있습니다.

기본 사용자 설정 구성

모든 새 사용자가 자동으로 홈 디렉토리를 갖도록 하려면 /etc/login.defs 파일에서 시스템 기본값을 수정할 수 있습니다. 현재 설정을 살펴보겠습니다.

grep CREATE_HOME /etc/login.defs

출력은 다음과 같아야 합니다.

CREATE_HOME yes

이는 시스템이 이미 새 사용자에 대해 홈 디렉토리를 자동으로 생성하도록 구성되어 있음을 확인합니다.

정기적인 유지 관리 검사

홈 디렉토리 문제를 방지하려면 시스템에서 정기적인 검사를 실행할 수 있습니다. 다음은 홈 디렉토리가 없는 사용자를 식별하는 간단한 스크립트입니다.

nano ~/check_home_dirs.sh

다음 스크립트를 복사하여 붙여넣습니다.

#!/bin/bash
echo "Checking for users with missing home directories..."
while IFS=: read -r username _ _ _ _ homedir _; do
  if [ -n "$homedir" ] && [ "$homedir" != "/" ] && [ ! -d "$homedir" ]; then
    echo "User $username is missing home directory: $homedir"
  fi
done < /etc/passwd
echo "Check complete."

Ctrl+O를 누른 다음 Enter를 눌러 파일을 저장하고 Ctrl+X로 종료합니다.

스크립트를 실행 가능하게 만듭니다.

chmod +x ~/check_home_dirs.sh

스크립트를 실행하여 누락된 홈 디렉토리를 확인합니다.

~/check_home_dirs.sh

스크립트는 홈 디렉토리가 없는 모든 사용자를 나열합니다.

홈 디렉토리 백업

홈 디렉토리 문제로 이어질 수 있는 데이터 손실을 방지하려면 정기적인 백업 일정을 구현하십시오.

sudo mkdir -p /backup/home
sudo rsync -a /home/ /backup/home/

이 명령은 모든 홈 디렉토리의 백업을 생성합니다. 프로덕션 환경에서는 일반적으로 cron 또는 유사한 도구를 사용하여 이를 예약합니다.

결론

다음과 같은 예방 조치를 따르면 Linux 시스템에서 "Could not chdir to home directory" 오류를 방지할 수 있습니다.

  1. 항상 useradd와 함께 -m 플래그를 사용하거나 대신 adduser를 사용합니다.
  2. /etc/login.defs에서 시스템 기본값을 확인합니다.
  3. 누락된 홈 디렉토리에 대한 정기적인 검사를 실행합니다.
  4. 홈 디렉토리에 대한 백업 전략을 구현합니다.

이러한 관행은 사용자가 로그인할 때 항상 홈 디렉토리에 액세스할 수 있도록 보장합니다.

요약

이 Lab 에서는 Linux 시스템에서 "Could not chdir to home directory" 오류를 처리하는 방법을 배웠습니다. 이제 다음 사항을 이해하게 되었습니다.

  1. 오류의 원인 - 일반적으로 누락되거나 액세스할 수 없는 홈 디렉토리
  2. 사용자 정보, 디렉토리 존재 여부 및 권한을 확인하여 문제를 진단하는 방법
  3. 누락된 홈 디렉토리를 생성하고 적절한 소유권 및 권한을 설정하여 오류를 해결하는 방법
  4. 적절한 사용자 생성 명령을 사용하고 정기적인 유지 관리 검사를 구현하여 오류를 방지하는 방법

이러한 기술은 Linux 사용자 계정을 보다 효과적으로 관리하고 시스템의 모든 사용자가 원활하게 로그인할 수 있도록 하는 데 도움이 됩니다.