「共有ディレクトリ」を作成してパーミッション(許可属性)への理解を深めよう:“応用力”をつけるためのLinux再入門(11)(2/2 ページ)
前回は、Linuxの「ユーザー」と「グループ」を確認しました。今回は、特定のグループメンバーで共有するディレクトリを作成しながら、ディレクトリのパーミッション(許可属性)がどのように働くかを試してみましょう。
ファイルを作成してみよう(1)
この状態では、まだtestusersグループのメンバーであっても、「/usr/local/workdir」にファイルやディレクトリを作成することはできません。パーミッションが「rwxr-xr-x」で、グループに「w」の権限がないためです。
そこで、「chmod」コマンドで、「/usr/local/workdir」に対して「グループの書き込み許可」を追加します。
chmod g+w /usr/local/workdir
(「workdir」にグループの書き込みを許可する)
以下の実行画面4では、既に「/usr/local/workdir」へ移動しているので、「chmod g+w .」を実行しています。
これでtestusersグループに所属しているユーザーpenguinとseagullは、「/usr/local/workdir」にファイルやディレクトリを作成できるようになりました。
しかし、作成したファイルの所属グループは、まだそれぞれの「プライマリーグループ」のままです。また、「/usr/local/workdir」の「その他」に対するパーミッションが「r-x」となっているため、testusersグループ以外のメンバーもディレクトリへのアクセスが可能なままになっています。
ディレクトリのパーミッションを変更する
chmodコマンドで、「/usr/local/workdir」のパーミッションを「2770」に変更します。
1桁目の「2」が「SGID(set-group-ID)」です。これによって、「workdirで作成したファイルの所有グループは、自動でworkdirのグループとなる」ということになります。
このようにすることで「/usr/local/workdir」でユーザーpenguinが作成したファイルは、所有者「penguin」、所有グループ「testusers」となります。そして、testusersグループに属する他のユーザーも自由に読み書きできるようになります。
続く3桁の「770」の指定によって、ディレクトリの所有者と所有グループにだけファイルのフルアクセス(rwx)を許可し、その他、つまりtestusersグループに属していないメンバーにはアクセスできないようになります。
なお、パーミッションに「2770」を指定した場合は、testusersグループのメンバーはどのファイルでも削除可能なので、他のユーザーが所有するファイルも削除することができます。
もし、これが不都合である場合は、1桁目の特殊な属性に「1(削除制限)」を指定します。「2」のSGID設定も生かしたいので「3」とし(※)、「chmod 3770 ディレクトリ」と設定します。
【※】属性はビット演算で行います。「1(2進数で01)」と「2(二進数で10)」の両方を有効にするには、1+2=3(2進数で11)をセットします。
chmod 2770 /usr/local/workdir
(SGIDと770(rwxrwx---)を設定する)(画面5)
chmod 3770 /usr/local/workdir
(SGIDと削除制限と770(rwxrwx---)を設定する)
1桁目の「1(ディレクトリの場合は削除制限を意味する属性)」は「STICKY属性」と呼ばれています。CentOSの場合、「dircolors」のデフォルト設定で、STICKYでその他は書き込み不可の場合「37;44(白文字・青背景)」が設定されています。なお、似たようなディレクトリに「STICKY_OTHER_WRITABLE」があり、これは「30;42(黒文字・緑背景)」で表示されます。「/tmp」ディレクトリが該当します。
ファイルを作成してみよう(2)
それでは、パーミッションが「3770」の状態で、ファイルを作成してみましょう。ユーザーpenguinでログインして「/usr/local/workdir」へ移動し、ファイルを作成してみます。SGIDが有効なため、ファイルの所有者は「testusers」になることが分かります(画面6)。
続いて、同じくtestusersグループのメンバーであるseagullでログインします。先ほどユーザーpenguinが作成したファイルを参照したり、書き換えたりすることはできますが、削除することはできません(画面7)。
パーミッションが「2770」の場合は、ユーザーseagullでもpenguinが所有するファイルを削除することができます(画面8)
実際の運用でパーミッションを「770」にするか、「2770」にするか、または「3770」にするかはケースバイケースです。共有したい内容によって適宜選択してください。
後始末
最後に“後始末”です。テスト用に作成したtestusersグループを削除し、テスト用のディレクトリを削除します。
gpasswd -d penguin testusers
(ユーザー「penguin」を「testusers」グループから削除する)
gpasswd -d seagull testusers
(ユーザー「seagull」を「testusers」グループから削除する)
groupdel testusers
(「testusers」グループを削除する)
userdel -r penguin
(ユーザー「penguin」を削除する。「-r」はホームディレクトリなども一緒に削除するオプション)
userdel -r seagull
(ユーザー「seagull」を削除する)
rm -rf /usr/local/workdir/*
(「/home/workdir」の中身を削除する)
rmdir /usr/local/workdir/
(「/home/workdir」を削除する)
上記コマンドは、全て管理者権限で実行する必要があります。以下の画面9の実行例では、操作ミスによる被害を防ぐために「/usr/local」ディレクトリに移動してから操作しています。
筆者紹介
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.