間違った場所に作成されたフォルダーや、権限が広すぎるフォルダーは、後で問題を引き起こすことがよくあります。mkdirコマンドだけで開始できますが、所有者、グループ、権限の確認の代わりにはなりません。
個人用のディレクトリは、ユーザーフォルダー内に作成してください。共有ディレクトリやサービスで使用されるディレクトリの場合は、まずそこに書き込む必要があるアカウントを特定します。chmod 777はしばしば真の所有者の問題を隠し、すべてのローカルアカウントが内容を変更できるようにします。
適切な場所にフォルダーを作成する
現在のディレクトリから、次のコマンドは1つのディレクトリを作成します:
mkdir sauvegardes
絶対パスを使用すると、フォルダーがどこに作成されるか正確にわかります。親フォルダーが欠ける可能性がある場合は、-pを追加してください:
mkdir -p ~/projets/site-test/logs
-pなしでは、mkdirは~/projets/site-testが存在しない場合に停止します。このオプションは、最後のディレクトリがすでに存在する場合のエラーも回避します。間違ったパスを正しいパスに変えることはできません:コマンドを実行する前にpwdで確認してください。
自分のアカウントに属さなければならないスペースを準備するには、個人用ディレクトリの中に留まってください。こうすることで、sudoを避け、管理者権限で作成されたフォルダーにより、ユーザーがその中を埋めることができなくなるのを防ぎます:
mkdir -p ~/archives/2026
stat -c '%A %U:%G %n' ~/archives ~/archives/2026
使用に適した権限を選択する
フォルダーに入るにはxの権限が必要です。ディレクトリでは、rは名前をリストすることを許可し、wはエントリーを追加、名前変更、または削除することを許可します。実際に適用される権限は、umaskにも依存します。
プライベートなフォルダーを作成する場合は、明示的なモードで作成してください:
mkdir -m 700 ~/archives-privees
stat -c '%A %a %U:%G %n' ~/archives-privees
モード700は、所有者にアクセスを許可し、他のユーザーからフォルダーを閉じます。作業グループが読み書きする必要があるディレクトリの場合は、代わりに知られたグループとモード2770を選択してください:
sudo install -d -o alice -g equipe-web -m 2770 /srv/equipe-web
stat -c '%A %a %U:%G %n' /srv/equipe-web
先頭の2は、フォルダーのsetgidビットを有効にします。新しいファイルやサブディレクトリは、グループequipe-webを受け継ぎます。この解決策は、サーバーのすべてのアカウントに書き込みを開くリスクを回避します。期待されるメンバーがこのグループに正しく含まれていることをid nom_utilisateurで確認してください。
mkdir -m 777は、誰でも変更できるディレクトリを作成しますが、その後umaskがこのモードをさらに制限する可能性があります。Permission deniedを修正するためにこれを使用しないでください。むしろ、完全なパス、その所有者、および各親ディレクトリの権限を確認してください:
namei -l /srv/equipe-web
ls -ld /srv /srv/equipe-web
id
サービスにフォルダーを渡す前に確認する
www-data、postgres、または専用アカウントで実行されるサービスは、必ずしもセッションと同じ権限を表示するわけではありません。何かを変更する前に、そのユーザーを確認してください。systemdの場合、このコマンドはユニットによって構成されたアカウントを表示します:
systemctl show mon-service
-p User -p Group -p DynamicUser
次に、予想される所有者でフォルダーを作成し、このアカウントからファイルをテストします。テストマシン上で:
sudo install -d -o www-data -g www-data -m 750 /var/lib/mon-service
sudo -u www-data touch /var/lib/mon-service/test-ecriture
ls -l /var/lib/mon-service/test-ecriture
sudo rm /var/lib/mon-service/test-ecriture
この確認により、サービスのアカウントが実際に書き込みできるかどうかがわかります。失敗した場合、権限を無作為に追加しないでください。最初に所有者、グループ、必要に応じてACL(アクセス制御リスト)をgetfaclで確認し、親ディレクトリの権限を確認してください。
mkdir -pを使用して、親が欠ける可能性のあるパスを指定してください。- 作成後すぐに
statまたはls -ldを使用してください。 - 共有フォルダーの場合は、サービスを開始する前に所有者、グループ、モードを設定してください。
chmodはブロックされたアカウントを特定した後の修正に限定してください。
Linuxのsetfaclに関するガイドは、単一のユーザーが追加のアクセス権を必要とする場合に役立ちます。既存のツリー内の権限を変更する必要がある場合は、chmodの再帰的手法を使用してください:すべてのファイルとフォルダーを同じモードで変更すると、ディレクトリの実行権限が簡単に壊れてしまいます。
マニュアルページmkdir(1)はオプションを詳述し、mkdir(2)はumaskの効果とグループの継承を説明します。サービスに使用されるフォルダーを作成する前に、これらの2つのポイントを心に留めておいてください。
