鶏口牛後な日々

魔法使い(なんでも作れるエンジニア)を目指してます。ブログは発散中

毎回なんとなく覚えていて・・・いい加減学ぼう。chmodや権限管理。

なかなか理解しきれていなかった権限管理

Permission denied などのエラーが出た時に、必要に応じて実施してきた権限管理。 特に今までクリティカルなことがなかったので、なんとな〜くの理解にとどまっていました。

ただ、今回は違う。 権限管理で適当な権限付与を行ってしまった(仮想サーバ上のフォルダに777とかつけてしまいました^^;)ため、ssh接続ができなくなって、調査に何時間も取られた。 これは、さすがにちゃんと覚えなければ、と思い、いつもいろんな人が書いてくれているのをさらっと眺めて終わりにしているのを、ちゃんと自分なりに咀嚼して出力するまでを自分に課す。

これをご覧になった方がいらっしゃったら、時間の余裕と相談ですが自分でまとめ直してこれを機にしっかりと正確に頭に叩き込むことをお勧めします。 面倒な事態に巻き込まれることがあります。

Linuxコマンドで権限を確認する

ls -l このLinuxコマンドで、権限を含むファイルの詳細情報を確認できます。 lは long の意味で、詳細を示してくれるオプションです。

f:id:TACOSVilledge:20181015143106p:plain

この時、書かれている内容は、左から順に以下。

  • ファイルタイプ(ディレクトリならd)
  • 権限(後述)
  • ハードリンクの数
  • オーナー名
  • ユーザーグループ名
  • バイトサイズ
  • タイムスタンプ
  • ファイル名

権限の詳細

drwxr-xr-x

  • 1文字目が、ディレクトリかどうかを示す。d とあればディレクトリ。 - はファイル。 |シンボリックリンク
  • 2〜4文字目は、オーナーの権限。r は「読み取り権限あり」。 w は「書き込み権限あり」。 x は「実行権限あり」。 - は権限なし。
  • 5〜7文字目は、所有者の権限。
  • 8〜10文字目は、その他の権限。

権限を付与する方法1(一気に)

chmod 764 hyun.txt

書き方は、 chmod モード 対象ファイルパスである。

モードとは、以下の三種類。(8進数)

  • 4 (読み取り権限)
  • 2 (書き込み権限)
  • 1 (実行権限)

付与したい権限に相当する数字を合計した数を「モード」で指定する。 この例では、7 が、ユーザーの権限、 6 がグループの権限、 1 がその他の権限を示す。 つまり、以下の意味になる。

  • ユーザーには、「読み取り」、「書き込み」、「実行」の3つの権限全てを付与
  • グループには、「読み取り」、「書き込み」の2つの権限を付与
  • その他には、『実行」の1つの権限のみを付与

という具合である。

指定できる数値ことに整理してみると以下のようになる。 * 7(rwx) * 6(rw-) * 5(r-x) * 4(r--) * 3(-wx) * 2(-w-) * 1(--x) * 0(---)

権限を付与する方法2(ユーザーグループごとに)

chmod a+w hyun.txt

この a+w の部分は、 ユーザーグループ操作権限 の3つのパートに分かれます。

ユーザーグループの指定は、以下から選択できる。

  • u(ユーザー)
  • g(グループ)
  • o(その他)
  • a(全てのユーザー)

操作は、以下から選択する。

  • +(今の権限に追加で付与する)
  • -(今の権限から削除する)
  • =(その権限にする)

権限は、以下から選択する。

  • r(読み取り権限)
  • w(書き込み権限)
  • x(実行権限)

更に、特殊な権限をつけることもできます。

  • s(セットID)

スティッキビットを付与されると、 drwxrwxrwt と表現され、そのディレクトリ以下のファイルの削除およびファイル名の変更は、所有者のみができるという制限。

  • t(スティッキビット)

セットID を付与されると、 -rwsr-xr-x の場合、他人が実行する時所有者の権限で実行することになり、 -rwxrwsr-x だと、他人が実行する場合グループの権限で実行することになる。

今まで自分で付与したことはなかったが、権限を確認した時に、sやtという文字を見たことはあった。

複数指定もできる

chmod go+w hyun.txt や、 chmod a-wx といった指定の仕方もできる。

便利なオプション

-R 再帰的に、フォルダの配下の全てに付与

[おまけ] 似てるけど違う、chown

これは、 chown owner file の形で、ファイルのオーナーを変更できるLinuxコマンドでした。 こちらもオーナーを変更することで、権限が変更になる関係で、ssh接続ができなくなるトラブルに見舞われる人がたまにいるようです。 みなさまお気をつけください。

以上。