予期しないファイルアクセス

予期しないファイルアクセス

私はWindowsのサブシステムとしてLinuxを使用しています。

bash端末を介してファイルを生成する際に問題があります。コマンドを実行するtouch foo.txtls -l foo.txt。すべてのアクセス権が有効になり、変更できません。

-rwxrwxrwx foo.txt

解決策はありますか?

また、0750権限を持つファイルを生成するためにCプログラムを作成しようとしましたが、まだ同じ問題が発生します。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main() {
  umask(0);
  int fd = open("foo.txt", O_RDONLY | O_CREAT | O_EXCL, 0750);
  if(fd < 0) perror("foo.txt");
  close(fd);
}

プログラムをコンパイルした後:

-rwxrwxrwx foo.txt

ところで、仮想マシンでLinuxを使用するとうまくいきます。

ベストアンサー1

バラよりこのWSL文書Windows ドライブと WSL 間の権限をマップする方法に関する情報。デフォルトでは、ファイルに対するWindows権限が表示され、chmodは実際には多くのことを行いません。

しかし運転はできるメタデータサポートとしてインストールすると、WSLはWindows権限ではなくメタデータにある権限を適用します。これにより、WSLはLinux権限をWindowsドライブ上のファイルにマップできます。

メタデータサポートを使用してWindowsドライブを自動的にマウントするには:

  • /etc/wsl.confWSLインスタンスで編集または作成
  • 次の行を追加します。
    [automount]
    enabled = true
    options = "metadata,umask=22,fmask=11"
    
  • WSLインスタンスの終了
  • wsl --terminate <distroname>PowerShellまたはcmdを使用してWSLインスタンスを終了します。
  • WSLインスタンスの再起動

それからtouch結果は.rw-r--r--あり、コード結果は期待される結果.rwxr-x---(750)です。

少なくとも、私はWSL2 / Ubuntu 20.04インスタンス(テストアプリケーションを含む)でテストして検証しました。

さらに、WSL2 は WSL1 と比較して Windows ドライブでパフォーマンスが非常に低下します。このドライブでファイル集約的な操作を実行している場合は、可能であればWSL1インスタンスを使用してください。または、WSL2でext4 fsを使用してください。

おすすめ記事