質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

3回答

373閲覧

Linuxの共有グループ設定

Obayashi

総合スコア77

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2017/07/29 16:46

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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
raccy

総合スコア21733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SGIDビットを立てておけばよいような
chmod 2770 /data/group_ab

特殊なアクセス権:Linuxマイスター養成講座

sgid

 sgidはset group idの略で,複数ユーザーで共有するディレクトリなどで利用されるアクセス権です。
sgidが設定されているディレクトリにファイルを作成すると,そのディレクトリのグループがそのままそのファイルのグループとして適用されます。このため,あるグループに属する複数ユーザーでファイルを共有する場合,ファイル共有用のディレクトリにそのグループのアクセス権限を与えておけばよいでしょう

投稿2017/07/29 21:43

編集2017/07/29 22:07
dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  1. group_abというグループを作りuser_auser_bgroup_abに所属させる
  2. /data/group_abのグループをgroup_abにする
  3. /data/group_abのパーミッションを770にする
  4. 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

suzukis

総合スコア1449

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問