사용자 계정은 단순한 사용자 이름 그 이상을 담고 있습니다. 리눅스 사용자 계정과 관련된 다양한 메타데이터를 명령줄에서 설정하고 수정하는 방법을 알아보겠습니다.
계정 이름의 의미
리눅스나 유닉스 계열의 컴퓨터를 사용한다면, 여러분에게는 사용자 계정이 있을 것입니다. 계정에 부여된 이름이 바로 사용자 계정 이름이며, 로그인 시 사용하는 이름입니다. 기본적으로, 이는 로그인 그룹과 홈 디렉토리의 이름과도 같습니다. 이들은 모두 동일한 식별자를 공유합니다.
각 사용자 계정에는 추가적인 정보 세트를 저장할 수 있습니다. 예를 들어, 실제 사람의 전체 이름, 사무실 번호, 회사 전화번호와 같은 데이터를 정의하고 연결할 수 있습니다. 또한, 계정에 임의의 정보 조각을 태그할 수도 있습니다.
이 기능은 다수의 사용자 계정을 관리하는 시스템 관리자에게 특히 유용합니다. 하지만 단일 사용자 리눅스 컴퓨터에서도 내부적으로 어떻게 동작하는지 아는 것은 항상 흥미로운 일입니다.
GECOS 필드의 기원
과거 유닉스 개발자들은 자체 프린터를 가지고 있지 않았습니다. 그들은 인쇄 작업을 스풀링해야 했습니다. 제너럴 일렉트릭에서 운영하는 메인프레임의 제너럴 일렉트릭 종합 운영 체제(GECOS)에서 이를 수행했습니다. 유닉스 시스템 사용자들은 GECOS 시스템 계정 정보를 저장하고 사용해야 했습니다.
이러한 정보를 저장하기 위해 GECOS 필드가 만들어졌습니다. 이 필드는 본래의 목적은 사라졌지만, 사용자 계정 소유자와 관련된 다른 데이터를 저장하는 용도로 변경되었습니다. 새로운 역할이 주어졌지만, 여전히 GECOS 필드라는 이름으로 불립니다.
이 필드는 다른 사용자 계정 정보와 함께 /etc/passwd 파일에 저장됩니다. 이 파일에는 다음 정보가 포함됩니다:
- 계정 사용자 이름
- 사용자 ID
- 그룹 ID
- 사용자 계정의 홈 디렉토리 경로
- 사용자가 로그인할 때 실행되는 쉘
이곳이 바로 finger 명령어와 pinky 명령어들이 정보를 가져오는 곳입니다.
chfn 명령의 활용
chfn
(finger 정보 변경) 명령어를 사용하면 GECOS 필드에 저장된 정보를 설정하고 변경할 수 있습니다. 이 정보는 쉼표로 구분된 목록 형태로 필드 내에 저장됩니다.
chfn
명령어는 Ubuntu 18.04.1 및 Manjaro 18.1.0과 같은 배포판에 기본적으로 포함되어 있습니다. Fedora 31에서는 다음 명령어를 사용하여 설치해야 합니다.
sudo dnf install util-linux-user
이제 사용자 계정 “dave”의 소유자에 대한 finger 정보를 확인해 보겠습니다. 모든 정보를 얻기 위해 -l (긴 형식) 옵션을 사용합니다.
finger dave -l
다음과 같은 정보가 표시됩니다:
계정 사용자 이름, 홈 디렉토리, 기본 쉘이 표시됩니다. 이들은 모두 사용자 계정과 관련이 있으며, 실제 사용자 개인 정보를 나타내지 않습니다. 이제 chfn
명령어를 사용하여 실제 사용자에 대한 정보를 저장할 수 있습니다.
chfn dave
이렇게 chfn
을 사용하면 짧은 대화형 프로세스가 시작됩니다. GECOS 필드에 저장할 수 있는 각 정보에 대한 값을 입력하라는 메시지가 표시됩니다. 각 데이터 값의 현재 값은 대괄호 안에 표시됩니다. 괄호 안의 값을 유지하려면 “Enter” 키를 누르십시오.
입력한 정보는 다음과 같습니다:
객실 번호: 512
직장 전화: 555-4567
집 전화: 555-5432
이제 finger 명령어로 새로운 정보가 적용되었는지 확인해 봅시다.
finger dave -l
네, 잘 적용되었습니다. 그러나 전체 이름을 변경하는 메시지는 표시되지 않았을 것입니다. 이는 sudo
를 사용할 때만 가능합니다. 하지만 sudo
사용을 깜빡했더라도, 전체 chfn
세션을 다시 실행할 필요는 없습니다. 개별적으로 데이터 값을 변경할 수 있습니다.
개별 데이터 값 수정
sudo
와 함께 -f (전체 이름) 옵션을 사용하여 사용자 계정 소유자의 전체 이름을 설정할 수 있습니다.
sudo chfn -f "Dave McKay" dave
이제 finger 명령어로 다시 확인하면:
전체 이름이 추가된 것을 확인할 수 있습니다.
객실 번호, 집 전화번호, 직장 전화번호를 변경하는 다른 옵션도 있습니다. 객실 (사무실) 번호를 변경하려면 -r (객실 번호) 옵션을 사용합니다.
sudo chfn -r 633 dave
일부 배포판에서는 -r 옵션 대신 -o (사무실 번호) 옵션을 사용할 수 있습니다. 이에 대한 자세한 내용은 곧 설명하겠습니다. 현재 chfn
버전에서 사용할 수 있는 옵션을 보려면 다음 명령어를 사용하십시오.
man chfn
사무실 전화번호를 변경하려면 -w (직장 전화) 옵션을 사용하십시오.
sudo chfn -w 555-1122 dave
마지막으로, 집 전화번호를 변경하려면 -h (집 전화번호) 옵션을 사용하십시오.
sudo chfn -h 555-6576 dave
모든 변경 사항이 제대로 적용되었는지 확인하기 위해 finger 명령어를 다시 사용해 봅시다.
finger dave -l
성공적으로 모든 명령이 실행되었고 데이터 값이 업데이트되었습니다.
다른 사용자 계정에서 chfn 사용
자신의 정보를 변경하는 것만큼이나 간단하게 다른 사용자의 GECOS 정보를 변경할 수 있습니다. 단, sudo
를 사용해야 한다는 점만 다릅니다. 먼저 사용자 계정 “mary”에 대해 어떤 데이터가 설정되어 있는지 확인해 보겠습니다.
finger mary -l
이 사용자 계정에는 일반적인 기본 정보가 설정되어 있습니다. 이제 정보를 추가해 보겠습니다.
sudo chfn mary
이전과 동일한 방식으로 각 정보에 대한 데이터 값을 묻는 메시지가 표시됩니다. 또한, sudo
를 사용했기 때문에 전체 이름 데이터 값도 입력하도록 요청합니다.
마지막 항목인 “기타”는 무엇일까요?
이는 모든 버전의 chfn
에서 지원되는 것은 아니며 sudo
를 사용할 때만 볼 수 있습니다. 이것이 우리가 이전에 sudo
없이 다음 명령어를 사용했을 때 볼 수 없었던 이유입니다.
chfn dave
“기타” 데이터 값은 원하는 모든 정보를 포함할 수 있습니다. 특별히 지정되거나 예상되는 용도는 없습니다.
“기타” 필드를 지원하는 chfn
버전에서는 이 값을 직접 변경할 수 있는 -o (기타) 옵션도 제공합니다. 일부 시스템에서는 “사무실 번호”에 -o를 사용하고 “기타”에 -o를 사용하는 충돌 때문에 “객실 번호”에 -r을 사용합니다.
less
를 사용하여 /etc/passwd 파일에서 사용자 계정 “mary”에 대해 저장된 데이터를 확인할 수 있습니다.
less /etc/passwd
해당 기능을 지원하는 시스템에서는 (chfn
버전의 매뉴얼 페이지에서 확인), -o (기타) 옵션을 사용하여 “기타” 필드를 직접 설정할 수 있습니다.
sudo chfn -o "HTG Freelancer" dave
less
명령어를 사용하여 사용자 계정 “dave”의 데이터를 확인해 보겠습니다.
less /etc/passwd
이제 다음과 같은 질문이 생길 수 있습니다. chfn
버전이 “기타” 필드를 지원하지 않는 경우 어떻게 변경해야 할까요? 이 경우 usermod
명령어를 사용하면 됩니다.
usermod 명령어의 활용
usermod
명령어를 사용하면 사용자 계정의 다양한 속성을 수정할 수 있습니다. 예를 들어, 그룹에서 사용자 계정을 추가 또는 제거하거나 기본 쉘을 변경할 수 있습니다. 또한 GECOS 필드를 직접 조작하는 데에도 사용할 수 있습니다.
사용자 계정 “mary”에 대한 /etc/passwd 파일의 행을 자세히 살펴보겠습니다. grep
명령어를 사용하여 해당 행을 추출하겠습니다. 사용자 이름은 고유해야 하므로 이러한 방식이 가능합니다. “mary”라는 사용자 계정은 하나만 존재할 수 있습니다.
grep mary /etc/passwd
/etc/passwd
파일의 필드가 표시됩니다. 콜론 “:”은 필드 구분 기호로 사용됩니다. 왼쪽에서 오른쪽으로 필드는 다음과 같습니다:
- 계정 사용자 이름
- 이 사용자 계정의 암호를 나타내는 “x”, 실제 암호는 /etc/shadow 파일에 암호화되어 저장됩니다.
- “mary” 사용자 계정의 사용자 ID
- “mary” 사용자 계정의 그룹 ID
- GECOS 필드
- “mary” 사용자 계정의 홈 디렉토리 경로
- “mary” 계정 소유자가 로그인할 때 실행되는 쉘
쉼표 “,”는 GECOS 필드 내 데이터 값의 구분 기호로 사용됩니다. GECOS 필드의 값은 왼쪽에서 오른쪽으로 다음과 같습니다:
- 성명
- 객실 (또는 사무실) 번호
- 직장 전화번호
- 집 전화번호
- 기타 정보
usermod
명령어는 전체 GECOS 필드를 사용자가 제공하는 새로운 값으로 설정합니다. 제공하는 값이 사람의 전체 이름인 경우, GECOS 필드의 유일한 항목은 전체 이름이 됩니다. 즉, 기존 데이터 값을 유지하려면 그 값을 모두 제공해야 합니다.
예를 들어, 사용자 “Mary”가 승진하여 4층으로 이동한다고 가정해 보겠습니다. 그녀는 새 사무실 번호와 새 회사 전화번호를 받게 되며, 중간 이름도 추가할 것입니다. 그녀의 “기타” 필드 값도 변경됩니다. 그녀의 집 전화번호는 변경되지 않지만, usermod 명령어에 문자열 형태로 제공해야 합니다.
-c
(주석) 옵션을 사용해야 하며, 명령어를 sudo
로 실행해야 합니다.
sudo usermod -c "Mary Carol Quinn,405,5559654,555-7704,Linux Advocate" mary
grep
명령어를 사용하여 “mary”에 대한 /etc/passwd 파일의 내용을 확인하면 새로운 값이 추가되었음을 알 수 있습니다.
grep mary /etc/passwd
변화는 계속된다
정확하지 않은 데이터는 가치가 없습니다. 개인 정보 (사무실 이동, 이름 변경, 직함 변경 등)가 변경되면, 메타데이터를 쉽게 업데이트하여 현재 상태를 반영할 수 있습니다.