fs.access throws permission error while checking W_OK on writable dir
Personne n'a encore pris cette issue.
- Langage dominant
- JavaScript
- Étoiles
- 122k
- Forks
- 37.4k
- Merge moyen
- 4 j 3 h
- PR mergées (30 j)
- 272
Description
- Version:
v10.16.0(also happening onv12.6.0) - Platform:
18.6.0 Darwin Kernel Version 18.6.0(also happening on4.15.0-54-generic Ubuntu) - Subsystem:
fs
I'm experiencing a rather unexpected behaviour when trying fs.access on a directory that's also an NFS shared mount point. The check for fs.constants.W_OK throws Error: EACCES: permission denied, access '/mnt/test/nfs' even though the directory is writable and permissions seem to be correct for the user running the node script process.
Below is a reproduction of what I'm seeing.
const os = require('os');
const path = require('path');
const fs = require('fs');
// Path to the mount directory
const MOUNT_PATH = '/mnt/test/nfs';
const filePath = path.join(MOUNT_PATH, 'foo.txt');
// Write a file
fs.writeFileSync(filePath, 'Hello world!'); // Passes OK
// Read a file
const contents = fs.readFileSync(filePath); // Passes OK
console.log(contents.toString('utf-8')); // 'Hello World!'
// Get stats
os.userInfo();
/*
{
uid: 431,
gid: 433,
username: 'test',
homedir: '/home/test',
shell: '/sbin/nologin'
}
*/
fs.stat(MOUNT_PATH, console.log);
/*
> null Stats {
dev: 52,
mode: 16895, <- '0777' octal
nlink: 1,
uid: 431, <- Correct uid
gid: 433, <- Correct gid
rdev: 0,
blksize: 4096,
ino: 263,
size: 184,
blocks: 0,
atimeMs: 1562948571578.2288,
mtimeMs: 1562897414354.1873,
ctimeMs: 1562897414354.1873,
birthtimeMs: 0,
atime: 2019-07-12T16:22:51.578Z,
mtime: 2019-07-12T02:10:14.354Z,
ctime: 2019-07-12T02:10:14.354Z,
birthtime: 1970-01-01T00:00:00.000Z
}
*/
// Test permissions
fs.access(MOUNT_PATH, fs.constants.R_OK, console.error); // Passes OK
fs.access(MOUNT_PATH, fs.constants.W_OK, console.error);
/*
[Error: EACCES: permission denied, access '/mnt/test/nfs'] {
errno: -13,
code: 'EACCES',
syscall: 'access',
path: '/mnt/test/nfs'
*/
This does not happen on any other directory outside the NFS share. I stumbled upon the exception when writing a very simple health checker script to test the mount availability for a running web service.
Am I missing something? What's the catch here? Thanks in advance.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par reproduire le problème en utilisant fs.access(MOUNT_PATH, fs.constants.W_OK) sur le montage NFS signalé, en le comparant à fs.writeFileSync, fs.readFileSync, fs.stat et à la vérification R_OK. Déterminez si le résultat différent est un comportement NFS attendu ou un problème dans la gestion de fs.access par Node.js ; le travail est terminé lorsque la cause est documentée ou qu’une modification ciblée du runtime et sa validation sont identifiées.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, node.js
- Domaine
- operating-systems
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Calme
- Clarté
- À clarifier
- Accessibilité débutants
- 38/100