java - java-如何在更改文件权限之前以编程方式将用户更改为root?
问题描述
在 Java 中,我想动态更改 Linux 文件的文件权限。我已尝试按照其他来源的建议使用 Files.setPosixFilePermissions 进行设置:如何以编程方式更改文件权限?,但我得到了错误
java.nio.file.FileSystemException: : 不允许操作
我发现我无法将文件权限设置为用户,因为该文件归根用户所有。我的问题是:是否可以通过在 java 中从用户切换到 root 来执行 Files.setPosixFilePermissions?然后在完成后切换回用户?
这是我的大部分代码:
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);
}
解决方案
无法更改正在运行的进程的所有者(无论是 JVM 还是其他任何东西)。
但是,您可以生成一个新的特权进程来完成“肮脏”的工作。
推荐阅读
- c# - 使用 IndexMany 时,Elasticsearch 在动态类型上推断 _id
- java - 如何解决 Kotlin 多平台库项目中的 lambda / SAM 问题?
- google-cloud-data-fusion - 使用 MapReduce 将 SQL Server 数据库映射到 MySQL 数据库时出现空指针异常
- python - 我们可以对 django 包进行更改吗
- python - 根据每个值对列的值进行分组
- css - Webpack 4以错误的顺序导入SCSS文件
- java - 尝试调用 JPA 函数时出现语法错误
- selenium-webdriver - DOM未加载时如何使用appium单击android中的元素?
- integration-testing - 在同一浏览器实例中同时在 Nightwatch.js + Saucelabs 中运行集成测试
- c# - Swagger 异步控制器生成