У меня есть следующая настройка среды.
Server: Ubuntu
App Server: Tomcat7
Java: JDK 7
Сервлету необходимо записать файл в папку монтирования. Tomcat работает с использованием пользователя tomcat7
а CIFS
привязан к /mntt/mydir/
с другим пользователем, называемым coder
.
Разрешение установлено на 777
для /mntt/mydir
Служба создаст папку и попытается загрузить/записать файл в эту папку.
Когда папка создана, она имеет разрешение 755
а файл имеет разрешение 644
, владельцем файла и папки является coder
а не tomcat7
Итак, когда моя программа пытается что-то записать в файл, она выдает исключение, Permission denined
.
Код создания файла UPDATE
//Create directory
File uploadFile = new File(dirpath);
uploadFile.mkdirs();
//Create and Write to File
OutputStream stream = new FileOutputStream(new File(dirPath+"/upload"));
Пожалуйста, направляйте. Также, пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
благодаря
Наконец я решил проблему !!
Я запускаю службу tomcat как пользователь coder
, изменяя /etc/defaults/tomcat7
.
Кроме того, мне нужно изменить разрешения нескольких каталогов tomcat
.
Вы можете изменить службу Java следующим образом, чтобы созданный файл получил разрешение 777, и другой пользователь сможет написать ему:
Path path = FileSystems.getDefault().getPath(
file.getAbsolutePath());
Files.setPosixFilePermissions(path,
EnumSet.allOf(PosixFilePermission.class));
где file
- объект java.io.File
который представляет файл. Вы можете сделать то же самое в каталоге, который содержит файл, если вы хотите, чтобы пользователь tomcat
мог создавать файлы в этом каталоге.
coder
и выполните chmod 777 file
произойдет ли ошибка? Это странно, в linux владелец файла может изменить права доступа к этому файлу ...
coder
? Есть что-то, что вы можете контролировать / изменить?