Woof.LinuxAdmin
5.2.0
Prefix Reserved
See the version list below for details.
dotnet add package Woof.LinuxAdmin --version 5.2.0
NuGet\Install-Package Woof.LinuxAdmin -Version 5.2.0
<PackageReference Include="Woof.LinuxAdmin" Version="5.2.0" />
<PackageVersion Include="Woof.LinuxAdmin" Version="5.2.0" />
<PackageReference Include="Woof.LinuxAdmin" />
paket add Woof.LinuxAdmin --version 5.2.0
#r "nuget: Woof.LinuxAdmin, 5.2.0"
#:package Woof.LinuxAdmin@5.2.0
#addin nuget:?package=Woof.LinuxAdmin&version=5.2.0
#tool nuget:?package=Woof.LinuxAdmin&version=5.2.0
Woof.LinuxAdmin
.NET extension created by CodeDog
Distributed under MIT License. (c)2021 by CodeDog, All rights reserved.
About
Some advanced application features require some system administration tasks to be performed before they can be used.
The common tasks are:
- Installing and controlling system services,
- Using per-user or per-system data protection,
- Data protection key management,
- System user management,
- Application permission management.
When the code is executed with administrative privileges, it makes sense that it could configure the target system automatically without requiring much additional system administration.
As the .NET platform already contains most of the tools itself,
they are currently available for Windows OS only.
Woof.LinuxAdmin provides unified API for both Linux and Windows.
Linux user information, group information, file system entry information:
they are all supported by .NET only partially, translated to their
Windows equivalents.
Woof.LinuxAdmin provides native Linux types:
UserInfo,GroupInfo,StatInfo.
The types are fully managed ones, not directly compatible with the corresponding Linux kernel structures.
Linux file system entry binary mode IS identical with the uint type used in the kernel.
Of course all file system manipulation tools can operate both on single entries and entire directory trees.
To register, unregister or control system services use Woof.ServiceInstaller module.
To manage protected or plain JSON configuration files use Woof.Config module.
They alredy have Woof.LinuxAdmin dependency. It is necessary because both tasks
require some target system configuration access.
They can be safely used both on Linux and Windows.
Design
The core of the library is Linux native Syscall class.
It contains the signatures for libc system calls. There is a minimalistic
set of features used, just to enable basic Linux file system operations.
Original naming convention is dropped for .NET naming and signatures style.
The managed functions sit in Linux static class.
There's also a FileSystem static class containing CopyDirectoryContent()
helper.
For convenience, there is Shell class with Exec method to simplify
executing shell commands and getting their output.
The functions mostly return bool values indicating that the operation
was successful.
AddSystemUserAsync(), AddSystemGroupAsync() methods
The only asynchronous methods in Linux static class.
They are asynchronous since they use shell to call useradd and groupadd.
Chmod(), ChmodR(), Chown(), ChownR()
Chmod changes permissions on a file system entry.
You can provide permissions as follows:
- octal string, like "664" (absolute read/write for user and group, read for others)
- relative string, like "ug+rw,o-w", "+x" and so on,
- binary - as
uintLinux mode.
Conversions between string, uint and Permissions are made implicitly.
Special permission "X" also works, setting executable bit if the entry is a directory or has at least one executable bit set.
It is important, that the execute permissions cannot be set on unreadable entries. When the entry doesn't have a read permission for the specified target it's execute bit will not be set for that target.
Chown changes an owner of a file system entry.
To change permissions and / or owner for all entries in a directory including
the directory itself use ChmodR() and ChownR() methods.
Other tools
For the administration it's useful to check if the program has administrative
privileges. To do so use CurrentUser.IsAdmin property.
You can even check if the program was run on Linux with sudo command,
and not from the root account, to do so get the CurrentUser.IsSudo property.
To get detailed information about the current Linux user use:
Linux.CurrentProcessUser,CurrentUser.BehindSudo
It can be useful to access the user's Directory (Linux home).
Use StatInfo for detailed Linux file system entry properties,
use UserInfo for detailed user information,
user GroupInfo for detailed group information including its members.
Linux.HomeDirectory contains home directory of the current user,
also in case if the user run the program with sudo.
You can also resolve paths containing ~ using the HomeDirectory property
with Linux.ResolveUserPath().
Performance hint
To set absolute permissions use octal strings (or binary) to skip calling
stat on each entry.
Security
The package does not use unsafe code and no p/invoke implementation details
are public. However, caution is advised when using Shell.ExecAsync, because when running
on administrative account it gives the application the full control over the target system.
Compatibility
The package is compatible with .NET 5.0 or newer. Tested on Ubuntu 20 and Windows 11. In case of a compatibility issue - create an issue on GitHub.
This package is not compatible with MacOS. If the MacOS support is needed, please create an issue on GitHub.
Disclaimer
Woof Toolkit is a work in progress in constant development, however it's carefully maintained with production code quality.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net5.0
- Microsoft.AspNetCore.DataProtection.Extensions (>= 6.0.0)
- System.Security.Cryptography.ProtectedData (>= 6.0.0)
- System.Security.Principal.Windows (>= 5.0.0)
- Woof.Assembly (>= 5.0.1)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Woof.LinuxAdmin:
| Package | Downloads |
|---|---|
|
Woof.ServiceInstaller
Registers and unregisters a project executable as either Windows Service or systemd deamon. Works both on Windows and Linux. |
|
|
Woof.DataProtection.Linux
Provides data protection API for Linux. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 9.0.0 | 286 | 2/21/2025 | |
| 7.0.0 | 410 | 8/6/2023 | |
| 6.2.0 | 888 | 2/20/2022 | |
| 6.1.2 | 836 | 11/27/2021 | |
| 6.1.1 | 1,953 | 11/26/2021 | |
| 6.1.0 | 1,622 | 11/26/2021 | |
| 6.0.3 | 886 | 11/15/2021 | |
| 6.0.2 | 620 | 11/15/2021 | |
| 6.0.1 | 1,130 | 11/9/2021 | |
| 6.0.0 | 672 | 11/9/2021 | |
| 5.2.1 | 793 | 11/8/2021 | |
| 5.2.0 | 702 | 11/8/2021 | |
| 5.1.1 | 1,055 | 11/5/2021 | |
| 5.1.0 | 692 | 11/4/2021 | |
| 5.0.5 | 783 | 11/1/2021 | |
| 5.0.4 | 654 | 11/1/2021 | |
| 5.0.3 | 830 | 10/31/2021 | |
| 5.0.2 | 913 | 10/30/2021 | |
| 5.0.1 | 739 | 10/30/2021 | |
| 5.0.0 | 754 | 10/28/2021 |
New API, added DataProtection, CurrentUser and OS.