Linuxのファイル、ディレクトリのパーミッション設定についてまとめました。
目次です。
1)パーミッションを確認するには?
2)パーミッションの設定方法
3)誤解し易いディレクトリのパーミッション
1)パーミッションを確認するには?
下記のように”ls -al”コマンドで所有者、権限を表示できます。
$ ls -al 合計 12 drwxrwxrw- 3 rails rails 4096 9月 17 11:06 2013 . drwxr-xr-x 38 rails rails 4096 9月 17 09:18 2013 .. drwxrwxrwt 2 rails rails 4096 9月 17 10:22 2013 testdir -rw-rw-r-- 1 rails rails 0 9月 17 11:06 2013 testfile
○一番左端の文字
“d”はディレクトリ、”-“の場合はファイル。
○その右側の9文字はパーミッションの設定値
・最初の3文字分がファイルの所有者自身の権限
・次の3文字が同一グループのユーザーの権限
・最後の3文字がそれ以外のユーザーに対する権限
○各”r”、”w”、”x”の意味
ファイル | ディレクトリ | |
“r”読み(4) | ファイルの内容を表示 | ディレクトリ内のリスト表示 |
“w”書き(2) | ファイルの上書き、変更 | ディレクトリ内にファイル作成、削除 |
“x”実行(1) | 実行ファイルの実行 | そのディレクトリに移動 |
○ファイルの所有者、グループ
・上記のlsコマンド表示例の”rails rails”の部分は、そのファイルの所有者と所有者のグループ
2)パーミッションの設定方法
chmodコマンドで設定します。
“testfile”というファイルに対して下記権限を付与する場合を例に示します。
所有者:読み(4)、書き(2)、実行(1)
グループ:読み(4)、書き(2)、実行(1)
他ユーザ:読み(4)、実行(1)
各権限に与えられている数値を足し合わせて下記コマンドで設定します。
$ chmod 775 testfile $ ls -al testfile -rwxrwxr-x 1 rails rails 0 9月 17 11:06 2013 testfile
3)誤解し易いディレクトリのパーミッション
ファイルのパーミッションについては、すぐにイメージできるかと思いますが、ディレクトリについては少し分かりずらい部分もあるので別途説明します。
以下、所有者が”rails”のディレクトリに対して他のユーザーがどの操作が実行できるか例示しながら説明します。
①読込権限がない場合
下記のようにディレクトリに対して読み込み権限が無いため拒否されます。
$ ls -al drwxrwx--- 2 rails rails 4096 9月 17 09:39 2013 testdir $ ls testdir ls: cannot open directory testdir: 許可がありません
②読込権限はあるが実行権限が無い場合
例)所有者が”rails”のディレクトリに対して他のユーザーが操作
下記のようにファイルの一覧は表示できますが、ディレクトリの実行権限が無いためディレクトリ内に移動する事はできず、ファイルの所有者、権限情報も表示できません。
$ ls -al drwxrwxr-- 2 rails rails 4096 9月 17 09:39 2013 testdir $ ls -al testdir ls: cannot access testdir/testevery: 許可がありません ls: cannot access testdir/testfile: 許可がありません ls: cannot access testdir/..: 許可がありません ls: cannot access testdir/.: 許可がありません 合計 0 d????????? ? ? ? ? ? . d????????? ? ? ? ? ? .. -????????? ? ? ? ? ? testevery -????????? ? ? ? ? ? testfile $ cd testdir -bash: cd: testdir: 許可がありません
③読込、実行権限はあるが書込権限がない場合
下記のように、”testdir”内に移動する事はできますが、”testdir”に書込権限が無いためファイルを新規作成する事はできません。
$ ls -al 合計 12 drwxrwxr-x 3 rails rails 4096 9月 17 09:26 2013 . drwxr-xr-x 38 rails rails 4096 9月 17 09:18 2013 .. drwxrwxr-x 2 rails rails 4096 9月 17 09:39 2013 testdir $ cd testdir $ touch testwrite touch: cannot touch `testwrite': 許可がありません
④読込、実行、書込権限がある場合
$ ls -al drwxrwxrwx 2 rails rails 4096 9月 17 09:39 2013 testdir
ディレクトリに書込権限があるとファイルを新規作成できるようになります。ただし、ファイルの削除の権限も付与されてしまうので注意が必要です。
(a)ファイルの新規作成が出来るようになる
$ touch testwrite $ ls -al -rwxrwxrwx 1 rails rails 0 9月 17 09:39 2013 testevery -rw-rw-r-- 1 rails rails 0 9月 17 09:29 2013 testfile -rw-rw-r-- 1 test-wp test-wp 0 9月 17 10:03 2013 testwrite
(b)ディレクトリに書込権限があると他のユーザーが所有するファイルも削除できてしまう
下記のように”testfile”は、他ユーザーに対しては書込権限を付与していないのでファイルに対して変更させたくないという意図があるにも関わらず、他のユーザーが削除出来てしまいます。
ファイルの削除は、ディレクトリ権限で制御されているためです。
これを防ぎたい場合は、④で示すスティッキービットの設定を行います。
$ ls -al -rw-rw-r-- 1 rails rails 0 9月 17 09:29 2013 testfile $ rm testfile rm: remove write-protected 通常の空ファイル `testfile'? y
④他のユーザーにファイル作成は許可するが、他のユーザーのディレクトリ、ファイル削除は禁止したい場合
下記のようにディレクトリに対してスティッキービットを設定します。
スティッキービットが設定されているディレクトリに対しては、その配下のディレクトリ、ファイルの削除は、自分が所有しているものしか出来なくなります。
設定方法)
下記のように、”chmod +t ディレクトリ名”で設定します。
ディレクトリのパーミッション表示の一番右側に”t”が表示されるようになります。
$ chmod +t testdir $ ls -al drwxrwxrwt 2 rails rails 4096 9月 17 10:07 2013 testdir
スティッキービットを設定すると、下記のように他のユーザーが所有するファイルは削除できなくなります。
$ rm testfile rm: remove write-protected 通常の空ファイル `testfile'? y rm: cannot remove `testfile': 許可されていない操作です
⑤ディレクトリの実行権限は下の階層のディレクトリにも影響するので注意
例えば、下記のようなディレクトリがあった場合
/home/rails/dir1/dir2/dir3/
dir1の書込権限を削除したとしても下層のdir2、dir3で急に書込出来なくなるということは無いと思いますが、dir1の実行権限を削除してしまうと、下層のdir2、dir3にも移動(アクセス)出来なくなってしまいます。
あるファイルに対して権限が足りなくて操作できない場合、書込権限の場合はその親ディレクトリの権限を見ればすぐに分かりますが、実行権限が足りなくて操作できない場合は、ずっと上位のディレクトリまで確認しなくはいけない場合があります。
-
システム管理
- CentOSのブートの流れ、ランレベルの指定
- CentOS6のrc.sysinitスクリプトの処理内容の概要
- procファイルシステムの概要
- sysctlコマンドでカーネルパラメータの参照、変更
- cron、anacronで自動定期実行
- at、batchコマンドの概要
- CentOS6のシステムログ
- rsyslogの設定方法
- システムログのローテート設定
- CentOSのハードウェア情報を表示するコマンド
- CentOSでパーティション、スワップ、ディスク情報を確認
- LinuxのLVMの概要と表示コマンド
- ボリュームグループ、論理ボリューム作成、ファイルシステム作成、マウント設定、物理ボリュームを追加
- CentOSで論理ボリューム、ext4ファイルシステムを拡張
- CentOSのLVMでボリュームグループから物理ボリュームを削除
- WindowsからCentOS6にリモートデスクトップする手順
- viエディタの使用方法
- HTMLのマニュアルをLinuxのターミナル画面上で読む
- findコマンドで直近に更新されたファイルを調べる方法
- Linuxでディスク使用量が多いディレクトリを調べる方法(1)
- Linuxでディスク使用量が多いディレクトリを調べる方法(2)
- psコマンドで全プロセスを表示する方法と表示結果の見方
- プロセス階層、プロセスグループ、セッションを確認するには?
- psコマンドでスレッドに関する情報を表示するには?
- netstat、nmapを使ってリッスンポートを確認する方法
- vmstatコマンドでシステムの状況をモニター
- シェル変数と環境変数の違い
- CentOSのユーザー環境設定ファイル(bashrc、profile)
- 日本語設定、シェル環境設定
- umaskはどこで設定されている?
- CentOS6の各種ネットワーク設定ファイルとインタフェース制御スクリプト
- CentOS6のTCPラッパーの概要と設定方法
- LinuxのNetworkManagerプロセスの概要
- CentOS6のユーザー管理の概要とコマンド操作
- ファイルのパーミッション設定、ディレクトリは要注意
- Linuxでスティッキービットが設定されているか確認する方法
- sudoで特定のコマンドのみをroot権限で実行する
- RHEL6、CentOS6の64ビットサポートとhuge pages
- RHEL6、CentOS6の64ビットサポートとNUMA
Linuxコマンド操作
シェル環境設定
ネットワーク関連
ユーザー管理、権限
64ビットサポート
-
CentOSの概要
- RHEL6、CentOS6の64ビットサポートとhuge pages
- RHEL6、CentOS6の64ビットサポートとNUMA
- CentOS6インストール手順のメモ
- CentOSのブートの流れ、ランレベルの指定
- procファイルシステムの概要
- sysctlコマンドでカーネルパラメータの参照、変更
- CentOS6の各種ネットワーク設定ファイルとインタフェース制御スクリプト
- cron、anacronで自動定期実行
- at、batchコマンドの概要
- CentOS6のシステムログ
- rsyslogの設定方法
- システムログのローテート設定の確認
- CentOSのハードウェア情報を表示するコマンド
- CentOSでパーティション、スワップ、ディスク情報を確認
- LinuxのLVMの概要と表示コマンド
- ボリュームグループ、論理ボリューム作成、ファイルシステム作成、マウント設定、物理ボリュームを追加
- CentOSで論理ボリューム、ext4ファイルシステムを拡張
- CentOSのLVMでボリュームグループから物理ボリュームを削除
- WindowsからCentOS6にリモートデスクトップする手順
- viエディタの使用方法
- HTMLのマニュアルをLinuxのターミナル画面上で読む
- findコマンドで直近に更新されたファイルを調べる方法
- Linuxでディスク使用量が多いディレクトリを調べる方法(1)
- Linuxでディスク使用量が多いディレクトリを調べる方法(2)
- ディスク使用量が多いディレクトリを抽出するbashスクリプト
- psコマンドで全プロセスを表示する方法と表示結果の見方
- プロセス階層、プロセスグループ、セッションを確認するには?
- psコマンドでスレッドに関する情報を表示するには?
- netstat、nmapを使ってリッスンポートを確認する方法
- 日本語設定、シェル環境設定
- CentOSのユーザー環境設定ファイル(bashrc、profile)
- umaskはどこで設定されている?
- シェル変数と環境変数の違い
- CentOSのネットワークフィルタリング設定を一から行う
- CentOS6のTCPラッパーの概要と設定方法
- CentOS6のユーザー管理の概要とコマンド操作
- ファイルのパーミッション設定、ディレクトリは要注意
- Linuxでスティッキービットが設定されているか確認する方法
- sudoで特定のコマンドのみをroot権限で実行する
システム管理
Linuxコマンド操作
シェル環境設定
ネットワーク関連
ユーザー管理、権限
I do not know if it’s just me or if everybody else encountering issues with your website.
It appears like some of the written text on your posts are running off the screen. Can somebody else please comment and let me know if this is happening to them as well?
This might be a issue with my internet browser because I’ve
had this happen before. Thanks
You made a few good points there. I did a search on the
subject matter and found a good number of folks will
agree with your blog.