Используйте SecurityManager!
- Поместить текущий идентификатор пользователя Unix в ThreadLocal
- Создайте свой собственный SecurityManager, который проверяет пользовательские разрешения Unix на checkRead () и checkWrite ()
- System.setSecurityManager (новый MySecurityManager ())
- Наслаждайтесь
Обновление
Конечно, нет стандартной библиотеки для чтения прав доступа к Unix-файлу. Это не WORA.
Но я кратко попытался найти готовую к использованию библиотеку и нашел эту:
http://jan.newmarch.name/java/posix/ Он использует JNI, но вам не нужно писать свой собственный код JNI, что является большим облегчением. :) Я уверен, что должны быть и другие.
Класс Stat оттуда дает вам всю необходимую информацию доступа:
http://jan.newmarch.name/java/posix/posix.Stat.html
Обновление 2
Как уже упоминалось, этот подход не проверяет «нестандартные» функции безопасности Unix, такие как ACL или Posix Capabilities (может быть; не уверен, применимы ли они к файлам). Но если цель полной синхронизации с безопасностью операционной системы установлена, то нам еще больше нужно использовать SecurityManager, потому что это механизм защиты всей JVM! Да, мы можем запустить дочерний SUID-процесс для проверки прав доступа (и продолжать его работу, разговаривая с ним по каналу, работающему при входе пользователя в систему), , но нам нужно сделать это из SecurityManager !