Skip to content

Commit 0c9465b

Browse files
Setting primary GID for users to be created from config. (#89)
Co-authored-by: Romeo Dumitrescu <romeo@drc.ro>
1 parent 9fc3532 commit 0c9465b

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

src/ES.SFTP/Security/UserManagementService.cs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,21 @@ private async Task SyncUsersAndGroups()
7171
await UserUtil.UserDelete(user, false);
7272
}
7373

74+
//Create groups as specified by the GID value for each user
75+
foreach (var user in config.Users)
76+
{
77+
if (user.GID.HasValue)
78+
{
79+
_logger.LogInformation("Processing GID for user '{user}'", user.Username);
80+
81+
var virtualGroup = $"sftp-gid-{user.GID.Value}";
82+
if (!await GroupUtil.GroupExists(virtualGroup))
83+
{
84+
_logger.LogDebug("Creating group '{group}' with GID '{gid}'", virtualGroup, user.GID.Value);
85+
await GroupUtil.GroupCreate(virtualGroup, true, user.GID.Value);
86+
}
87+
}
88+
}
7489

7590
foreach (var user in config.Users)
7691
{
@@ -79,7 +94,7 @@ private async Task SyncUsersAndGroups()
7994
if (!await UserUtil.UserExists(user.Username))
8095
{
8196
_logger.LogDebug("Creating user '{user}'", user.Username);
82-
await UserUtil.UserCreate(user.Username, true);
97+
await UserUtil.UserCreate(user.Username, true, user.GID);
8398
_logger.LogDebug("Adding user '{user}' to '{group}'", user.Username, SftpUserInventoryGroup);
8499
await GroupUtil.GroupAddUser(SftpUserInventoryGroup, user.Username);
85100
}
@@ -94,19 +109,6 @@ private async Task SyncUsersAndGroups()
94109
await UserUtil.UserSetId(user.Username, user.UID.Value);
95110
}
96111

97-
if (user.GID.HasValue)
98-
{
99-
var virtualGroup = $"sftp-gid-{user.GID.Value}";
100-
if (!await GroupUtil.GroupExists(virtualGroup))
101-
{
102-
_logger.LogDebug("Creating group '{group}' with GID '{gid}'", virtualGroup, user.GID.Value);
103-
await GroupUtil.GroupCreate(virtualGroup, true, user.GID.Value);
104-
}
105-
106-
_logger.LogDebug("Adding user '{user}' to '{group}'", user.Username, virtualGroup);
107-
await GroupUtil.GroupAddUser(virtualGroup, user.Username);
108-
}
109-
110112
var homeDir = Directory.CreateDirectory(Path.Combine(HomeBasePath, user.Username));
111113
await ProcessUtil.QuickRun("chown", $"root:root {homeDir.FullName}");
112114
await ProcessUtil.QuickRun("chmod", $"711 {homeDir.FullName}");

src/ES.SFTP/Security/UserUtil.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ public static async Task<bool> UserExists(string username)
1010
return command.ExitCode == 0 && !string.IsNullOrWhiteSpace(command.Output);
1111
}
1212

13-
public static async Task UserCreate(string username, bool noLoginShell = false)
13+
public static async Task UserCreate(string username, bool noLoginShell = false, int? gid = null)
1414
{
1515
await ProcessUtil.QuickRun("useradd",
16-
$"--comment {username} {(noLoginShell ? "-s /usr/sbin/nologin" : string.Empty)} {username}");
16+
$"--comment {username} {(noLoginShell ? "-s /usr/sbin/nologin " : string.Empty)}{(gid.HasValue ? "-g " + gid.Value + " " : string.Empty)}{username}");
1717
}
1818

1919
public static async Task UserDelete(string username, bool throwOnError = true)

0 commit comments

Comments
 (0)