안녕하세요 촌놈입니다

날씨가 많이 추워졌다는게 느껴 집니다

이제 새벽이되면 거실 온도가 21 ℃ 대로 내려 가버리네욤! 다들 건강챙기세요


오늘은 FTP 접속관련을 작업하다 파일 속성문제를 접하게되었습니다. 해당관련하여 자료를 기술 하려고 하니 한번 보시죠 ^^


실습환경

  - 리눅스

  - Java, JDK 7

  - Web Application Server

  - 실습요약 : 리눅스 환경의 파일 및 디렉토리에 대한 권한 속성(permissions) 변경

  - Maven 링크

    https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client

  

먼저 코드를 공개하고 해당되는 내용의 장단점 및 기타 정보를 보도록 하겠습니다!


방법 1 - File 객체형


해당 방법은 File 객체를 이용하여 버전에 관계 없이 권한을 부여 하는 방법입니다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><% int permissionsCode = 444; String targetPath = "디렉토리 및 파일 FULL 경로"; // 디렉토리만 넣을 경우 디렉토리만 동작 File targetFile = new File(targetPath); // 모든권한을 제거하고 시작 targetFile.setReadable(false, false); targetFile.setWritable(false, false); targetFile.setExecutable(false, false); if (targetFile.exists()) { if (permissionsCode == 444) { targetFile.setReadable(true, false); targetFile.setWritable(false, false); targetFile.setExecutable(false, false); } if (permissionsCode == 455) { targetFile.setReadable(true, false); targetFile.setWritable(false, false); targetFile.setExecutable(true, false); targetFile.setExecutable(false, true); } if (permissionsCode == 755) { targetFile.setReadable(true, false); targetFile.setWritable(false, false); targetFile.setWritable(true, true); } if (permissionsCode == 777) { targetFile.setReadable(true, false); targetFile.setWritable(true, false); targetFile.setExecutable(true, false); } } %>

장점

 - JDK 버전에 관계 없이 부여 가능


단점

 - 권한을 명시적으로 부여 하기가 상당히 난해 함


방법 2 - PosixFilePermission 객체형

아래 방법은 FTP UI 권한 부여 방식과 같이 명시적으로 부여 할 수 있습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
%><%@ page import="java.util.*, java.io.*, java.nio.file.attribute.*, java.nio.file.*"%><%

    int permissionsCode = 750;
    String targetPath = "디렉토리 및 파일 FULL 경로"; // 디렉토리만 넣을 경우 디렉토리만 동작
    File targetFile = new File(targetPath);

    // 모든권한을 제거하고 시작    
    targetFile.setReadable(false, false);
    targetFile.setWritable(false, false);
    targetFile.setExecutable(false, false);
        
    if(targetFile.exists()) {
        if(permissionsCode == 750) {
            // JDK 7 이상
            Path path = Paths.get(targetPath);
            Set<PosixFilePermission> perms = Files.readAttributes(path,PosixFileAttributes.class).permissions();
            perms.add(PosixFilePermission.OWNER_READ);
            perms.add(PosixFilePermission.OWNER_WRITE);
            perms.add(PosixFilePermission.OWNER_EXECUTE);
            
            perms.add(PosixFilePermission.GROUP_READ);
            // perms.add(PosixFilePermission.GROUP_WRITE);
            perms.add(PosixFilePermission.GROUP_EXECUTE);
            
            // perms.add(PosixFilePermission.OTHERS_READ);
            // perms.add(PosixFilePermission.OTHERS_WRITE);
            // perms.add(PosixFilePermission.OTHERS_EXECUTE);
            Files.setPosixFilePermissions(path, perms);
        }
    }
%>

장점

 - 명시적으로 권한 및 속성 부여 가능


단점

 - JDK 7 이상의 버전에서 가능


방법 3 - PosixFilePermission 문자형

해당 방법은 코드가 짧고 명확하게 처리가 가능 하나 자주 사용하지 않는? 리눅스환경에 따른 속성 코드를 이해? 해야 합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
%><%@ page import="java.util.*, java.io.*, java.nio.file.attribute.*, java.nio.file.*"%><%

    int permissionsCode = 775;
    String targetPath = "디렉토리 및 파일 FULL 경로"; // 디렉토리만 넣을 경우 디렉토리만 동작
    File targetFile = new File(targetPath);

    // 모든권한을 제거하고 시작    
    targetFile.setReadable(false, false);
    targetFile.setWritable(false, false);
    targetFile.setExecutable(false, false);
        
    if(targetFile.exists()) {
        if(permissionsCode == 775) {
            // JDK 7 이상
            Path path = Paths.get(targetPath);
            Set<PosixFilePermission> posixPermissions = PosixFilePermissions.fromString("rwxrwxr-x");
            Files.setPosixFilePermissions(path, posixPermissions);
        }
    }
%>

장점

 - 명시적으로 권한 및 속성 부여 가능

 - 코드가 짧음

 

단점

 - JDK 7 이상의 버전에서 가능

 - 리눅스 속성정보를 이해 하여야 함


방법 4 - apache hadoop API

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
%><%@ page import="java.util.*, java.io.*, java.nio.file.attribute.*, java.nio.file.*"%><%

    int permissionsCode = 755;
    String targetPath = "디렉토리 및 파일 FULL 경로"; // 디렉토리만 넣을 경우 디렉토리만 동작
    File targetFile = new File(targetPath);

    // 모든권한을 제거하고 시작    
    targetFile.setReadable(false, false);
    targetFile.setWritable(false, false);
    targetFile.setExecutable(false, false);
        
    if(targetFile.exists()) {
        if(permissionsCode == 755) {
            FileUtil.chmod(targetFile.getAbsolutePath(), "755");
        }
    }
%>

장점

 - 명시적으로 권한 및 속성 부여 가능

 - 코드가 짧음


그외로 Runtime 을 이용한 방법이 있으나 해당 방법은 쉘명령 권한 오류가 발생 할 수 있음으로 예제에서 배재 하였습니다.


개발기간이 1, 3, 6, 12개월동안 하지만 서버에 올리는 작업은 자주 하지 않으니 매번 외워 지지 않는 군요! 이번 포스팅의 경우 FTP를 통해서 파일을 자동으로 제어하는 코드를 넣기위해 자료를 파악하면서 생성된 자료입니다 ^^


PS. 여기까지 읽어 주셔서 감사합니다(응원 한마디!, 이웃등록! ^^)


블로그 이미지

촌놈 개발자 일기

개발자로서 살아가는 느낌과 정보를 공유 합니다

,