GECOSフィールドの役割と/etc/passwdの構造
Linuxのユーザー情報は /etc/passwd にコロン区切りで格納されています。その第5フィールドが「GECOSフィールド」と呼ばれる部分で、氏名・部署・連絡先などを自由形式で記録できます。もともとはUNIX黎明期に finger デーモンへ情報を提供するために設計されたフィールドですが、現在でも活用される場面は残っています。
たとえばメール転送エージェント(MTA)がエラーメールの送信者表示に参照したり、社内向け監視ツールがプロセス所有者を人名で表示したりと、運用ツールがGECOSを読み込むケースは今もあります。また、サーバーを複数人で共用するチーム運用では「このアカウントは誰のもので、緊急連絡先はどこか」を /etc/passwd 一本で把握できる手軽さも実用的です。
GECOSフィールドの内部はコンマ区切りで次の順に並んでいます。
- 氏名(フルネーム)
- 部屋番号・拠点
- 内線番号・オフィス電話
- 自宅電話番号
- その他(任意テキスト)
実際の行例として yamada:x:1001:1001:Taro Yamada,B301,03-1234-5678,,:/home/yamada:/bin/bash のような形になります。空欄のフィールドはコンマだけ残して省略できます。
chfnコマンドで氏名と連絡先を設定する
GECOSフィールドを更新する代表的なコマンドが chfn(change finger information)です。一般ユーザーは自分自身の情報のみ変更でき、rootは任意のユーザーを指定して変更できます。現行の主要ディストリビューションでは util-linux パッケージに含まれており、デフォルトでインストールされています。
対話形式で設定する
引数なしで chfn を実行すると、各フィールドを順番に入力する対話モードになります。
$ chfn
yamada の finger 情報を変更します。
パスワード:
Name [Taro Yamada]: Taro Yamada
Office []: B301
Office Phone []: 03-1234-5678
Home Phone []:
finger 情報を変更しました。
各プロンプトで現在値が角括弧に表示されるので、変更しない項目はそのままEnterで進められます。フィールドを空にしたい場合は半角スペースを1文字入力してEnterします。何も入力せずEnterを押すと現在値が保持されるため、意図的な空欄化と区別が必要です。
rootが別ユーザーの情報を変更する場合はユーザー名を引数に追加します。
# chfn yamada
オプションで非対話的に設定する
スクリプトやプロビジョニングツールから呼び出す場合は、オプションで各フィールドを直接指定できます。
# chfn -f "Taro Yamada" -r "B301" -w "03-1234-5678" yamada
主なオプションは次のとおりです。
-f フルネーム:氏名を指定する-r 部屋番号:部屋番号・拠点を指定する-w 内線番号:オフィス電話番号を指定する-h 自宅電話:自宅電話番号を指定する-o その他:その他の情報を指定する(実装によりオプション名が異なる場合がある)
オプション名の対応はディストリビューションのパッケージバージョンによって若干異なります。事前に chfn --help で手元の環境の仕様を確認しておくと安心です。
usermod –commentによる管理者向け一括設定
chfn はユーザー自身が対話的に操作する用途に向いていますが、大量のアカウントをスクリプトでまとめて登録したい場面では usermod --comment の方が扱いやすいです。GECOSフィールド全体を1つの文字列として直接書き換えるため、フィールドごとのオプションを覚える必要がありません。
# usermod --comment "Taro Yamada,B301,03-1234-5678,," yamada
コンマ区切りの順序は前述のGECOS仕様に従います。末尾の空フィールドはコンマだけ書いても省略してもどちらでも構いません。また -c は --comment の短縮形として使用できます。
Ansibleを使った構成管理では ansible.builtin.user モジュールの comment パラメーターがそのままGECOSに対応しています。Playbookにアカウント情報と合わせてGECOS文字列を記述しておけば、ユーザー作成と情報登録を1タスクで完結できます。
- name: ユーザーを作成しGECOSを設定する
ansible.builtin.user:
name: yamada
comment: "Taro Yamada,B301,03-1234-5678,,"
設定内容を確認する
設定後は getent コマンドで確認するのが現在の標準的な方法です。getent はNSSスタック経由で問い合わせるため、後述のSSSD環境でも統一した手順で使えます。
$ getent passwd yamada
yamada:x:1001:1001:Taro Yamada,B301,03-1234-5678,,:/home/yamada:/bin/bash
第5フィールドにGECOS文字列が反映されていれば設定完了です。ローカルファイルを直接確認したい場合は grep yamada /etc/passwd でも同様に確認できます。
かつては finger コマンドでGECOS情報を整形表示できましたが、Ubuntu 22.04/24.04・Debian 12 Bookworm・Rocky Linux 9以降ではデフォルトインストールされていません。確認目的であれば getent で十分です。どうしても finger が必要な場面ではパッケージを個別にインストールしますが、RHEL系ではリポジトリから提供されないケースもあるため、あらかじめ確認が必要です。
現行環境での注意点と2026年の差分
SSSD・LDAP・Active Directory連携環境ではローカル変更が上書きされる
chfn および usermod --comment はいずれも /etc/passwd を書き換えるローカル操作です。SSSD(System Security Services Daemon)経由でLDAPやActive Directoryのアカウントを管理している環境では、ディレクトリサービス側の情報が正とみなされるため、ローカルに書き込んでも次回のSSSD同期や再ログイン時に上書きされます。
このような環境でユーザー情報を変更する場合は、LDAPサーバー上の cn や telephoneNumber 属性を直接編集するか、組織のIdPポータルで変更するのが正しい手順です。環境がどちらに該当するかは /etc/nsswitch.conf の passwd 行で確認できます。sss が含まれていればSSSD経由です。
SELinux環境とPAM設定による制限
Rocky Linux 9(RHEL 9系)でSELinuxが有効な状態で chfn を実行した際に、SELinuxポリシーによって書き込みが拒否されるケースが報告されています。操作が失敗した場合は ausearch -m avc -ts recent でAVCデナイアルを確認してください。このような場面では usermod --comment の方が問題なく動作することが多く、自動化目的では usermod の方が堅牢です。
一般ユーザーが chfn を実行できるかどうかは /etc/pam.d/chfn の設定にも依存します。セキュリティポリシーによっては pam_deny が設定されており一般ユーザーからの変更が禁止されている場合があります。その際はrootまたは管理者に操作を依頼してください。
記載内容の設計とプライバシーへの配慮
GECOSフィールドは /etc/passwd に平文で記録され、同一ホスト上の一般ユーザーが getent passwd で参照できます。自宅電話番号など個人を直接特定できる情報をここに記載することは、現代のプライバシー基準からは望ましくありません。現場では氏名と所属部署・代表内線番号程度に留め、個人の携帯番号や自宅情報は書かない運用が一般的です。情報セキュリティポリシーとあわせて、何を記載するかを組織内で統一しておくことを推奨します。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
PR・広告
コマンド操作から基本運用までを手を動かして学べる定番書。記事で触れた技術の土台固めに。
※ Amazonのアソシエイトとして、当サイトは適格販売により収入を得ています。
