Tutoriel Linux

LinuxユーザーのIDとグループを確認する

Débutant2 min de lecture

Linuxでのアクセス拒否は、忘れられたchmodによるものばかりではありません。失敗するコマンドは別のUIDで実行されている場合や、そのアカウントが予期されるグループに属していない場合があります。所有者を変更する前に、実際に使用されているアカウントを特定することから始めてください。

idコマンドは、現在のプロセスのUID、主グループ、サブグループを表示します。スクリプト、サービス、またはSSHセッションが、あなたが見ているのとは異なるファイルを見ている場合の出発点です。

TuxがLinuxアカウントのアイデンティティ、グループ、権限を確認しています
UID、グループ、権限は、変更前に一緒に確認する必要があります。

idでUID、GID、およびグループを読み取る

問題が発生しているセッションでidを引数なしで実行します:

id

出力がuid=1000(alex) gid=1000(alex) groups=1000(alex),27(sudo),999(docker)のような形であれば、それはプロセスのアイデンティティを説明しています。uidはユーザー識別子です。gidは主グループです。groupsは、通常Docker、ログ、または共有にアクセスを開くサブグループを追加します。

値を1つだけ取得するには、次のオプションを使用します:

  • id -uは有効なUIDを表示します。
  • id -gは有効なGIDを表示します。
  • id -Gnはグループ名のリストを表示します。
  • id -unは有効なアカウント名を表示します。

実際の識別子と有効な識別子の違いは、特にsudoの後、SUIDバイナリ内、またはユーザーを切り替える特定のツールを使用する際に明らかになります。名前だけを迅速に確認したい場合は、whoamiと有効なユーザーに関する弊社の記事も確認してください。

セッションを開かずにアカウントを調査する

アカウント名を追加して、そのローカルプロファイルを問い合わせます。このコマンドはユーザーデータベースを読み取り、このアカウントにログインしません:

id www-data
id -Gn www-data

DebianやUbuntuでは、www-dataはしばしばウェブサービスのアカウントです。他のディストリビューションでは、そのサービスはapachenginxまたはアプリケーションアカウントを使用する場合があります。この例をそのまま繰り返さずにユニットファイルまたはサービスの設定を確認してください。

グループにユーザーを追加した後、すでに開いているセッションは以前のグループリストを保持することがあります。変更が失敗したと決めつける前に、ログアウトして再ログインしてください。id ユーザー名コマンドはデータベースを再読み込みしますが、単独のidは常に現在のプロセスを説明します。

アカウントのアイデンティティとファイルの権限を比較する

グループを知るだけでは不十分です。次に、関連するパスの所有者、グループ、および権限を読む必要があります:

id
stat -c '%U %G %A %n' /chemin/vers/le/fichier
namei -l /chemin/vers/le/fichier

statはファイルの所有者を示します。namei -lはパスの各ディレクトリの権限も表示します。ファイルが読み取り可能であっても、アカウントが親ディレクトリを通過できない場合、つまりそのディレクトリに対してx権限が必要です。

chmod 777で拒否を修正しないでください。まず、ファイルのグループをid -Gnと比較し、次に必要な所有者、グループ、または権限を調整してください。グループとその使用法を見直すには、Linuxにおけるグループ管理をお読みください。権限を変更する必要がある場合、chmodの再帰的適用に関するガイドが、あまりにも広範なコマンドが予想以上に多くのファイルに影響を与える理由を説明しています。

sudoを変更する前に関連するアカウントでテストする

管理権限がある場合は、問題が発生しているアカウントの下でのみチェックを実行します:

sudo -u www-data id
sudo -u www-data test -r /chemin/vers/le/fichier && echo 読み可能
sudo -u www-data test -x /chemin/vers/le/dossier && echo 通過可能

最初の呼び出しは、有効なアイデンティティを確認します。次の二つは、ファイルの読み込みまたはディレクトリの通過という特定の質問に回答します。実行する前にwww-dataとパスを置き換えてください。権限をテストするためだけにプロダクションアプリケーションを起動するためにsudo -uを使用しないでください。

UID、グループ、およびUnixの権限が正しいと思われるのにアクセスが拒否される場合は、getfacl、ネットワークマウント、およびあなたのディストリビューションのSELinuxやAppArmorも確認してください。これらのメカニズムは従来の権限の上にルールを追加する場合があります。

idstat、および適切なアカウントでのテストを使用することで、盲目的に権限を変更する前にどこを探すべきかが分かります。

sudo apt update && sudo apt upgrade