技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

UNIXのファイル権限について(始めて触る人向け)

WindowsCUIにある程度慣れた新人がLinuxのOSを触ってつまづくポイントの一つが、ファイル権限です。
何度も同じ説明をしているので、記事化します。
 
【ファイル権限の表示】
任意のディレクトリで ls- l コマンドを発行すると、以下のような表示が現れます。
 
-rwxr--r--  1 username groupname     19  1月 1 00:00 hoge.sh
 
この「rwxr--r--」が、ファイル権限です。
左3文字がファイル所有者が持つ権限、中3文字がファイル所有グループが持つ権限、右3文字が第三者(それ以外)のユーザが持つ権限です。なお、ファイルの所有者名は「username」の箇所に、ファイルの所有グループ名は「groupname」の箇所に表示されます。
 
【権限の説明】
「r」は読み取り権限を表します。ファイルの中を見ることができます。
「w」は書き込み権限を表します。ファイルを編集することができます。
「x」は実行権限を表します。ファイルを実行することができます。
(実行するファイルは、主にスクリプトや実行ファイルの類です)
 
【権限の変更】
ファイル権限を変更するには、chmod というコマンドを使用します。
コマンド例は以下です。
 
chmod 777 hoge.sh
 
謎の「777」という数字ですが、左1桁がファイル所有者が持つ権限、中1桁がファイル所有グループが持つ権限、右1桁が第三者のユーザが持つ権限を表します。
この数字を理解するには、各々の権限について2進数で考える必要があります。
権限は3つのビットで表され、左から読み取り権限(r)、書き込み権限(w)、実行権限(x)を表します。
例えば、「111」はrwx全て付与された状態を表しますし、「110」はrwを付与した状態を表しますし、「100」はrのみ付与した状態を表します。
この2進数の数値を10進数に置き換えたものが chmod で指定する数字で、「111」は「7」、「110」は「6」、「100」は「4」となります。
 
つまり、「777」という指定は、ファイル所有者にもファイル所有グループにも第三者のユーザにも読み取り・書き込み・実行全てができる権限を付与する、という指定になります。
 
【詳細(外部リンク)】
詳細については、下記のページに書かれています。
 
Linuxの権限確認と変更(chmod)(超初心者向け) - Qiita

https://qiita.com/shisama/items/5f4c4fa768642aad9e06

 
------------------------
 

【補足1】
誤操作による被害を最小限に食い止めるため、ファイル権限は必要最低限のもののみ与えるのが基本です。
例えば、所有ユーザ以外のユーザが編集・実行することがないファイルについては、ファイル所有グループや第三者のユーザには読み取り権限のみを与え、誤って編集・削除されたり実行されたりすることがないようにします。
 
【補足2】
情報処理技術者試験でも、ファイル権限について問う問題が出題されることがあります。
ls -l や chmod といったコマンドまでは出題されませんが、ファイル権限の管理の概念ぐらいは覚えておいた方が良いでしょう。