Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

UNIX(Linux)
入門編

  1. UNIX(Linux)とは
  2. ディストリビューションとは
  3. CentOSとMacOSとCUIについて
  4. 仮想化ソフトウェアを使ったCentOSのインストールとMacOSのCUI環境について
  5. ログインとrootユーザーとシャットダウン等について
  6. コマンドの構造と注意点について
  7. ファイルシステムとカレントディレクトリの移動と表示(cdとpwd)について
  8. 各主要ディレクトリの解説とディレクトリ等の内容表示(ls)について
  9. ちょっと高度なディレクトリの移動(cd)とパスについて
  10. 『ls』コマンドの応用(1)とドットファイルについて
  11. 『ls』コマンドの応用(2)
  12. タブキーを使った入力補完について
  13. ディレクトリの作成方法(mkdir)について
  14. ファイルの簡易作成(touch)とファイルについて
  15. 標準入出力とリダイレクション(>と>>)を使ったファイル生成とechoとcatについて
  1. ファイルとディレクトリの削除(rm)について
  2. ファイルとディレクトリのコピー(cp)について
  3. ファイルとディレクトリの移動と名前変更(mv)について
  4. viエディタとは
  5. viの基本的な使い方(1)
  6. viの基本的な使い方(2)
  7. ターミナル(sshとTera Term)を使ったリモート操作について
  8. ソフトウェアのインストール方法(yumとパッケージ管理ツール)について
  9. ユーザーの概要と確認と追加と切り替え(adduserとsu)について
  10. ユーザーのパスワードと削除と更新と管理者権限での実行(passwdとuserdelとusermodとsudo)について
  11. グループの概要と確認方法(groups)について
  12. グループの追加と削除と設定変更(groupaddとgroupdelとgroupmod)とユーザー追加方法について
  13. パーミッション(権限)について
  14. パーミッションの設定方法(chmodとchown)について
  1. トップページ
  2. UNIX(Linux)入門編 - パーミッションの設定方法(chmodとchown)について

パーミッションの設定方法(chmodとchown)について

みなさまどうも。

この度はUnixとかLinuxについて大変お疲れ様でした、今回が最後の記事でございます。

最初からお読み頂いた方は色々とお疲れ様でございました、初めていらっしゃった方はどうぞごゆるりとしていってください。

といわけで今回はパーミッションあたりの設定方法についての解説です。これについては色々と頭がこんがらがちな内容なのでコマンドを叩いてみたり状態とかを確認したりとかしつつじっくりやっていきましょう。

というわけでまずいつも通り『root』さんでログインして頂きまして新規ユーザーである『test』くんを作成してみましょう。現在『root』さん以外の一般ユーザーが既に居るならば『test』くんを作らずその子を使ってしまってOKです。

[root@localhost ~]# adduser test

