SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【Linux】グループでディレクトリを共有して利用するとき

問題

Linuxの複数のユーザーで、あるディレクトリの中のファイルを読み書きしたい。

答え

Linuxのグループを使うとこんな感じ。

1. グループを作る

すでにあるグループを使いまわすときは作らなくてよい。

# groupadd group-a

2. グループで共有したいディレクトリを作る

Project A というプロジェクトでもやる場合を考える。

# mkdir /home/project-a

3. 共有したいディレクトリの所有者、権限を設定する

共有ディレクトリのグループをgroup-aに変更。所有者とグループに読み書きの権限を設定。

# chgrp group-a /home/project-a
# chmod 770 /home/project-a

お好みで違う書き方をしてもよい。すでにディレクトリの中にファイルがあったら、-Rで全部変更できる。

# chown -R :group-a /home/project-a
# chmod -R g+wr /home/project-a

4. ユーザーを同じグループに所属させる

# usermod -G group-a user1
# usermod -G group-a user2
# usermod -G group-a user3

確認はidコマンドでできる。

$ id user1
uid=1033(user1) gid=1033(user1) 所属グループ=1033(user1),1040(group-a)

5. ディレクトリにSGIDビットを立てる

# chmod 2770 /home/project-a

SGID(set group ID、setgid)パーミッションが設定されているディレクトリでは、その配下に作られるファイルのグループはディレクトリのグループを継承するようになる。

手順は以上。


手順5を言いたかったために、説明上、手順が多くなっている。

普段は、手順3の時点で最初からSGIDビットを立てておけばよい(chmod 2770 /home/project-a)。

手順4までだと、user1がディレクトリの中にファイルを作ったときに以下のようになってしまい、グループがばらばらになってしまうし、user2はそのファイルに書き込めない。

$ touch /home/project-a/test.txt
$ ls -la /home/project-a
合計 8
drwxrwx--- 2 root  group-a 4096 2012-07-16 15:59 .
drwxr-xr-x 5 root  root    4096 2012-07-16 15:57 ..
-rw-r--r-- 1 user1 user1      0 2012-07-16 15:59 test.txt

SGIDビットが立ててあると、以下のようになる。

(user1さんで)
$ touch /home/project-a/test2.txt
$ ls -la
合計 8
drwxrws--- 2 root  group-a 4096 2012-07-16 16:19 .
drwxr-xr-x 5 root  root    4096 2012-07-16 15:57 ..
-rw-r--r-- 1 user1 user1      0 2012-07-16 15:59 test.txt
-rw-r--r-- 1 user1 group-a    0 2012-07-16 16:19 test2.txt
(user2さんで)
$ touch /home/project-a/test3.txt
$ ls -la /home/project-a
合計 8
drwxrws--- 2 root  group-a 4096 2012-07-16 16:32 .
drwxr-xr-x 5 root  root    4096 2012-07-16 15:57 ..
-rw-r--r-- 1 user1 user1      0 2012-07-16 15:59 test.txt
-rw-r--r-- 1 user1 group-a    0 2012-07-16 16:19 test2.txt
-rw-r--r-- 1 user2 group-a    0 2012-07-16 16:32 test3.txt
(user2さんで)
$ mkdir /home/project-a/test-dir
$ ls -la /home/project-a
合計 12
drwxrws--- 3 root  group-a 4096 2012-07-16 16:36 .
drwxr-xr-x 5 root  root    4096 2012-07-16 15:57 ..
drwxr-sr-x 2 user2 group-a 4096 2012-07-16 16:36 test-dir
-rw-r--r-- 1 user1 user1      0 2012-07-16 15:59 test.txt
-rw-r--r-- 1 user1 group-a    0 2012-07-16 16:19 test2.txt
-rw-r--r-- 1 user2 group-a    0 2012-07-16 16:32 test3.txt

関連するメモ

コメント(1)

sasaki 2018年4月28日 10:58

この例で「user2はそのファイルに書き込めない。」という点も解消されるのでしたっけ?
test2.txtにはグループの書き込み権限が付与されていないのでuser1がファイルを作成するたびにchmodしなければいけないのでしょうか?