Introduction
前回は、System.IO.DirectoryInfoを使って、ファイルの一覧を列挙してみました。
今回はファイルへのアクセス可否についてです。
May I open this file?
Windows上のC#なら、ファイルに書き込みできるかどうか等は、実際にファイルへのストリームを作成してみたりします。
1 | private bool CanRead(string path) |
では、Linuxでこれを実施するとどうなるでしょう? ありがちなのは、所有者がrootになっていて、root以外が読み込みも出来ないパターンです。
例えば、**/etc/sudo.conf** がそうです。
1 | ls -la /etc/sudo.conf |
なので、こんなソースを用意してみました。
1 | using System; |
引数で指定したファイルを開くことが出来れば、**’’ can be opened!!** と表示されます。
ファイルを開こうとして、例外を投げれば、開けなかった理由が表示される、というシンプルなテストです。
ソースを記述したら、プロジェクトフォルダで
1 | dotnet restore |
を実行します。
これでビルドが成功するはずです。
まずは、一般ユーザで確認します。
which でdotnetコマンドの場所を調べているのは、rootユーザで dotnet までのパスが通っていなかったので、実施しているだけです。
パスが通っているなら不要です。
引数のファイルパスは dotnet run の直後に追記することで指定できます。
1 | dotnetコマンドの場所を調べます |
アクセスが拒否されています。
続いて、rootで確認します。
1 | sudo /opt/rh/rh-dotnetcore11/root/usr/bin/dotnet run /etc/sudo.conf |
無事にアクセスできました。
Conclusion
基本的なアクセス権も.NET Coreで対処できそうです。
次回は、もう少し高度な方法で読み書きできるかを調べてみたいと思います。