めもめも のーと

ハマったこととか、覚えたこととか

ユーザをグループに追加することで別ユーザのディレクトリに書き込めるようにした話

グループに追加することで書き込み権限を得る話

やりたいこと

appユーザに所有権があるディレクトリに対して、hogeユーザがファイル書き込みを行いたい。

=> appユーザが属するグループにhogeユーザを追加する

手順

初期状態(ユーザ確認)

# cat /etc/passwd
~ 省略 ~
app:x:500:500::/home/app:/bin/bash
hoge:x:501:501::/home/hoge:/bin/bash

対象ディレクトリ作成(今回は新規作成)

# mkdir /var/test
# ls -ld /var/test
drwxr-xr-x 2 root root 4096 Feb  7 01:25 test

appユーザに所有権を与える

# chown -R app:app /var/test

appユーザは書き込みできることを確認

# su - app
$ touch /var/test/test.log
$ ll /var/test/
-rw-rw-r-- 1 app app 0 Feb  7 01:25 test.log

ここからが本題

hogeユーザは書き込みできないことを確認

# su - hoge
$ touch /var/test/hoge.log
touch: cannot touch `/var/test/hoge.log': Permission denied

グループの確認

# groups app
app : app

# groups hoge
hoge : hoge

hogeユーザをappグループに追加

# usermod -aG app hoge

appグループに書き込み権限が無ければ与える

# ls -ld /var/test
drwxr-xr-x 2 app  app  4096 Feb  7 01:25 test
# chmod -R g+wr /var/test
# ls -ld /var/test
drwxrwxr-x 2 app  app  4096 Feb  7 01:25 test

追加確認

# groups hoge
hoge : hoge app

hogeユーザが書き込めるようになったことを確認

# su - hoge
$ touch /var/test/hoge.log
$ ll /var/test/
-rw-rw-r-- 1 hoge hoge  0 Feb  7 01:36 hoge.log
-rw-rw-r-- 1 app  app  28 Feb  7 01:26 test.log

(おまけ) ファイルのグループはディレクトリのグループを継承するようにする

対象ディレクトリにSGIDビットを立てることで可能となる。

実施前

# ls -ld /var/test
drwxrwxr-x 2 app  app  4096 Feb  7 01:25 test

SGIDビットを立てる

# chmod 2774 /var/test

確認

# ls -ld /var/test
drwxrwsr-- 2 app app 4096 Feb  7 01:37 /var/test

ファイルを作る

# su - hoge
$ touch /var/test/hoge2.log
$ ll /var/test/
-rw-rw-r-- 1 hoge app   0 Feb  7 01:37 hoge2.log
-rw-rw-r-- 1 hoge hoge  0 Feb  7 01:36 hoge.log
-rw-rw-r-- 1 app  app  28 Feb  7 01:26 test.log

以上