Права доступа к файлам
У нас есть Java-бин, пишущий файлы через Files.write
в папку данных Wildfly, и по какой-либо причине новый файл иногда получает совершенно неправильные права доступа и не может быть прочитан кем-либо.
Мне не удалось воспроизвести эту ошибку, я просто догадываюсь, что происходит, и знаю большинство проблем только по слухам.
Мы попытались установить владельца нового файла таким образом, полагая, что если его владельцем был сервер, ошибка исчезнет:
Path newFile = ...
Path dir = Paths.get(System.getProperty("user.home"));
UserPrincipal user = Files.getOwner(dir);
Files.setOwner(newFile, user);
Это иногда проросло AccessDeniedException
,
Затем мы попытались установить привилегии напрямую:
File file = newFile.toFile();
file.setReadable(true, false);
file.setWritable(true, false);
file.setExecutable(true, false);
Это ничего не сделал вообще.
Наконец, мы попытались установить ACL следующим образом:
Path folder = Paths.get(jbossDataDir);
AclFileAttributeView folderAttributes = Files.getFileAttributeView(folder, AclFileAttributeView.class);
AclFileAttributeView fileAttributes = Files.getFileAttributeView(newFile, AclFileAttributeView.class);
fileAttributes.setAcl(folderAttributes.getAcl());
Но, как и раньше, иногда никто не может получить доступ к файлу больше. Разбитые файлы имеют следующие разрешения (что бы это ни значило) и не могут быть открыты двойным щелчком:
BUILTIN\Administratoren:(F)
BUILTIN\Administratoren:(OI)(CI)(IO)
NT AUTHORITY\SYSTEM:(F)
NT AUTHORITY\SYSTEM:(OI)(CI)(IO)
NT AUTHORITY\Authenticated Users:(M)
NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(DE)
BUILTIN\Benutzer:(RX)
BUILTIN\Benutzer:(OI)(CI)(IO)
И папка данных JBoss имеет следующие разрешения:
Everyone:(OI)(CI)(M)
BUILTIN\Benutzer:(OI)(CI)(M)
Everyone:(I)(OI)(CI)(M)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
BUILTIN\Administratoren:(I)(OI)(CI)(F)
BUILTIN\Benutzer:(I)(OI)(CI)(RX)
BUILTIN\Benutzer:(I)(CI)(AD)
BUILTIN\Benutzer:(I)(CI)(WD)
CREATOR OWNER:(I)(OI)(CI)(IO)(F)
На данный момент я благодарен за все, даже если это "просто" возможность воспроизвести оригинальную ошибку. У кого-нибудь есть идеи?
1 ответ
Для меня это выглядит как вы должны
- либо просмотрите права пользователя, которые он унаследовал от групп, членами которых он является
- или проверьте, заблокирован ли файл исключительно другим процессом (Virusscaner и т. д.)
- или сравните ACL для файлов, которые доступны / недоступны
Основываясь на ваших опубликованных ACL, я бы сказал...
Если пользователь пытается получить доступ к файлу на том же компьютере, который вошел в систему с локальной учетной записью пользователя (BUILTIN\Benutzer), он имеет все необходимые права для изменения файла.
Если пользователь пытается получить доступ к файлу с удаленного ПК, вошедшего в систему с учетной записью пользователя домена (NT AUTHORITY\Authenticated Users), он также имеет все необходимые права для изменения файла.
Что выглядит нормально для меня.