#[結論]
Azure Linux VMではAzure File Storage(ファイルストレージ)をcifs mountができるが、cifs mountの仕様上、後から権限や所有者を変更することはできない
#[検証]
Linux VMにAzure File Storageをマウントする方法はこちらから
Linux で Azure Files を使用する https://docs.microsoft.com/ja-jp/azure/storage/files/storage-how-to-use-files-linux
使用環境はこちら
[root@standard-c74 ~]# uname -r
3.10.0-693.11.6.el7.x86_64
[root@standard-c74 ~]# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
まずは前提パッケージのインストール
[root@standard-c74 ~]# sudo yum install samba-client samba-common cifs-utils
続いてマウントするためのコマンドを取得。
Azureポータル > すべてのサービス > ストレージアカウントストレージアカウント > ストレージアカウント名
マウントしたいディレクトリを作成して、マウント。パスワードは伏せています
[root@standard-c74 ~]# mkdir /mountshare
[root@standard-c74 ~]# sudo mount -t cifs //standarddiag392.file.core.windows.net/fileshare /mountshare/ -o vers=3.0,username=standarddiag392,password=xxxxxxxxxxxxxxxxxxxxxx,dir_mode=0777,file_mode=0777,sec=ntlmssp
結果の確認。最後の行で、マウントできているのがわかる
[root@standard-c74 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 30929148 1252536 29676612 5% /
devtmpfs 8196964 0 8196964 0% /dev
tmpfs 8207772 0 8207772 0% /dev/shm
tmpfs 8207772 24876 8182896 1% /run
tmpfs 8207772 0 8207772 0% /sys/fs/cgroup
/dev/sda1 508580 80480 428100 16% /boot
/dev/sdb1 32895696 49180 31152468 1% /mnt/resource
tmpfs 1641556 0 1641556 0% /run/user/1000
//standarddiag392.file.core.windows.net/fileshare 5368709120 0 5368709120 0% /mountshare
適当にファイルを作ってみる。権限は777で持ち主はrootのようだ。
[root@standard-c74 ~]# touch /mountshare/hoge
[root@standard-c74 ~]# ls -ltr /mountshare/hoge
-rwxrwxrwx. 1 root root 0 Feb 27 12:58 /mountshare/hoge
権限を変えてみるも、変わらないことがわかる。
[root@standard-c74 ~]# chmod 755 /mountshare/hoge
[root@standard-c74 ~]# ls -ltr /mountshare/hoge
-rwxrwxrwx. 1 root root 0 Feb 27 12:58 /mountshare/hoge
#[原因]
改めてマウントしたときのコマンドを確認してみると、権限を777にしているような記載が見える
[root@standard-c74 ~]# sudo mount -t cifs //standarddiag392.file.core.windows.net/fileshare /mountshare/ -o vers=3.0,username=standarddiag392,password=xxxxxxxxxxxxxxxxxxxxxx,dir_mode=0777,file_mode=0777,sec=ntlmssp
これ=> dir_mode=0777,file_mode=0777`
mount.cifsのドキュメントを読んでみる。
dir_modeを変更することでディレクトリのアクセス権限、file_modeを変更することでファイルのアクセス権限を指定できるようだ。
また、uid, gidを設定することで所有者や所有グループも指定できるようだ。
たとえば、所有者をnmikuniというユーザにしてアクセス権をディレクトリは755, ファイルは744にしてみる(一旦アンマウントするのを忘れずに)
[root@standard-c74 ~]# id nmikuni
uid=1000(nmikuni) gid=1000(nmikuni) groups=1000(nmikuni)
[root@standard-c74 ~]# sudo mount -t cifs //standarddiag392.file.core.windows.net/fileshare /mountshare/ -o vers=3.0,username=standarddiag392,password=xxxxxxxxxxxxxxxxxxxxxx,dir_mode=0755,file_mode=0744,sec=ntlmssp,uid=1000,gid=1000```
ディレクトリの中身を増やして、再度確認。
```shell-session
[root@standard-c74 ~]# ls -ltr /mountshare
total 0
-rwxr--r--. 1 nmikuni nmikuni 0 Feb 27 12:58 hoge
drwxr-xr-x. 2 nmikuni nmikuni 0 Feb 27 13:17 foodir
変わっていることが確認できた。しかし、権限は一律であり、マウントオプションで「見え方」が変わるだけである。
#[まとめ]
Azure Linux VMでAzure File Storageをcifsマウントする際は、mountする際に権限や所有者を設定できるものの、後から変更することができない。
しかしながら、一律の権限でよければ以下のパラメータを指定することで設定ができる。
- dir_mode
- file_mode
- uid
- gid