はじめに
やりたい事は,タイトルの通りHyper-Vで動いているUbuntu18.04とその母艦であるWindows Server 2019とで共通のディレクトリ・ファイルをユーザを切り分けつつ参照出来るようにする事です.
詳細としては,前提として
- Windows Server 2019側の
D:\Work\[user_name]\
にユーザ毎の作業用ディレクトリがある
状況において,
- Ubuntu18.04側で動いているJupyterHub環境に接続した際のルート下にこの作業用ディレクトリをマウント
がやりたい事です.
Windows Server 2019でHyper-V上のUbuntu18.04にJupyterHub環境を構築
の通り,「JupyterHub環境に接続した際のルート」は~/notebooks
になっています.
微妙にネットワークを介してしまいますが,手っ取り早く,共有ディレクトリにしてcifsでマウントしていきます.
適当にやってしまったので,メモに漏れやミスがあるかも知れませんm(_ _)m
Windows側の設定
単純なファイル共有設定作業です.
権限周りだけ気を付けます.
共有設定
上述の通り,今回はD:\Work\
以下を共有したいので,こちらに共有設定をかけます.
ググるとGuestアクセス可能にしてしまうとかパスなしにするとか出てきますが,今回はサーバ用途なので流石にそれは回避…
本共有作業専用のユーザ(以降[share_name]とします)を追加し,そちらにD:\Work\
およびD:\Work\[user_name]\
群への共有アクセス許可を与えます.
(当然[user_name]で共有をかけても良いのですが,fstabの仕様上パスワードを平文で保持しないといけないようなので専用に用意します.)
これで[share_name]さんを使って\\[IPアドレスorホスト名]\Work
にアクセス出来るようになります.
もちろん[share_name]さんはD:\Work\[user_name]\
群全てにアクセス出来る状態なので,Ubuntu側でユーザ毎の切り分けをします.
パーミッション設定
この環境ではD:\Work\[user_name]\
群はD:\Work\
の設定を継承しておらず,
- 各ユーザだけがアクセス出来る
- ディレクトリの削除は出来ない
としてある(そう挙動する…はず)ので,[share_name]さんにも同様の権限を与えます.
Ubuntu側の設定(mount)
今回は/mnt/Work
へマウントします.
sudo mount
でとりあえず全体のマウント確認
passwordを直書きしてしまいますが,
$ sudo mkdir /mnt/Work
$ sudo mount -t cifs -o vers=3.0,username=[share_name],password=[share_name pass] //[IPアドレス]/Work /mnt/Work
でマウント出来るか確認.
確認したらumount
.
ユーザ毎に権限を付与した形でのマウント確認
大量に居るならスクリプトにしてしまうべき作業.
ユーザ毎マウントポイント作成
$ sudo mkdir /mnt/Work/[user_name1]
$ sudo chown -R [user_name1]:[user_name1] /mnt/Work/[user_name1]
$ sudo mkdir /mnt/Work/[user_name2]
$ sudo chown -R [user_name2]:[user_name2] /mnt/Work/[user_name2]
chownが必要かは未確認です.mount時のuid等で上書きされるかも知れない.
ユーザ毎でのsudo mount
の確認
書いておいてアレですが,全体確認以降は直接fstabでの作業をしているのでこの確認はしてないです.
$ sudo mount -t cifs -o vers=3.0,username=[share_name],password=[share_name pass],uid=[user_name1],gid=[user_name1],file_mode=0600,dir_mode=0700 //[IPアドレス]/Work/[user_name1] /mnt/Work/[user_name1]
$ sudo mount -t cifs -o vers=3.0,username=[share_name],password=[share_name pass],uid=[user_name2],gid=[user_name2],file_mode=0600,dir_mode=0700 //[IPアドレス]/Work/[user_name2] /mnt/Work/[user_name2]
fstabで自動化
$ sudo vi /etc/fstab
で最後に記述していきます.
ログイン情報の別ファイル化
(テスト時には叩いていますが,)
直接passwordをfstabに書くのは(コマンドとして叩かれるのは)アレなので,
$ sudo vi /etc/.workpassword
username=[share_name]
password=[share_name pass]
などと適当なファイルに用意.
fstabへの記述
//[IPアドレス]/Work/[user_name1] /mnt/Work/[user_name1] cifs vers=3.0,credentials=/etc/.workpassword,uid=[user_name1],gid=[user_name1],file_mode=0600,dir_mode=0700 0 0
//[IPアドレス]/Work/[user_name2] /mnt/Work/[user_name2] cifs vers=3.0,credentials=/etc/.workpassword,uid=[user_name2],gid=[user_name2],file_mode=0600,dir_mode=0700 0 0
こんな感じで各ユーザだけがアクセス出来るように設定.
Ubuntu側の設定(bind)
冒頭に書いた通り,JupyterHubで設定したルートディレクトリからアクセス出来るよう,マウントし直します.
~/notebooks
の直下にてwin_work
という名前でアクセスできるようにしました.
マウントポイント作成
$ sudo mkdir /home/[user_name1]/notebooks/win_work
$ sudo chown -R [user_name1]:[user_name1] /home/[user_name1]/notebooks/win_work
$ sudo mkdir /home/[user_name2]/notebooks/win_work
$ sudo chown -R [user_name2]:[user_name2] /home/[user_name2]/notebooks/win_work
chownが必要かは未確認です.mount時のuid等で上書きされるかも知れない.
fstabでのbind
bindをfstabに追記します.
/mnt/Work/[user_name1] /home/[user_name1]/notebooks/win_work auto bind 0 0
/mnt/Work/[user_name2] /home/[user_name2]/notebooks/win_work auto bind 0 0
Jupyterからの確認
うまく出来ていれば,
このように直下に見えているはず.
また,Terminal接続したとしても,Windows側の設定同様に他のユーザのディレクトリは見られないはず.
~$ cd /mnt/Work/
/mnt/Work/$ ls
[user_name1] [user_name2]
/mnt/Work/$ cd [user_name2]/
bash: cd: [user_name2]/: 許可がありません
/mnt/Work/$ cd [user_name1]/
/mnt/Work/[user_name1]/$
おまけ:拡張セッションモードでのファイル共有
今回のサーバ用途な目的にはそぐわないですが,
単に手元でHyper-V上OSとファイル共有したいだけであれば,
Windows Server 2019でHyper-V上にUbuntu18.04をインストール
でlinux-vm-toolsを用いて使えるようにしたEnhanced Session Modeの機能を使うのが手っ取り早いです.
「セッション設定の編集」から,
ローカルリソースに共有したいものを選んであげれば,
このように
/home/[ログインユーザ名]/shared-drives
へマウントされています.