Linuxマシンを3人で共有しており、以下のようにPermissionを設定したいと思っています。
Linuxでのファイル共有をしたことがないので、基本的なことかもしれませんがやり方がわかりません。
共有は、Sambaでもやりたいと思っております。
なお、指定ディレクトリ以下に新規ファイルやディレクトリが作成されたら
同じPermissionが引き継がれるようにしたいです。
方法をご教授頂けたら幸いです。
user: user_a, user_b, user_c
/data/group_ab
user_a,user_bのみrwx可能
/data/group_ac
user_a,user_cのみrwx可能
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
必要な分だけグループを作成してsetgidした方が簡単ですが、組合せが多すぎる等の理由でグループを作成したくない場合についての方法を述べます。
Linuxには0644や0755のようなmodeによるアクセス制限以外にACLの機能があります。ACLの機能を使用するにはファイルシステムで拡張属性であるxattr及びaclが有効でなければなりません。また、NFS等のファイル共有領域の場合は、NFS等でACLの機能が有効になっていなければ使えません(そもそもACL未対応のものもあります)。最近のLinuxで使用されている、ext4、xfs、btrfsではデフォルトで有効の場合が多いですので、気にする必要はありませんが、もし、下記のコマンドについてエラーになるようであれば、ファイルシステムで有効になっている機能やマウントオプションについて見直してください。
ACLの操作にはgetfacl
コマンドとsetfacl
コマンドを使用します。CentOS7であればaclパッケージを入れるとインストールされますので、なければインストールしておいてください。
では、usersグループにuser_a、user_b、user_cが居たとして、実際にフォルダを作って行く処理を書いていきます。/dataディレクトリは既に存在し、パーミッションはroot:root 755であるという前提です。操作は全てrootで行います。
[root@localhost ~]# mkdir /data/group_ab [root@localhost ~]# chmod 700 /data/group_ab [root@localhost ~]# setfacl -m u:user_a:rwx /data/group_ab [root@localhost ~]# setfacl -m u:user_b:rwx /data/group_ab [root@localhost ~]# setfacl -m d:u:user_a:rwx /data/group_ab [root@localhost ~]# setfacl -m d:u:user_b:rwx /data/group_ab [root@localhost ~]# mkdir /data/group_ac [root@localhost ~]# chmod 700 /data/group_ac [root@localhost ~]# setfacl -m u:user_a:rwx /data/group_ac [root@localhost ~]# setfacl -m u:user_c:rwx /data/group_ac [root@localhost ~]# setfacl -m d:u:user_a:rwx /data/group_ac [root@localhost ~]# setfacl -m d:u:user_c:rwx /data/group_ac
getafclで設定の結果を見てみます。
[root@localhost ~]# getfacl /data getfacl: Removing leading '/' from absolute path names # file: data # owner: root # group: root user::rwx group::r-x other::r-x [root@localhost ~]# getfacl /data/group_ab getfacl: Removing leading '/' from absolute path names # file: data/group_ab # owner: root # group: root user::rwx user:user_a:rwx user:user_b:rwx group::--- mask::rwx other::--- default:user::rwx default:user:user_a:rwx default:user:user_b:rwx default:group::--- default:mask::rwx default:other::--- [root@localhost ~]# getfacl /data/group_ac getfacl: Removing leading '/' from absolute path names # file: data/group_ac # owner: root # group: root user::rwx user:user_a:rwx user:user_c:rwx group::--- mask::rwx other::--- default:user::rwx default:user:user_a:rwx default:user:user_c:rwx default:group::--- default:mask::rwx default:other::---
この状態でuser_aでファイルとディレクトリを作成してみます。
[root@localhost ~]# su - user_a [user_a@localhost ~]$ touch /data/group_ab/create_a_file [user_a@localhost ~]$ mkdir /data/group_ab/create_a_dir [user_a@localhost ~]$ touch /data/group_ac/create_a_file [user_a@localhost ~]$ mkdir /data/group_ac/create_a_dir
group_abの方のファイルとディレクトリgetfaclで確認してみましょう。
[user_a@localhost ~]$ getfacl /data/group_ab/create_a_file getfacl: Removing leading '/' from absolute path names # file: data/group_ab/create_a_file # owner: user_a # group: users user::rw- user:user_a:rwx #effective:rw- user:user_b:rwx #effective:rw- group::--- mask::rw- other::--- [user_a@localhost ~]$ getfacl /data/group_ab/create_a_dir getfacl: Removing leading '/' from absolute path names # file: data/group_ab/create_a_dir # owner: user_a # group: users user::rwx user:user_a:rwx user:user_b:rwx group::--- mask::rwx other::--- default:user::rwx default:user:user_a:rwx default:user:user_b:rwx default:group::--- default:mask::rwx default:other::---
ファイル側はuser_aとuser_bだけがrw-です。ACL上はrwxですがmodeのuserがrw-のため、実際(effective)はrw-になります。ディレクトリもuser_aとuser_bだけがrwxです。そして、このデフォルト設定はこのディレクトリ配下にも適用されます。これがACLとdefaultの使い方で、user_aもuser_bも問題なくアクセス可能にあります。対して、user_cは/data/group_abにアクセスできないのはもちろんですが、/data/group_abについてuser_cがアクセスできるようになっても/data/group_ab/create_a_fileと/data/group_ab/create_a_dirはアクセスできるようになりません。
group_acもuser_aとuser_cがアクセスでき、user_bはアクセスできません。実際に作って試して見てください。
以上になりますが、一つだけ注意点です。ACLのdefaultはファイルやディレクトリの作成時にのみ適用されます。後から親ディレクトリのdefaultを変更しても、既に存在するファイルやディレクトリへは反映されません。WindowsのNTFS ACLのデフォルト継承とは動作が異なりますので、ご注意ください。
なお、Sambaからどのように見えるかというとですが、Sambaも正しく設定すれば、このACLの機能を使って複数のユーザーへ権限へ与える等ができます。こちらも、Windowsのファイルサーバーと全く同じになるわけではありませんので、ご注意ください。
動作検証はCentOS7で行いました。他のディストリビューションではメッセージの一部が異なる場合があります。
投稿2017/07/30 03:34
編集2017/07/30 03:38総合スコア21733
0
SGIDビットを立てておけばよいような
chmod 2770 /data/group_ab
sgid
sgidはset group idの略で,複数ユーザーで共有するディレクトリなどで利用されるアクセス権です。
sgidが設定されているディレクトリにファイルを作成すると,そのディレクトリのグループがそのままそのファイルのグループとして適用されます。このため,あるグループに属する複数ユーザーでファイルを共有する場合,ファイル共有用のディレクトリにそのグループのアクセス権限を与えておけばよいでしょう
投稿2017/07/29 21:43
編集2017/07/29 22:07総合スコア3939
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
group_ab
というグループを作りuser_a
、user_b
をgroup_ab
に所属させる/data/group_ab
のグループをgroup_ab
にする/data/group_ab
のパーミッションを770にする- sambaの
/data/group_ab
の共有設定に以下を追加する
force group = group_ab create mask = 660 directory mask = 770 force create mode = 660 force directory mode = 770 valid users=@group_ab
group_acも同様です。
試してないので間違ってるかも知れません。テストしてください。
投稿2017/07/30 02:38
総合スコア1449
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。