Java-код, обращающийся к корневой папке, получает ошибку «Отказано в доступе». - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь создать текстовый файл в корневой папке в системе Linux (Ubuntu), используя Java.Моя проблема в том, что я получаю сообщение об отказе в доступе.Мой пользователь обычный пользователь, поэтому я пытаюсь создать файл с пользователем root, но я застрял здесь.

Вот мой код:

package --------.com;
import java.io.File;
import java.io.IOException;

public class CreateFileDemo
{
   public static void main( String[] args )
   {    
      try {
         File file = new File("/root/newfile.txt");

             boolean fvar = file.createNewFile();
         if (fvar){
              System.out.println("File has been created successfully");
         }
         else{
              System.out.println("File already present at the specified location");
         }
        } catch (IOException e) {
            System.out.println("Exception Occurred:");
            e.printStackTrace();
      }
   }
}

1 Ответ

0 голосов
/ 02 июля 2019

Я думаю, вы должны начать с понимания разрешений файловой системы Linux: Обычно:

  • корневая папка / принадлежит root (сюрприз), а не отдельным пользователям.
  • отдельные пользователи не имеют право создавать или изменять файлы непосредственно в /.

Итак, во-первых, ваша идея создать обычного пользователя для создания файлов в / просто: неправильно. Вы не должны открывать эту запертую дверь.

Теперь, чтобы все еще быть в состоянии сделать это:

  • запускать всю JVM с помощью sudo (как корневой процесс): очевидно, это открывает целую банку червей, связанных с безопасностью. Итак: не делай этого. Потому что все, что происходит в этой JVM, делается с правами root.
  • альтернативно: вместо использования Java API для создания этого файла, вы можете запустить системную команду, например sudo touch /root/newfile.txt, а затем использовать что-то вроде sudoers , чтобы вас не спрашивали пароль.

Другими словами: либо вы должны запустить всю JVM как корневой процесс (не рекомендуется), либо вы должны сделать системный вызов с правами root.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...