In Java, I would like to dynamically change the file permission of a Linux file. I have tried to set it with Files.setPosixFilePermissions as suggested from this other source: How do I programmatically change file permissions?, but I am getting the error
java.nio.file.FileSystemException: : Operation not permitted
I figured out that I am unable to set the file permissions as a user, since the file is owned by root. My question is: Is it possible to execute Files.setPosixFilePermissions by switching from user to root in java? And then switching back to user when done?
Here is the bulk of my code:
String path = "/usr/local/bin/driver";
try {
Utility.setAsExecutable(path);
} catch (IOException e) {
logger.error("Unable to set driver as executable.");
e.printStackTrace();
}
public static void setAsExecutable(String filePath) throws IOException {
// using PosixFilePermission to set file permissions 755
Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
perms.add(PosixFilePermission.OWNER_READ);
perms.add(PosixFilePermission.OWNER_WRITE);
perms.add(PosixFilePermission.OWNER_EXECUTE);
perms.add(PosixFilePermission.GROUP_READ);
perms.add(PosixFilePermission.GROUP_EXECUTE);
perms.add(PosixFilePermission.OTHERS_READ);
perms.add(PosixFilePermission.OTHERS_EXECUTE);
Files.setPosixFilePermissions(Paths.get(filePath), perms);
logger.info("Modified as executable " + filePath);
}