Azure Linux VMでFile storageをマウントしても権限は後から変更できない

#[結論]
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

使用環境はこちら

```shell-session
[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)
```

まずは前提パッケージのインストール

```shell-session
[root@standard-c74 ~]# sudo yum install samba-client samba-common cifs-utils
```

続いてマウントするためのコマンドを取得。
Azureポータル > すべてのサービス > ストレージアカウントストレージアカウント > ストレージアカウント名
 > ファイル > マウントしたい共有名(なければ新規作成する) > "接続" > "Linuxからの接続"
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125247/1282f1f7-4751-6904-1964-b834192e22df.png)

マウントしたいディレクトリを作成して、マウント。パスワードは伏せています

```shell-session
[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
```

結果の確認。最後の行で、マウントできているのがわかる

```shell-session
[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のようだ。

```shell-session
[root@standard-c74 ~]# touch /mountshare/hoge
[root@standard-c74 ~]# ls -ltr /mountshare/hoge
-rwxrwxrwx. 1 root root 0 Feb 27 12:58 /mountshare/hoge
```

権限を変えてみるも、変わらないことがわかる。

```shell-session
[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にしているような記載が見える

```shell-session
[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
```

これ=> <font color="Red">dir_mode=0777,file_mode=0777`</font>

mount.cifsのドキュメントを読んでみる。
>https://linux.die.net/man/8/mount.cifs

dir_modeを変更することでディレクトリのアクセス権限、file_modeを変更することでファイルのアクセス権限を指定できるようだ。
また、uid, gidを設定することで所有者や所有グループも指定できるようだ。

たとえば、所有者をnmikuniというユーザにしてアクセス権をディレクトリは755, ファイルは744にしてみる(一旦アンマウントするのを忘れずに)

```shell-session
[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