Izin berkas menentukan siapa yang boleh membaca, menulis, atau mengeksekusi sebuah berkas. Di Linux, izin tersebut dikelola lewat mode sembilan bit yang biasa diatur dengan perintah chmod, misalnya chmod 600 rahasia.txt agar hanya pemilik yang boleh membaca dan menulis. Sejak .NET 7, C# menyediakan padanan langsungnya: enum UnixFileMode beserta pasangan method File.SetUnixFileMode dan File.GetUnixFileMode.

Mode Unix dalam Bentuk Enum #

UnixFileMode memuat sembilan bendera — UserRead, UserWrite, UserExecute, serta padanan Group dan Other-nya — ditambah SetUser, SetGroup, dan StickyBit. Bendera digabung dengan operator |: kombinasi UserRead | UserWrite bernilai 600 dalam notasi oktal, persis seperti chmod 600. Kedua method hanya berlaku pada Linux dan macOS; pada Windows panggilannya melempar PlatformNotSupportedException.

Contoh Mengatur dan Memeriksa Mode #

Contoh berikut mengunci berkas agar hanya pemilik yang boleh membaca dan menulis, lalu memeriksa hasilnya:

csharp
string dir = Path.Combine(Path.GetTempPath(), "verify-6c", "file-permissions");
Directory.CreateDirectory(dir);
string path = Path.Combine(dir, "rahasia.txt");
File.WriteAllText(path, "isi terbatas");

File.SetUnixFileMode(path, UnixFileMode.UserRead | UnixFileMode.UserWrite);

UnixFileMode mode = File.GetUnixFileMode(path);
Console.WriteLine($"UserWrite: {mode.HasFlag(UnixFileMode.UserWrite)}");
Console.WriteLine($"GroupRead: {mode.HasFlag(UnixFileMode.GroupRead)}");
Console.WriteLine($"OtherExecute: {mode.HasFlag(UnixFileMode.OtherExecute)}");
Console.WriteLine($"Oktal: {Convert.ToString((int)mode, 8)}");

Output yang Dihasilkan:

text
UserWrite: True
GroupRead: False
OtherExecute: False
Oktal: 600

Mari kita bedah baris demi baris:

  1. File.SetUnixFileMode(path, ...): menimpa seluruh mode berkas dengan kombinasi dua bendera; grup dan pengguna lain tidak menerima izin apa pun.
  2. File.GetUnixFileMode(path): membaca kembali mode saat ini langsung dari sistem berkas.
  3. mode.HasFlag(...): memeriksa satu bendera; GroupRead bernilai False karena tidak termasuk kombinasi yang diset.
  4. Convert.ToString((int)mode, 8): menampilkan nilai dalam basis 8; hasil 600 sama persis dengan mode yang dihasilkan perintah chmod 600.

Windows: FileSecurity dan ACL #

Windows tidak memakai bit mode Unix, melainkan Access Control List (ACL). Pengaturannya dilakukan lewat class FileSecurity di namespace System.Security.AccessControl: ambil objeknya dengan File.GetAccessControl, tambahkan FileSystemAccessRule untuk pengguna tertentu, lalu terapkan kembali dengan File.SetAccessControl. Model ACL lebih rinci karena izinnya dapat disetel per pengguna dan per grup, tetapi API-nya hanya tersedia pada Windows.