ユーザーとグループ

INPUT · スライド

グループで棚を共有する

01 / 08

2人で書き合える棚を作る

ここまでで材料が揃ったよ。

  • 章6 … 9文字の読み方と chmod、入れ物の w が作成と削除を決めること
  • 章7 … ユーザーとグループの作り方

今日はこの2つを合わせて、あなたと taro が両方書ける棚を作るよ。

作戦はこうだね。

1. team グループを作って、2人を入れる
2. 棚(ディレクトリ)のグループを team にする
3. グループの3文字に rwx を付ける
4. その他の3文字は空にする(関係ない人を入れない)

数字で書くと 770 だよ。rwx rwx --- だね。

でも、これだけではうまくいかないんだ。2つ落とし穴があって、それを踏むのが今日の本題だよ。

02 / 08

棚のグループと権限を決める

まず棚を用意しよう。グループを変えるのは root だけができることだね。

~ $ suPassword:~ $ addgroup team~ $ chgrp team \    /home/manabiya/kyodo~ $ chmod 770 /home/manabiya/kyodo~ $ exit~ $ ls -ld kyododrwxrwx--- 2 manabiya team  40 kyodo

drwxrwx--- になったね。持ち主(あなた)とグループ(team)には全部、その他には何も無い形だよ。

道をぜんぶ書いたのに気づいたかな。root の ~/root だからだよ。chgrp team ~/kyodo と打つと /root/kyodo を探して「そんなものは無い」と言われるんだ。

root になっているあいだは ~ の意味が変わる。これは間違えやすいので、道をぜんぶ書くのが安全だよ。

03 / 08

グループの人は入れる、他の人は入れない

taroteam に入れておけば、棚に書けるようになるよ。

~ $ su taro~ $ echo こんにちは > \    /home/manabiya/kyodo/taro.txt~ $ exit

通ったね。taroグループの枠で判定されて rwx をもらえたからだよ。

team に入っていない jiro はどうなるだろう。

~ $ su jiro~ $ ls /home/manabiya/kyodols: can't open  '/home/manabiya/kyodo':  Permission denied

中を見ることさえできないね。その他の枠が --- だからだよ。

ここが chmod 777 との決定的な違いだよ。777 なら全員入れてしまう。770 なら必要な人にだけ開く

章6で「777 は強すぎる薬」と言ったのは、こういう選択肢があるからなんだ。

04 / 08

落とし穴1 — 作ったファイルのグループが違う

taro が置いたファイルを見てみよう。

~ $ ls -l kyodo-rw-r--r-- 1 taro taro  16 taro.txt

グループが taro になっているね。team ではないんだ。

なぜだろう。新しく作るファイルのグループは、作った人の主グループになるからだよ。前のレッスンで id -gn tarotaro だったのを思い出してね。

これが困るんだ。棚は team で共有しているのに、中身は taro のものになってしまう。他の人は team の資格では触れないよね。

解決する印があるよ。setgidchmod g+s)だよ。root のまま打つんだ。

/home/manabiya $ chmod g+s \    /home/manabiya/kyodo/home/manabiya $ exit~ $ ls -ld kyododrwxrws--- 2 manabiya team

グループの x の位置が s になったね。これは「この中に作られたものは、この入れ物のグループを受け継ぐ」という意味だよ。

数字で書くなら 2770 だよ。先頭の 2 が setgid だね。

05 / 08

落とし穴2 — グループに w が無い

setgid を立ててから作れば、グループは team になるよ。それでもまだ書き合えないんだ。

~ $ ls -l kyodo-rw-r--r-- 1 taro team  10 taro2.txt

グループは team になったね。でも権限が -rw-r--r--644)だよ。グループの枠に w が無い

読めるけれど書けない。これでは共同で書き足せないよね。

原因は章6でやった umask だよ。既定の 022 は「グループとその他から w を落とす」設定だからね。

666 - 022 = 644

だから共有の棚で作業するときは umask を変えるんだ。

~ $ umask 002~ $ echo ... > kyodo/kyoyu.txt~ $ ls -l kyodo/kyoyu.txt-rw-rw-r-- 1 taro team ...

664 になったね。グループに w が残ったよ。これでやっと書き合えるんだ。

06 / 08

2つ揃えて、はじめて共有になる

整理しておこう。共有には2つの仕掛けが必要だったよ。

仕掛け決めるもの打つもの
setgid新しいファイルのグループchmod g+s 棚
umask新しいファイルの権限umask 002

片方だけでは足りないんだ。

  • setgid だけ … グループは揃うが w が無い
  • umask だけ … w はあるがグループが違う

両方やって、はじめて「team の人なら誰でも読み書きできるファイル」ができるんだ。

これは実際のサーバーでそのまま使う設定だよ。何人かで触る場所には、たいていこの2つが仕込まれているんだ。

drwxrws--- team  共有の棚-rw-rw-r-- team  中のファイル

この形を見たら「ここは共同作業の場所だな」と読めるようになるよ。

07 / 08

消せるかどうかは、入れ物で決まる

もうひとつ確かめておこう。あなたは taro のファイルを消せるよ。

~ $ rm kyodo/taro.txt~ $

通ってしまうね。taro.txt の持ち主は taro なのに。

理由は章6でやったよ。消すのに要るのは、入れ物の w だからだよ。ファイル自身の権限は関係ないんだ。

あなたは棚の持ち主で rwx を持っている。だから中のものを消せる。

共有の棚では、これが困ることがあるよね。誰でも他人のファイルを消せてしまうからだよ。

そこで使うのが sticky bitchmod +t)だよ。章6の最後に名前だけ出てきたね。これも root のまま打つよ。

/home/manabiya $ chmod +t \    /home/manabiya/kyodo/home/manabiya $ exit~ $ ls -ld kyododrwxrws--T 2 manabiya team

これを立てると、中のものを消せるのは持ち主だけになるんだ。/tmpdrwxrwxrwt だったのを覚えているかな。誰でも書ける場所で、他人のファイルを消させないための印だよ。

08 / 08

さあ、打ってみよう

今日は毎回、棚を用意してから始めるよ。手順はこれだね。

su               → manabiyaaddgroup teamchgrp team /home/manabiya/kyodochmod 2770 /home/manabiya/kyodoexit

長く見えるけれど、中身は章6と章7で打ってきたものだけだよ。
tarohanako は前のレッスンと同じ adduser で作るからね。

覚えておく数字は3つだよ。

数字意味
770rwxrwx---2人で使う棚
2770rwxrws---+ グループを受け継ぐ
002umask。w を残す

困ったら ls -ldls -l、それに whoami だよ。いま誰で、何がどうなっているかを見れば、次に打つものが分かるからね。