Измените группу владельцев файлов в 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
. Здесь вы можете управлять разрешениями группы.