複数のメンバー、複数のグループで共有可能なフォルダを作成する
member serverの共有フォルダに、windows操作でコントロール可能なサブフォルダを用意してみる
参照先 https://wiki.samba.org/index.php/Shares_with_POSIX_ACLs
https://wiki.samba.org/index.php/Setting_up_a_Share_Using_Windows_ACLs
NFSはmember serverでsmb.confや/shareのACLsを操作して共有フォルダを提供する。
まずはNFSマシンをmember serverに仕立てる。
/etc/hostsと/etc/resolv.confを調整して、
[root@nfs ~]# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.0.11 nfs.sybyl.local nfs
[root@nfs ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search sybyl.local
nameserver 192.168.0.3
[root@nfs ~]#
次に、sambaをインストールしてmember serverにさせます。
samba/Linux参加で示した sssd による方法と、samba/Linux参加/winbinddのwinbindによる方法がありますが、
ここでは winbinid の方法で参加させてみます。
[root@nfs ~]# yum install samba samba-winbind <-- yumのパッケージを利用します
[root@nfs ~]# vi /etc/samba/smb.conf
[global]
workgroup = SYBYL
security = ADS
realm = SYBYL.LOCAL
idmap config SYBYL:backend = ad
idmap config SYBYL:range = 1000-30000
idmap config SYBYL:unix_nss_info = yes <-- backendが[ad]の際、shellやhomedirの値も利用する
idmap config *:range = 30001-30010
idmap config *:backend = tdb
winbind nss info = rfc2307
winbind use default domain = true
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
[root@nfs ~]# net ads join osName=CentOS osVer=7.4 -Uadministrator
Enter administrator's password:
Using short domain name -- SYBYL
Joined 'NFS' to dns domain 'sybyl.local'
[root@nfs ~]#
これでSYBYLドメインに参加した。
認証およびユーザ情報を winbind 経由で引くには authconfig で設定を行う
[root@nfs ~]# authconfig --enablewinbind --enablewinbindauth --update
これでデーモン winbindd が起動します。
確認のためユーザ情報を引いて見ます。
[root@nfs ~]# getent passwd illya
illya:*:1002:3000:Illyasviel von Einzbern:/home/illya:/bin/bash
[root@nfs ~]# getent group fate
fate:x:2000:
[root@nfs ~]#
一方でADDCにてUID,GIDを定義していないユーザは引けない。
[root@nfs ~]# getent passwd administrator
[root@nfs ~]# getent group "domain admins"
留意
idmapのbackendを「rid」に変更すれば、このようなUID,GIDがないアカウントに対しても自動的にIDを振ってくれます。
しかしそれはこのmember serverだけで有効なUID,GIDである。nfsとして他のマシン(windows/Linux)と共有すると同じユーザなのに
参照できないファイル、フォルダが作られる可能性が生じる。
一応、「rid」だからたぶん大丈夫だと思うけど、ユーザ作成時にUID,GIDの定義が不可で既存のリソースとの連携に支障がありえる
っで「共有フォルダ」の作成をwindows操作で作って、グループ、ユーザに権限をアサインするには
「administrator」と「domain admins」のUID,GIDを定義する必要がある。
windwosマシンからドメインのAdministratorでログインして、「ActiveDirectoryユーザとコンピュータ」から定義します。
まず「Domain Admins」を開き、下記のように定義します。
その後、「Administrator」を開き、これも下記のように定義します。
まず管理者権限を有するユーザにSeDiskOperatorPrivilege権限を与える
現在このSeDiskOperatorPrivilege権限を有しているのは
[root@nfs ~]# net rpc rights list privileges SeDiskOperatorPrivilege -U"SYBYL\Administrator"
Enter SYBYL\Administrator's password:
SeDiskOperatorPrivilege:
BUILTIN\Administrators
[root@nfs ~]#
から「Administrators」グループが所有している。これに「Domain Admin」グループも追加します
[root@nfs ~]# net rpc rights grant "SYBYL\Domain Admins" SeDiskOperatorPrivilege -U "SYBYL\administrator"
Enter SYBYL\administrator's password:
Successfully granted rights.
[root@nfs ~]#
そして管理者権限を有するユーザがwindows画面で操作して、作ったフォルダを特定のユーザだけ利用できるようにしてみる。
smb.confに共有フォルダの場所定義を追加して、その設定を反映させる
[root@nfs ~]# mkdir -p /share
[root@nfs ~]# ls -ld /share
drwxr-xr-x 2 root root 6 10月 2 20:45 /share
[root@nfs ~]# cat <<_EOF_>>/etc/samba/smb.conf
[share]
path=/share/
read only=no
inherit acls = yes
_EOF_
[root@nfs ~]# smbcontrol all reload-config
ここでwindowsPCからドメインのadministratorであっても\\nfs\shareにフォルダは追加できない。エラーになります。
ここからACLを付与していきます。
[root@nfs ~]# setfacl -m group::--- /share/
[root@nfs ~]# setfacl -m default:group::--- /share/
[root@nfs ~]# setfacl -m group:"SYBYL\Domain Admins":rwx /share/
[root@nfs ~]# setfacl -m group:"SYBYL\Domain Users":r-x /share/
[root@nfs ~]# setfacl -R -m other::--- /share/
ここで/share/のACLを確認してみます。
[root@nfs ~]# cd /
[root@nfs /]# getfacl share
# file: share
# owner: root
# group: root
user::rwx
group::---
group:domain\040users:r-x
group:domain\040admins:rwx
mask::rwx
other::---
default:user::rwx
default:group::---
default:other::r-x
[root@nfs /]#
ここで再度windowsPCから \\nfs\share に新規フォルダ「emiya」を作成する。
この作ったフォルダ「emiya」のプロパティを開いて、「セキュリティ」タブから利用するユーザを追加して、
権限に「フルコントロール」を与える。
これで、フォルダ「emiya」はユーザ「illya」と「saber」が自由に利用できる。
従来からある方法。こっちの方が単純明快。
グループ fate に所属するユーザだけが利用できる共有フォルダを作ってみる
[root@nfs ~]# mkdir -p /fate
[root@nfs ~]# chmod 770 /fate
[root@nfs ~]# chgrp fate /fate
[root@nfs ~]# cat <<_EOF_>>/etc/samba/smb.conf
[fate]
path=/fate/
read only = no
valid users = +SYBYL\fate
_EOF_
[root@nfs ~]# smbcontrol all reload-config
この場合、ドメインのAdministratorで調整は出来ません。。。
samba member serverマシン内でsetfaclコマンドを駆使して調整するしかないです。
ユーザ単位でACLを行う場合はかなり面倒かと思う
まず共有フォルダを用意して、そのフォルダの所有権を代える。ここではnobodyのgroupを設定
[root@nfs ~]# mkdir -p /data
[root@nfs ~]# chmod 770 /data
[root@nfs ~]# chgrp nobody /data
[root@nfs ~]# cat <<_EOF_>>/etc/samba/smb.conf
[data]
path=/data/
read only = no
force user = nobody
force group= nobody
_EOF_
[root@nfs ~]# smbcontrol all reload-config
これでドメインユーザなら誰でも \\nfs\data\ にアクセスできて、そこに置いたファイルは nobody:nobody の所有物になる。
パスワードなしで共有可能なフォルダ。
具体的には
を作る。先ずフォルダを用意して、誰でも書き込み可能とする
*後述の特定のユーザ所有物(nobody)にしたい場合、chown nobody /share/imageとする
[root@nfs ~]# mkdir /image
[root@nfs ~]# chmod 777 /image
[root@nfs ~]# vi /etc/samba/smb.conf
[global]
:
map to guest = Bad Password
guest account = nobody
:
[image]
path=/image/
read only = no
guest ok = yes
[root@nfs ~]# smbcontrol all reload-config
*共有フォルダに置かれたフォルダ、ファイルの所有者は認証を経ていればそのユーザの所有物になる
認証を経由しないならnobodyの所有となる
特定のユーザの所有物に固定したいなら、force user、force groupを適用する
要注意 map to guestはActiveDirectoryドメインコントローラでは機能しない。メンバサーバのみ有効
参照:https://wiki.samba.org/index.php/FAQ#How_Do_I_Enable_Guest_Access_to_a_Share_on_a_Samba_AD_DC.3F
既に smb が稼働しているのなら
[root@nfs ~]# smbcontrol all reload-config
と設定ファイルを再読み込みする。