RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

Linuxのパーミッション -不本意なファイル削除を防ぐための設定-

はじめに

はじめまして、新卒1年目エンジニアのthree_yagiです。

入社から早くも8か月が過ぎ、ようやく業務にも慣れてきました。業務においてLinuxを操作することが度々あり、はじめは何か操作しようとする度にコマンドなどを調べていましたが、最近は基本的な操作なら検索サイトを頼らなくても出来るようになってきました。

Linuxパーミッションについては入社後の研修でLinuxのマニュアルを読んで基礎から学習しました。最近、そのパーミッションを意識する機会があったので、自身の復習も兼ねて基本をまとめてみました。また、意外と見落としがちなファイル削除時のパーミッションの注意点について紹介します。

目次

パーミッションとは

Linuxではファイルとディレクトリに対して、誰がどういった操作ができるかの権限を設定することができます。この設定をパーミッションといいます。
パーミッションは、「ファイルの所有者」「所有グループ」「その他ユーザー」という3種のユーザータイプに対してそれぞれ「読み取り」「書き込み」「実行」の権限を割り当てることができます。

パーミッションの見方

では実際にls -lコマンドでパーミッションを確認してみましょう。

$ ls -l
-rw-r--r-- 1 user group    0 12月  3 14:28 2019 test
drwxr-xr-x 2 user group 4096 12月  3 14:28 2019 test_dir

それぞれの行の先頭の10文字がそのファイル/ディレクトリのパーミッションを表します。

  • はじめの1文字:ファイルの種別
  • 2~10文字目:それぞれのユーザタイプにおける権限
    • 最初の3文字分がファイルの所有者の権限
    • 次の3文字が所有グループのユーザーの権限
    • 最後の3文字がその他ユーザーに対する権限

権限の記号の意味と、権限を持つユーザーがファイル/ディレクトリに対して行える操作を以下にまとめます。

記号 意味 ファイル ディレクト
r 読み込み ファイルの内容を表示 ディレクトリ内のリスト表示
w 書き込み ファイルの上書き、変更 ディレクトリ内にファイル作成、削除
x 実行 実行ファイルの実行 ディレクトリ内に移動

上の実行例では、"test"ファイルは所有ユーザーはファイルを表示した上で編集を行えますが、所有グループのユーザーやそれ以外のユーザーはファイルの表示しかできません。
このようにパーミッションを設定することでユーザーのタイプ別に操作を制限することができます。

次にファイル削除におけるパーミッションの注意点を説明します。

ファイルの削除権限

たとえば以下のようなディレクトリがあったとします。

drwxrwxrwx 2 user group 4096 12月  3 14:28 2019 free_dir

すべてのユーザーが「読み取り」「書き込み」「実行」が可能なディレクトリですね。

ではこのディレクトリ内に以下のファイルが存在するとき、「その他のユーザー」はこのファイルを削除できるでしょうか。

-rw-r-x--- 1 user group    128 12月  3 14:28 2019 testfile

「その他のユーザー」はこのファイルに対して何の権限も持ちません。そのため削除できない。と考えてしまいそうになりますが、実際は削除できてしまいます。
上のrwxの表にでも示しているように、ファイルの削除はディレクトリの書き込み権限で制御されています。そのため、ディレクトリの書き込み権限を持つユーザーはファイルに対する権限を何も持たなくても削除ができてしまうのです。
ディレクトリの書き込み権限をなくせば削除を制限することができますが、同時にファイルの新規作成もできなくなってしまいます。

スティッキービット

では、ファイルの作成を許可しつつ、削除を制限したいときはどうすればよいでしょうか。
その場合は、スティッキービットを使用します。ディレクトリにスティッキービットを付与すると、そのディレクトリ内のファイルは所有者以外が削除できなくなります。
スティッキービットは以下のコマンドで付与できます。

$ chmod +t free_dir

スティッキービットが付与されたディレクトリはls -lコマンドで以下のように表示されます。

drwxrwxrwxt 2 user group    128 12月  3 16:42 2019 execute_dir

パーミッションの最後に"t"が追加されていることがおわかりでしょうか。 この記号がスティッキービットを表しています。
この状態で所有者以外のユーザーがディレクトリ内のファイルを削除しようとすると、下記のようなメッセージが表示され、ファイルが削除できなくなっていることがわかります。

$ rm testfile
rm: remove write-protected 通常の空ファイル `testfile'? y
rm: cannot remove `testfile': 許可されていない操作です

ファイルの削除を制限する機会はそれなりにあると思うので、スティッキービットの設定方法は覚えておきましょう。

まとめ

Linuxにおけるパーミッションとその注意点についてまとめてみました。パーミッションの変更方法やumaskなど、まだまだまとめておきたいことはありますが、キリがなさそうなのでいったんここで締めようと思います。

パーミッションLinuxの基礎的な知識ではありますが、Linux上での様々な操作や処理にかかわってきます。 プログラムを実行したらエラーが出たけど原因がわからない…というときは一度パーミッションをチェックしてみてもよいかもしれません。

Copyright © RAKUS Co., Ltd. All rights reserved.