보안의 가장 중요한 측면 중 하나는 서버의 대한 무단 액세스, 특히 파일 생성, 수정 또는 삭제와 같은 작업을 방지하는 것입니다. 이번 프로젝트에서 이러한 공격을 방지하기 위해 더미 계정을 생성하여 관리자 권한이 아닌 실행 권한만을 주어 입력 필드에 입력된 코드를 실행만 할 수 있도록 하였습니다.
Linux에서 새 계정을 만들려면 root 또는 sudo 권한이 필요합니다. 이 명령을 sudo useradd [option] [username]를 사용하여 지정된 이름으로 새 계정을 생성할 수 있으며 필요에 따라 옵션을 지정할 수 있습니다.
이번 계정을 생성하기 위해 다음 명령어를 통해 dummy계정을 생성합니다.
sudo useradd dummy
계정을 생성한 후 로그인을 하기 위해 암호를 설정해야 합니다. sudo passwd [username] 명령어를 사용하여 비밀번호를 생성해 줍니다.
sudo passwd dummy
이제 더미 계정을 사용하여 코드를 실행하도록 합니다. 예를 들어 Java코드를 컴파일하고 실행하는 Javacovert.sh라는 쉘스크립트가 있는 경우 다음과 같이 Java 명령어를 실행하기 전에 sudo -u [username] 을 추가하여 더미 계정을 사용하여 실행하도록 수정합니다.
참고 : su [username] 명령어을 통해 현 사용 계정을 사용하면서 다른 계정의 권한으로 변경할 때 사용
참고2 : exit 명령어를 통해 로그아웃을 할 수 있음
Javaconvert.sh
#!/bin/bash
file="$1"
params="$2"
# check if the file exists
if [ ! -f "$file" ]; then
echo "File not fond: $file"
exit 1
fi
# get the file's extension
ext="${file##*.}"
# parse the String
IFS=',' read -ra args <<< "$params"
# get current working directory
cwd=$(pwd)
#compile and execute the java file
if [ "$ext" = "java" ]; then
# extract the directory path and file name without extesntion
dir=$(dirname "$file")
filename=$(basename "$file" .java)
# compile the java file
javac "$file"
if [ $? -ne 0 ]; then
echo "Compilation failed"
exit 1
fi
# run the java program with the given parameter file
cd "$dir"
sudo -u dummy "java" "$filename" "${args[@]}"
cd "$cwd"
else
echo "Invalid file type: $ext"
exit 1
fi
더미 계정이 코드를 실행할려면 관련 파일 및 디렉토리에 대한 적절한 권한이 필요합니다. 다음과 같은 명령어를 통해 sudo chmod o+rx [directory] 더미 계정에 코드가 저장되고 실행될 디렉토리에 대한 읽기 및 실행 권한을 부여합니다.
sudo chmod o+rx ubuntu
필요에 따라 권한이 있는 그룹에 더미 계정을 추가한 다음 그룹에 읽기 및 실행 권한을 부여할 수도 있습니다. sudo chmod g+rx [directory]
권한이 제한된 더미 계정에서 코드를 실행하도록 함으로써, 서버에 대한 무단 액세스 및 공격을 방지하는 효과적인 방법이 될 수 있습니다.