権限不足でファイルの書き込み等が行えない
権限回りの問題で、スクリプトの実行が行えない/ファイルの移動が行えない等の問題が発生する事があります。
そんな時にパーミッションの変更を行う事で、事象の解決に繋がる事がございます。
以下のようなファイルが存在して、 test_01 以外のユーザーは読み込みだけが許可されているような状況があるとします。所有者は test_01ユーザー となり、現在は test_02ユーザー でログインしています。
[test_02@localhost tmp]$ ll
合計 0
-rw-r--r--. 1 test_01 test_01 0 8月 13 19:35 memo.txt
-rw-r--r--. 1 test_01 test_01 4 8月 30 07:04 test.sh
現在の状況では、test_02ユーザーはファイルの書き込みは行えないです。
試しにコマンドの実行結果を書き込みしてみましたが、許可がないとエラーが発生しました。
また、スクリプトファイルについても実行権が付与されていないので、動かせません。
※権限的な説明がしたいので、フルパスで動かしました。(bashコマンド使えば、権限関係なく動かせます。)
[test_02@localhost tmp]$ ll > memo.txt
-bash: memo.txt: 許可がありません
[test_02@localhost tmp]$ /tmp/test.sh
-bash: /tmp/test.sh: 許可がありません
chmodについて
パーミッションの変更を、chmodコマンドで行います。
構文は、chmod 数値 ファイル名 となっております。
数値は、それぞれ所有者/グループ/その他のユーザー で指定します。
744で指定した場合は、所有者は読み取り/書き込み/実行権が付与され、グループ/その他のユーザーには読み取り権のみが付与されます。
所有者のみに読み取り/書き込み/実行権を付与したい場合は chmod 700 ファイル名 を実行する事で可能です。
下記表を参照下さい。
読み取りのみを行いたい場合は、4を指定。読み取り + 書き込み を行いたい場合は、4 + 2 で6を指定します。数字を加算すれば、複数の権限付与を行えます。
数字 | 内容 |
---|---|
4 | 読み取り(r) |
2 | 書き込み (w) |
1 | 実行(x) |
実際にやってみた
実際にパーミッションの変更を行います。
所有者じゃないユーザでchmodコマンドを実行をすると、エラーになります。
なので、所有者ユーザにスイッチします。
[test_02@localhost tmp]$ ll
合計 0
-rw-r--r--. 1 test_01 test_01 0 8月 13 19:35 memo.txt
-rw-r--r--. 1 test_01 test_01 4 8月 30 07:04 test.sh
[test_02@localhost tmp]$ chmod 746 memo.txt
chmod: `memo.txt' のパーミッションを変更しています: 許可されていない操作です
[test_02@localhost tmp]$ su - test_01
[test_01@localhost ~]$
chmodコマンドで、パーミッションの変更を行います。
memo.txt のその他ユーザに読み込み(4) + 書き込み (2) を指定。
test.sh のその他ユーザに読み込み(4) + 実行 (1) を指定。
llコマンドで権限が付与されたか、確認します。
[test_01@localhost ~]$ chmod 746 ../../tmp/memo.txt
[test_01@localhost ~]$ chmod 745 ../../tmp/test.sh
[test_01@localhost ~]$ ll /tmp
合計 4
-rwxr--rw-. 1 test_01 test_01 0 8月 13 19:35 memo.txt
-rwxr--r-x. 1 test_01 test_01 4 8月 30 07:04 test.sh
test_02ユーザーにスイッチして、書き込みと実行がそれぞれ行えるかを確認します。
[test_02@localhost tmp]$ ll > memo.txt
[test_02@localhost tmp]$ cat memo.txt
合計 4
-rwxr--rw-. 1 test_01 test_01 0 8月 30 07:37 memo.txt
-rwxr--r-x. 1 test_01 test_01 4 8月 30 07:04 test.sh
[test_02@localhost tmp]$ /tmp/test.sh
/tmp
無事両方行える事を確認しました。
終わりに
chmodコマンドは結構使います。
覚えておいて損はないとか思います