Измените группу владельцев файлов в Linux с помощью java.nio.Files

У меня есть сервер Linux, и я запускаю задачу изменения размера изображения в Java для нескольких сайтов на моем сервере. Файлы веб-сайта принадлежат другим пользователям/группам ОС. Недавно созданные миниатюры/предварительные просмотры принадлежат пользователю, выполняющему задание изменения размера. Теперь я обсуждал, как изменить владельца файла недавно созданных превью/эскизов в моей программе изменения размера и наткнулся на это:

java.nio.file.Files.setOwner(Path path, UserPrincipal owner);

Это действительно решило бы мою проблему, если бы это была Windows, но поскольку в файле Linux есть пользователь и группа как владелец, я немного в беде. К сожалению, данный метод, похоже, только изменяет права пользователя на файл. Групповое владение остается с группой пользователей, выполняющих мое задание изменения размера.

Веб-сайты принадлежат различным группам, поэтому добавление моего пользователя изменения размера в одну группу не является вариантом. Я также хочу избежать системных вызовов с помощью ProcessBuilder и выполнить chown в моих файлах.

Мне нужно указать, что созданные файлы (предварительный просмотр/миниатюра) могут быть доступны через веб-сайт, и не имеет решающего значения изменить владельца группы, но я хотел, чтобы он был как можно более чистым.

Любые предложения о том, как я могу изменить групповое владение файлом в Linux только с помощью Java?

Ответ 1

Спасибо Джим Гаррисон за то, что он указал мне в правильном направлении. Вот код, который окончательно решил проблему для меня.

Получить владельца группы файла

File originalFile = new File("original.jpg"); // just as an example
GroupPrincipal group = Files.readAttributes(originalFile.toPath(), PosixFileAttributes.class, LinkOption.NOFOLLOW_LINKS).group();

Установить владельца группы файла

File targetFile = new File("target.jpg");
Files.getFileAttributeView(targetFile.toPath(), PosixFileAttributeView.class, LinkOption.NOFOLLOW_LINKS).setGroup(group);

Ответ 2

Я пропустил полное решение, вот оно (комбинация других ответов и комментариев):

Path p = your file Path;
String group = "GROUP_NAME";
UserPrincipalLookupService lookupService = FileSystems.getDefault()
            .getUserPrincipalLookupService();
GroupPrincipal group = lookupService.lookupPrincipalByGroupName(group);
Files.getFileAttributeView(p, PosixFileAttributeView.class,
            LinkOption.NOFOLLOW_LINKS).setGroup(group);

Помните, что только владелец файла может изменить свою группу и только в группу, членом которой он является...

Ответ 3

Взгляните на пакет java.nio.file.attributes и класс PosixFilePermissions. Здесь вы можете управлять разрешениями группы.