I'm a little bit confused here, maybe one of you guys can spot what I'm missing.
I have some files on an NFS filesystem, that is set to root_squash. The file is owned by my network id (dboger), while I'm logged in locally as dan:
dan@dbdb$ ls -l somefile.png
-r-------- 1 dboger 3813 2008-06-05 16:46 somefile.png
I'm trying to figure out if a file is readable, so I do something like:
dan@dbdb$ perl -le 'print "lies" if -r shift' somefile.png
dan@dbdb$
That is correct - the file is owned by a different UID, and is set to 0400.
Now, I try the same thing as root:
dan@dbdb$ sudo perl -le 'print "lies" if -r shift' somefile.png
lies
dan@dbdb$ sudo file somefile.png
couldn't open file
somefile.png: regular file, no read permission
Is perl just assuming that if I'm root I can always read the file, even though the permissions say that's wrong?
The perldoc page for -r says:
Also note that, for the superuser on the local filesystems, the "-r", "-R", "-w", and "-W" tests always return 1, and "-x" and "-X" return 1 if any execute bit is set in the mode. Scripts run by the superuser may thus need to do a stat() to determine the actual mode of the file, or temporarily set their effective uid to something else.
But surely NFS doesn't count as a local filesystem?
What am I missing?