Доступ к папке за пределами user.home возвращает значение false в Linux

#java #linux

Вопрос:

Я установил tomcat и развернул в нем веб-приложение java в Redhat.

Мое системное свойство user.home указывает на /opt/tomcat.

Это приложение пытается получить доступ к пути к файлу, подобному этому

  root = new File(rootPath);
    if (!root.isDirectory()) {
        throw new IllegalArgumentException("Root is not a directory!");
    }
 

Теперь я хочу получить доступ к любой папке за пределами /opt, как родной брат /opt, это приводит к ошибке в корне.isDirectory(). Но если папка находится внутри /opt/tomcat, то она правильно возвращается как истинная.

Обе папки /opt и /nasdata(папка, к которой я хочу получить доступ) имеют одинаковые разрешения.

обновленный

ls -la /опт

 drwxr-xr-x.  8 root   root   4096 Jul 21 16:15 .
dr-xr-xr-x. 21 root   root   4096 Jul 21 20:53 ..    
drwxr-xr-x  10 tomcat tomcat 4096 Jul 26 21:20 tomcat
 

ls -la /opt/tomcat

 drwxr-xr-x  10 tomcat tomcat  4096 Jul 26 21:20 .
drwxr-xr-x.  8 root   root    4096 Jul 21 16:15 ..
drwxr-x---   2 tomcat tomcat  4096 Jul 21 16:15 bin
-rw-r-----   1 tomcat tomcat 18949 Jun 28 01:46 BUILDING.txt
drwxr-x---   3 tomcat tomcat  4096 Jul 23 09:20 conf
-rw-r-----   1 tomcat tomcat  6210 Jun 28 01:46 CONTRIBUTING.md
drwxr-x---   2 tomcat tomcat  4096 Jul 21 20:14 lib
-rw-r-----   1 tomcat tomcat 57092 Jun 28 01:46 LICENSE
drwxr-x---   2 tomcat tomcat  4096 Jul 28 04:58 logs
lrwxrwxrwx   1 root   root       9 Jul 26 21:20 nasdata -> /nasdata/
-rw-r-----   1 tomcat tomcat  2333 Jun 28 01:46 NOTICE
drwxr-x---   2 tomcat tomcat  4096 Jul 23 09:20 .oracle_jre_usage
-rw-r-----   1 tomcat tomcat  3372 Jun 28 01:46 README.md
-rw-r-----   1 tomcat tomcat  6898 Jun 28 01:46 RELEASE-NOTES
-rw-r-----   1 tomcat tomcat 16507 Jun 28 01:46 RUNNING.txt
drwxr-x---   2 tomcat tomcat  4096 Jul 23 09:34 temp
drwxr-x---   9 tomcat tomcat  4096 Jul 23 09:37 webapps
drwxr-x---   3 tomcat tomcat  4096 Jul 21 16:28 work
 

ls -la моей корневой папки. Я пытаюсь получить доступ к папке nasdata и указываю /nasdata в качестве пути.

 dr-xr-xr-x.  21 root root      4096 Jul 21 20:53 .
dr-xr-xr-x.  21 root root      4096 Jul 21 20:53 ..
-rw-r--r--    1 root root         0 Feb  4 20:43 .autorelabel
lrwxrwxrwx.   1 root root         7 Feb  4 20:39 bin -> usr/bin
dr-xr-xr-x.   5 root root      4096 Feb  4 20:52 boot
drwxr-xr-x   19 root root      3220 Jul 21 14:04 dev
drwxr-xr-x.  89 root root      4096 Jul 21 21:00 etc
drwxr-xr-x.   2 root root      4096 Feb  4 20:39 home
drwxr-xr-x    3 root root      4096 Jul 21 16:55 home2
lrwxrwxrwx.   1 root root         7 Feb  4 20:39 lib -> usr/lib
lrwxrwxrwx.   1 root root         9 Feb  4 20:39 lib64 -> usr/lib64
drwxr-xr-x.   5 root root      1024 Jul 21 16:58 localhome
drwx------.   2 root root     16384 Feb  4 20:38 lost found
drwxr-xr-x.   2 root root      4096 Dec 14  2017 media
drwxr-xr-x.   2 root root      4096 Dec 14  2017 mnt
drwxrwxr-x    2 root 9999      4096 Jul 26 16:58 nasdata
drwxr-xr-x.   8 root root      4096 Jul 21 16:15 opt
dr-xr-xr-x  150 root root         0 Jul 21 14:04 proc
dr-xr-x---.   7 root root      4096 Jul 21 16:26 root
drwxr-xr-x   30 root root       980 Jul 21 16:46 run
lrwxrwxrwx.   1 root root         8 Feb  4 20:39 sbin -> usr/sbin
-rw-r--r--    1 root root 127599309 Jul 21 20:53 sk
drwxr-xr-x.   2 root root      4096 Dec 14  2017 srv
dr-xr-xr-x   13 root root         0 Jul 21 14:04 sys
drwxrwxrwt.  14 root root      4096 Jul 28 03:43 tmp
drwxr-xr-x.  14 root root      4096 Jul 21 16:08 usr
drwxr-xr-x.  20 root root      4096 Feb  4 20:46 var
 

С наилучшими пожеланиями,
Саурав

Комментарии:

1. Можете ли вы дать вывод структуры каталогов на сервере, касающийся этих элементов? нравится ls -la показывать /opt и /opt/tomcat ? таким образом, мы можем видеть, что видит bash, и можем помочь ответить на то, как интерпретируется Java

2. @GrantLindsey спасибо за ответ…обновил свой пост результатами команды ls-la

3. «Теперь я хочу получить доступ к любой папке за пределами /opt, как родной брат /opt», — как это согласуется с тем, что вы пытаетесь получить доступ к /opt/tomcat, который является дочерним /opt? Если вы спрашиваете об /testfolder этом , пожалуйста, также покажите вывод ls команды, а также фактическое значение rootPath . Кроме того, вы пробовали использовать каталог братьев /opt/tomcat и сестер , например /opt/testfolder ? Поскольку /testfolder является дочерним по отношению к корню, это может быть ОС, которая не позволяет вашему приложению получить к нему доступ. Пожалуйста, также покажите ls команду для / (нам нужно только увидеть результаты для opt и testfolder .

4. Я здесь не эксперт, но замечаю . , что разрешения после включения /opt и отсутствие одного и того же /nasdata . Для получения дополнительной информации смотрите здесь: superuser.com/questions/230559/…

5. The java.io. Класс File очень старый и имеет прискорбную привычку возвращать вводящие в заблуждение ошибки (или вообще не допускать ошибок) при сбое многих операций. Вы обнаружите, что устранить вашу проблему намного проще, если замените все типы использования файлов Path Files классами и более нового пакета java.nio.file , который возвращает гораздо более точные и информативные ошибки при сбое операций.