んでそれと同時に『test』くんのホームディレクトリである『/home/test』の内部に「もぅ...見ないでって言ったのに...(///)」と書き込んだ『test.txt』を作成してみて下さい。『echo』くんとリダイレクションのコンビ技を使うとするとこんな感じですね。

[root@localhost ~]# echo "もぅ...見ないでって言ったのに...(///)" > /home/test/test.txt
[root@localhost ~]# cat /home/test/test.txt
もぅ...見ないでって言ったのに...(///)

んで現在の『/home/test/test.txt』なファイルのパーミッションの状態なのですが『ls -l』を使って確認してみるとこんな感じになっております。

[root@localhost ~]# ls -l /home/test/test.txt
-rw-r--r--. 1 root root 51  Jul 25 09:40 2018 /home/test/test.txt

『rw-r--r--』と『root root』って部分に注目ですね。現在のオーナーは『root』さんでグループも『root』グループになっています。

さてこの状態でちょいと『test』くんの所属してるグループを確認してみましょう。『groups』コマンドで確認してみると

[root@localhost ~]# groups test
test : test

ってなりますので現在の『test』くんは『test』グループにしか属しておりません。

先程の『/home/test/test.txt』のパーミッションでは『root root』となっていたので現在の『test』くんは『その他』なユーザーのパーミッションが適用されるって事ですね。『rw-r--r--』だったのでその一番右側の3文字の『r--』でございましてつまりは「読み込みは出来るけど書き込みと実行はできない状態」でございます。

最初にこれを試してみましょう。まず『cat』コマンドで出力してみると

[test@localhost root]$ cat /home/test/test.txt
もぅ...見ないでって言ったのに...(///)

ちゃんと出力されています。でも追記しようとすると

[test@localhost root]$ echo "見ちゃった...(*'ω'*)" >> /home/test/test.txt
bash: /home/test/test.txt: Permission denied

「Permission denied」って事なので「許可ないからダメだよー」って言われちゃって編集できませんね。これは実行ファイルだとしても実行する事は出来ない感じになっています。「読み込みは出来るけど書き込みと実行はできない状態」がバッチリ反映されてる感じでございますね。

ここでオーナーとグループを変更できるコマンドの『chown』くんを使ってみましょう。まず一旦『exit』とかで『test』くんから『root』さんにユーザーを切り替えて頂きまして

[test@localhost ~]$ exit
exit
[root@localhost ~]#

この状態で『chown test /home/test/test.txt』と叩いてみて下さい。そしてそのまま『ls -l /home/test/test.txt』と叩いてみると

[root@localhost ~]# chown test /home/test/test.txt
[root@localhost ~]# ls -l /home/test/test.txt
-rw-r--r--. 1 test root 51  Sep 21 18:56 2018 /home/test/test.txt

オーナーの部分が『test』くんになっていますね。

この状態で『test』くんにユーザーを切り替えて追記しようとすると

[test@localhost root]$ echo "見ちゃった...(*'ω'*)" >> /home/test/test.txt
[test@localhost root]$ cat /home/test/test.txt
もぅ...見ないでって言ったのに...(///)
見ちゃった...(*'ω'*)

ちゃんと追記出来ていますね。オーナーが『test』くんになったので『rw-』が適用されるようになったわけです。

んでもういっちょ『root』さんに戻って頂きまして

[test@localhost root]$ exit
exit
[root@localhost ~]#

今度はオーナーとグループを変更してみましょう。「グループを変更するにはどういう記法になるの?」と聞かれると『:』を使って区切ってしまえばOKです。

例えば「オーナーが「test』くんでグループが『root』」になると『test:root』ってなり「グループだけを『test』にしたい」となると『:』の左側を空白にして『:test』って打つ感じですね。

[root@localhost ~]# ls -l /home/test/test.txt
-rw-r--r--. 1 test root 78  Sep 21 18:59 2018 /home/test/test.txt
[root@localhost ~]# chown :test /home/test/test.txt
[root@localhost ~]# ls -l /home/test/test.txt
-rw-r--r--. 1 test test 78  Sep 21 18:59 2018 /home/test/test.txt

こんな感じで必要な権限をそれぞれ設定してしまえばOKです。ここまでは大丈夫そうでしょうか。

続いて権限を変更出来る『chmod』です。ちょっと頭がこんがらがちかもですが『chown』コマンドくんは「-rw-r--r--. 1 test test 78 Sep 21 18:59 2018 /home/test/test.txt」の部分の「test test」な部分を変更するコマンドでございまして次に解説する『chmod』コマンドくんは『rw-r--r--』な部分を変更するコマンドでございます。慣れないとわけわかめでございますね。

あと注意点なんですが『chown』コマンドは『root』(スーパーユーザー)さん、つまり管理者権限を持っている状態でないと実行する事は出来ません。これは『sudo』でもOKでございます。んで『chmod』に関してはスーパーユーザーじゃなくともそのファイルのオーナー(所有者)さんであれば一般ユーザーでも変更可能になってます。ファイルの所有グループさんではNGです。ここ間違いやすいので少し気を付けて下さい。

更に前回の記事でも解説しましたが『root』(スーパーユーザー)さんであれば全てのファイルをこにょこにょし放題というかパーミッションとかそういうのの影響は一切受けませんのでこれは絶対に忘れないようにして下さい。どういうことかと言うと例えば『/home/test/test.txt』なファイルの状態が以下としますよね。

[root@localhost ~]# ls -al /home/test/test.txt
----------. 1 test test 78  9月 21 18:59 2018 /home/test/test.txt

これは権限部分が『---------』ってなっているので本来ならば誰も触れないファイルになってしまっています。しかしスーパーユーザーさんならば以下のように

[root@localhost ~]# cat /home/test/test.txt
もぅ...見ないでって言ったのに...(///)
見ちゃった...(*'ω'*)

中身が余裕で見れちゃいます。もちろん編集や削除などなどなんでもOKでございます。こんな感じで「スーパーユーザーさんというのはこの世界の神のような存在であるのでオーナーや権限などの影響は一切受けないんだな!(*'ω'*)」と覚えておくとよいかもです。

セキュリティ的にスーパーユーザーさんの管理は非常に重要になるわけなのですがそれはこの辺が原因ですね。全てのファイルの権限をしっかり設定してある状態であってもスーパーユーザーならばその影響を一切受けないので悪いハッカーさんにハッキングされてスーパーユーザーさんになられてしまったら即終了でございます。

更にハッキング出来る程のスキルがある人ならばそのサーバーを一瞬で乗っ取る為のプログラム、現在のユーザーを全削除したりパスワードを変更したり公開鍵を破棄したりして元々のユーザーさんが誰も触れなくなるような処理も用意してあるはずなのでそう考えると怖いですよね。プログラムをコピペして実行するだけで済むのでものの30秒くらいで乗っ取り完了になります。

ぶっちゃけ侵入さえ出来れば著者も一瞬で「このサーバーは俺のもんだぜー!(*'▽'*)」って出来ちゃいますので「これから商用サーバーを設計するぜ!٩( 'ω' )و」って人はスーパーユーザーの管理はまじで気を付けて下さい。ここは超要注意でございます。

というわけで話を戻しまして『chmod』の使い方についてです。基本的な文法は『chmod パーミッション 該当ファイルとかディレクトリとか』って感じになるのですがこの『パーミッション』部分の記法がちょっとややこしいです。

まず前回の記事で解説した3桁の数字で『パーミッション』を表記するパターンを使う場合がありまして例えば全てのアクセスを許可する『rwxrwxrwx』にしたい場合だったら『777』、誰でも実行は出来ないけど読み書きはできる『rw-rw-rw-』にしたかったら『666』、って感じで数字で指定してしまえばOKです。『/home/test/test.txt』をこにょこにょするとしたらこんな感じですね。

[root@localhost ~]# chmod 777 /home/test/test.txt
[root@localhost ~]# ls -al /home/test/test.txt
-rwxrwxrwx. 1 test test 78  9月 21 18:59 2018 /home/test/test.txt

んで『chmod』の『パーミッション』の指定方法にはまた別の方法がございまして「オーナーとかグループとかその他とか全てとかを指定して更に付加とか削除とか丸ごと書き換えとかを指定して更に権限を指定する」なんて方法があったります。なんのこっちゃって話なのですがこんな表記になりますね。

[root@localhost ~]# chmod u=w /home/test/test.txt

こちらも慣れてしまうと便利な表記方法になりますのでこれについて詳しく見てみましょう。というか3桁の数字で『パーミッション』を表記するパターンはどうにもゲシュタルト崩壊しがちなので著者は大体こっちを使っておるでございます。

というわけで上記の『u=w』なんて部分に注目しつつ以下の表を見て頂きたいのですが

u所有者(オーナー)を対象とする。
gグループを対象とする。
oその他を対象とする。
a全てを対象とする。
+指定した権限を付加する。
-指定した権限を削除する。
=指定した権限にする。要するに上書き。
r読み込み権限を付ける。
w書き込み権限を付ける。
x実行権限を付ける。

こんな感じで各パーミッションを指定できる感じになりますね。

例えばオーナーに書き込み権限を追加したいならば

[root@localhost ~]# chmod u+w /home/test/test.txt

になりましてオーナーに書き込み権限のみを許可した状態にしたいならば

[root@localhost ~]# chmod u=w /home/test/test.txt

ってすればOKです。『=』は要するに指定したオーナーとかグループとかに対するパーミッションを全て上書きって事になるのでこちらも覚えておいてください。

そして「複数指定したいぜー」って気分になったら以下のようにすればOKです。

[root@localhost ~]# chmod ug=rw /home/test/test.txt

こうする事でオーナーとグループに読み込みと書き込みの権限が設定されます。

んでこの『u』とか『g』とかの順番は順不同でOKなので

[root@localhost ~]# chmod gu=wr /home/test/test.txt

ってしてしまってもOKです。

んでオーナーとかグループとかに違う権限を同時に指定したいぜーって気分になったら『,』を使いましょう。こんな感じですね。

[root@localhost ~]# chmod u=wr,g=w /home/test/test.txt

これで同時に指定する事ができます。ちなみに引数で指定するという都合上、『,』の前後に半角スペースは置くことはできませんので以下はエラーになっちゃいます。ここはご注意ですね。

[root@localhost ~]# chmod u=wr, g=w /home/test/test.txt

多分3桁の数字で指定するよりもこっちの方が使いやすいと思うので著者的にはこちらの方がおすすめでございますね。

というわけでここまでお読み頂きありがとうございました。

多分このくらいの知識があればUNIX及びLinuxの基本的なとこは余裕で扱えるようになっているのではないかと予想しておりますがいかがでしょうか。

また時間ができ次第応用的な部分も記事にしていきたいと思いますので今後共当サイトを宜しくお願い致します。

ではではこの辺で。またどこかでお会いしましょう。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。