Java >> Java tutorial >  >> Tag >> java.io

java.io.File.setReadable(false) har ingen effekt inde i docker

Dokumentationen for File.canRead() indeholder en note om, at resultatet kan være forvirrende:

public boolean canRead()

Tester, om applikationen kan læse filen, der er angivet med dette abstrakte stinavn. På nogle platforme kan det være muligt at starte den virtuelle Java-maskine med særlige privilegier, der tillader den at læse filer, der er markeret som ulæselige. Derfor kan denne metode returnere true selvom filen ikke har læsetilladelser.

Under docker-processer kører normalt som root, hvilket giver dem privilegier, der ikke er set af almindelige brugere.

Bevis på, at root kan læse filer, der mangler læsetilladelse:

$ echo abcd > somefile
$ ls -l somefile 
-rw-rw-r-- 1 leon leon 5 Aug 26 21:43 somefile

$ cat somefile
abcd

$ chmod a-rw somefile 
$ ls -l somefile 
---------- 1 leon leon 5 Aug 26 21:43 somefile

$ cat somefile
cat: somefile: Permission denied

$ sudo cat somefile
abcd

Jeg har set lignende resultater. Files.getPosixFilePermissions returnerer de forventede værdier, men Files.isReadable og File canRead returnerer true, når false er "forventet"

Tilføjelse af bruger-id'et til docker-kommandolinjen løser det for mig. Det er muligvis standardbrugeren af ​​root, der er problemet


Java tag