ユーザをグループに追加することで別ユーザのディレクトリに書き込めるようにした話
グループに追加することで書き込み権限を得る話
やりたいこと
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
以上