Edited at

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

More than 1 year has passed since last update.


[結論]

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ポータル > すべてのサービス > ストレージアカウントストレージアカウント > ストレージアカウント名


ファイル > マウントしたい共有名(なければ新規作成する) > "接続" > "Linuxからの接続"

image.png


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

[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のドキュメントを読んでみる。


https://linux.die.net/man/8/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