Rebex File Server
SFTP, SCP and SSH server library for .NET
Download 30-day free trial Buy from $349More .NET libraries
-
Rebex SFTP
.NET SFTP client
-
Rebex FTP
.NET FTP client
-
Rebex Total Pack
All Rebex libraries together
Back to feature list...
Access control
On this page:
Unrestricted file access
Each authenticated user can access a part of the file system specified by their virtual root directory. By default, Rebex File Server doesn't impose any additional restrictions.
However, OS-level access rights still apply. Since all File Server users are virtual, they access the designated subtree of the filesystem as the account under whom the server process is running. Limiting access to this account effectively limits virtual user accounts as well.
// add a virtual user that can access the directory tree under 'c:\data\john'
server.Users.Add("john", "password", @"c:\data\john");
' add a virtual user that can access the directory tree under 'c:\data\john'
server.Users.Add("john", "password", "c:\data\john")
Disabling file access
It's even possible to disable filesystem access completely - to do this, just don't specify any virtual root directory. Users with no filesystem access won't be able to connect with SFTP, but they can still use the virtual shell (just with no filesystem access).
Declaring a user with no filesystem access might sound like a strange idea, but it can actually be useful in some scenarios - although the user can't access any files, he can still execute custom commands. If all you need is to provide an SSH shell access with several commands, this is the way to go.
// add a virtual user with no filesystem access
// (this means no SCP support)
server.Users.Add("bob", "password");
// only bind virtual shell
server.Bind(FileServerProtocol.Shell);
// implement custom shell command 'date'
server.ShellCommand += (sender, e) =>
{
if (e.Command == "date")
e.WriteLine(DateTime.UtcNow);
};
' add a virtual user with no filesystem access
' (this means no SCP support)
server.Users.Add("bob", "password")
' only bind virtual shell
server.Bind(FileServerProtocol.Shell)
' implement custom shell command 'date'
AddHandler server.ShellCommand,
Sub(sender, e)
If e.Command = "date" Then
e.WriteLine(DateTime.UtcNow)
End If
End Sub
Custom file access authorization
To restrict user's file access rights, use PathAccessAuthorization
event.
It's raised every time a user attempts an IO operation that needs to be authorized,
making it possible to accept or deny the operation.
// register PathAccessAuthorization event
server.PathAccessAuthorization += (sender, e) =>
{
// completely deny access to "/no-access" directory and to its subtree
if (e.Path.StartsWith("/no-access", StringComparison.OrdinalIgnoreCase))
{
// deny access
e.Deny();
return;
}
// guest user has read-only access
if (e.User.Name == "guest")
{
// allow 'read' and 'list', deny the rest
e.Allow(FileSystemOperation.Read | FileSystemOperation.List);
return;
}
// allow other operations
e.Allow();
};
' register PathAccessAuthorization event
AddHandler server.PathAccessAuthorization,
Sub(sender, e)
' completely deny access to "/no-access" directory and to its subtree
If e.Path.StartsWith("/no-access", StringComparison.OrdinalIgnoreCase) Then
' deny access
e.Deny()
Exit Sub
End If
' guest user has read-only access
If e.User.Name = "guest" Then
' allow 'read' and 'list', deny the rest
e.Allow(FileSystemOperation.Read Or FileSystemOperation.List)
Exit Sub
End If
' allow other operations
e.Allow()
End Sub
Read-only file access
To make a user's virtual filesystem readonly, use PathAccessAuthorization
event
to only allow read and list operations:
// register PathAccessAuthorization event
server.PathAccessAuthorization += (sender, e) =>
{
// allow 'read' and 'list', deny the rest ('create', 'delete' and 'write')
e.Allow(FileSystemOperation.Read | FileSystemOperation.List);
};
' register PathAccessAuthorization event
AddHandler server.PathAccessAuthorization,
Sub(sender, e)
' allow 'read' and 'list', deny the rest ('create', 'delete' and 'write')
e.Allow(FileSystemOperation.Read Or FileSystemOperation.List)
End Sub
Back to feature list...