Java File.setLastModified () завершается ошибкой Linux, когда вы не являетесь владельцем файла - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть файл java jar, который использует File.setLastModified (), чтобы установить указанную метку времени c для файла, ссылаясь на /mnt/nxx/file.name. Он работает по желанию, когда файл принадлежит тому же UID, что и вошедший в систему пользователь, выполняющий процесс java. Но это терпит неудачу, если зарегистрированный пользователь - любой другой UID.

Файл размещается на внешнем USB-диске, отформатированном с помощью файловой системы Ext4, смонтированной на Raspberry Pi, во время загрузки через / etc / fstab с использованием:

/dev/sdb1 /mnt/nxx ext4 defaults 0 2

Хоста Ubuntu на той же сети, которая монтирует тот же диск во время загрузки через / etc / fstab, используя:

192.168.x.x:/mnt/nxx /mnt/nxx nfs rw 0 1

также может успешно установить отметку времени, если вошедший в систему пользователь имеет тот же UID, что и на Пи.

Однако хост Windows -10, который подключается через Samba к тому же диску (отображается как N: \ to \ RASPI \ root \ mnt) и работает с тем же кодом java, может успешно установить время -метка для ЛЮБОГО файла независимо от владельца файла, заявленного Pi.

Данный файл имеет 777 разрешений, и, как и ожидалось, любой пользователь на любом хосте в моей домашней сети может успешно изменить файл. Единственная проблема заключается в том, что java вызов setLastModified () завершается неудачно, когда UID пользователя на хостах Linux не соответствует владельцу файла - даже если пользовательский процесс java выполняется с тем же GID в виде файла.

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

Почему Windows -10 может успешно манипулировать отметкой времени независимо от пользователя, а Linux - нет? Есть ли способ добавить / настроить параметры в различных директивах монтирования fstab, в smb.conf или где-либо еще, чтобы настроить диск так, чтобы Linux вел себя так же, как Windows?

Кстати: та же проблема существует с внешне смонтированными жесткими дисками, отформатированными с файловыми системами NTFS. Я не пробовал сопоставление пользователей с дисками NTFS.

Любая помощь приветствуется.

cw

1 Ответ

0 голосов
/ 15 апреля 2020

Вот некоторая дополнительная информация для тех, кто столкнулся с этой проблемой, которая, по моему мнению, предлагает эффективный обходной путь, даже если основная проблема, кажется, остается.

Эта проблема проявляется только тогда, когда (1) файлы рассматриваемый НЕ принадлежит UID запущенного процесса java (Примечание: здесь не проблема с правами на чтение / запись файла, важна принадлежность файла), и (2) том диска, на котором находятся рассматриваемые файлы reside монтируется под UID, отличным от идентификатора владельца файла. В этих условиях java не может установить время последнего изменения, как ожидалось.

Если диск смонтирован как CIFS или под UID, совпадающим с идентификатором владельца файла, тогда java может успешно управлять метками времени.

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

...