先日、Linuxサーバを触ることがあり、cpコマンドでディレクトリ間のファイルコピーを行ったのですが、
”Permission denied(許可がありません)”と表示されてうまくコピーができなかった経緯があります。
対応としては、ファイルのアクセス権限を緩めてあげれば良いのですが、
現状、マニュアル通りの対応で実感として理解できていないと思い、今回の記事テーマとさせていただきました。
そもそもアクセス権限とは?
実行ユーザに対してファイルやディレクトリへの「読み・書き・実行」が許可されているかを制限する仕組みです。
アクセス権限をうまく適用させることで誤った動作を防ぎ、セキュアな運用を行うことができます。
アクセス権限の確認は、ls -lコマンドで行うことができます。
ex)lsコマンドでファイルの詳細を表示します。
ls -l /home/work/test.txt
ファイル種別
左から1つ目の”-”のこと。
データがディレクトリの場合は”d”と表示され、異なる場合は”-”と表示されます。
今回はtxtファイルのため”-”と表示されます。
アクセス権限
ファイル種別の右隣の”rwx”のこと。
r:read(読み取り許可)
w:write(書き込み許可)
x:excute(実行許可)
-:許可しない
よって、このユーザの権限はすべて許可されているといえます。
では、その隣の”r-x”や”r--”はなにかというと、これもアクセス権限です。
左から順に所有者・グループ・その他ユーザへのアクセス権限を表しています。
【rwx r-x r– 】
ファイル所有者/所有グループ
root rootと表示されている左側のrootが所有者です。
では、右側のrootは?というと、所有者グループのrootをさします。
アクセス権限の変更
アクセス権限(rwx)の変更にはchmodコマンドを利用します。
これはchange + modeの省略です。
”rwx”は2進数で表記されており、計8パターン存在します。
0から7までの値を左から順に割り当てます。
【 —,ーーx,-w-,-wx,r–,r-x,rw-,rwx 】
実際の使い方として
chmod 777 /home/work/test.txt
とすると、 test.txtファイルのアクセス権限はすべてのユーザに許可されることになります。
所有者の変更
変更にはchownコマンドを利用します。これはchange + ownerの略です。
こちらはアクセス権限よりも単純で、次のような使い方をします。
chown root:user /home/work/test.txt
とすると、test.txtファイルの所有者はrootで所有グループはuserになりますので、アクセス権限の適用が変わります。
例えば、chmod 740 /home/work/test.txt とした場合、
userに許可された権限はr–のみですので、lsコマンドやlessコマンドは実行できることになります。
しかし、viコマンドでは書き込みが制限され、echoコマンドのような実行は制限されることになります。
長くなりましたが、以上でファイル権限の設定方法についての説明は終わりです。
簡単にテストを行いたかったのですが、所有者権限やアクセス権限だけでも網羅するのに数10パターンあり、
上位ディレクトリにも権限を適用した場合のテスト数のタイパが悪いので、要点のみまとめたいと思います。
1.権限はrootユーザのみ変更することができる。
2.権限を設定するうえで大切なことは、実行者・実行コマンド・所有者・アクセス権限を意識すること。
3.実行者が”root”の時、所有者とアクセス権限に関わらずアクセス可能
4.実行者が”user”で、所有者が”root”の場合はアクセス権限に関わらずアクセス不可
但し、所有グループが”user”の場合はグループ権限の範囲でアクセス可能
5.test.txtに書き込むには、対応する所有者権限のアクセス権限に”2,3,6,7″(w)が必要
6.test.txtへのアクセスを許可した場合でも、上位ディレクトリで許可されていないuserはアクセスできない。
7.その他のユーザのアクセス権限については、プログラムで自動実行する場合に与える権限で、
プログラムの実行内容によって権限を選択する必要がある。
以上、ルールを守りながら適切な権限を付与して、セキュアな環境下での運用をされてください。