[개념]

파일 권한 및 관리 부분 추가 필요

 


Sticky bit란?

  • 보통 /tmp 디렉토리처럼 여러 사용자가 파일을 생성, 삭제하는 곳에 사용됨
  • 디렉토리에 Sticky bit가 설정되어 있으면, 해당 디렉토리 내 파일을 소유자, 디렉토리 소유자, 또는 root만 삭제/이름변경 가능
  • 즉, 다른 사용자로부터 자신이 만든 파일을 보호할 수 있음

1. 명령어

bash
chmod +t 디렉토리명 # Sticky bit 설정 chmod -t 디렉토리명 # Sticky bit 해제

 

2. 권한 표시

디렉토리 권한을 ls -ld로 보면, 가장 끝에 t가 붙어 표시됩니다.

bash
drwxrwxrwt 10 root root 4096 Aug 7 09:15 /tmp

위에서 t는 sticky bit가 설정됐음을 의미합니다.

3. 숫자 권한 표현

  • Sticky bit를 숫자로 표현할 때는 1000 자리에 해당
    • 예시: chmod 1777 /data/tmp
      (1: sticky, 7: owner rwx, 7: group rwx, 7: others rwx)

4. 활용 예시

  • /tmp와 같이 모든 사용자가 접근할 수 있는 디렉토리에서 보안 강화용으로 필수 적용

==

umask 022 → 777-022 → 디렉터리 755, 파일 644

==

리눅스(Linux)애는 chmod(권한 변경 명령어)를 통해 파일이나 디렉토리에 특수 권한을 부여할 수 있다.
리눅스에서 제공되는 권한은 총 3가지이며, Sticky Bit(1번), SetGID(2번), SetUID(4번)이 있다. chmod 명령어를 통해 특수권한을 부여하는 방법은 "chmod (구분번호)(권한번호)" 이다. 

 

구분적용 대상동작 방식권한 표시부여방법구분적용 대상동작 방식권한 표시부여방법
SetUID (4) 실행 파일 소유자(Owner) 권한으로 파일실행  -rwsr-xr-x
(Owner의 실행권한 위치에 s)
chmod 4755
SetGID (2) 실행 파일 그룹(Group) 권한으로 실행 -rwxr-sr-x
(Group의 실행권한 위치에 s)
chmod 2755
디렉터리 디렉터리 그룹(Group) 권한 파일에 상속 
Sticky Bit 디렉터리 디렉터리 안의 파일은 소유자(Owner)와 디렉터리 소유자(Group), root만 삭제 가능 drwxrwxrwt
(Other의 실행권한 위치에 t)
chmod 1777

 

setuid의 경우 서버 내 담당자별 계정으로 권한을 분리하였지만 실행권한은 필요한 경우 자주 사용되며(passwd도 setuid 설정), sticky bit의 경우 /tmp 경로에서 주로 사용된다.
setgid의 경우 여러가지 계정들을 동시에 관리할 때 사용할 수 있다. (하나의 서버를 여러 팀이 쪼개어 사용하는 경우 등) 리눅스의 특수권한을 잘 활용하면 여러사람이 하나의 서버를 사용하더라도 안전하게 사용가능할 수 있다.

 

 

 

 

 

 

문제

다음과 같은 내용의 test.sh 스크립트 파일을 만들었습니다.

Bash
 
#!/bin/bash

# 현재 사용자 이름 출력
echo "Hello, $(whoami)!"

# 오늘 날짜와 시간 출력
date

# 디렉토리 생성 및 파일 복사
mkdir /tmp/backup
cp /etc/passwd /tmp/backup/

echo "Backup complete!"

이 스크립트를 다음과 같이 실행했으나, Permission denied 에러가 발생하며 스크립트가 실행되지 않았습니다.

Bash
 
$ ./test.sh
-bash: ./test.sh: Permission denied

스크립트가 실행되지 않은 가장 주된 원인은 무엇인가요?

  1. 스크립트 파일의 경로가 잘못되었다.
  2. #!/bin/bash 셸 뱅(shebang)이 잘못 작성되었다.
  3. mkdir 명령어를 실행할 권한이 없었다.
  4. 스크립트 파일에 실행 권한이 부여되지 않았다.
  5. cp 명령어를 실행할 권한이 없었다.

정답 및 해설

정답: 4. 스크립트 파일에 실행 권한이 부여되지 않았다.

Permission denied 에러 메시지는 파일에 접근하거나 실행할 권한이 없다는 것을 명확하게 나타냅니다. 스크립트를 실행하기 위해서는 해당 파일에 **실행 권한(execute permission)**이 반드시 있어야 합니다.

상세 해설

  • 1. 스크립트 파일의 경로가 잘못되었다.
    • 경로가 잘못되었다면 No such file or directory와 같은 에러가 발생합니다. Permission denied 에러는 파일이 존재하지만 권한 문제가 있을 때 나타납니다.
  • 2. #!/bin/bash 셸 뱅(shebang)이 잘못 작성되었다.
    • 셸 뱅이 잘못되었더라도 스크립트 자체의 실행 권한이 있다면, 스크립트가 실행되려다 구문 오류가 발생하거나 다른 오류가 나타납니다. 이 문제의 경우는 실행 시도 자체에서 권한 문제가 발생했습니다.
  • 3. mkdir 명령어를 실행할 권한이 없었다.
    • 스크립트 내부의 명령어(예: mkdir)가 권한 문제로 실패했다면, 스크립트는 일단 실행된 후에 해당 명령어가 있는 줄에서 에러를 뱉어냅니다. 이 문제의 경우는 스크립트 실행 자체에 실패했습니다.
  • 5. cp 명령어를 실행할 권한이 없었다.
    • mkdir와 마찬가지로 cp 명령어의 권한 문제였다면, 스크립트가 실행된 후에 오류가 발생합니다.

해결 방법:

chmod 명령어를 사용하여 test.sh 파일에 실행 권한을 부여하면 문제를 해결할 수 있습니다.

Bash
 
$ chmod +x test.sh
$ ./test.sh
Hello, your_username!
(현재 날짜와 시간)
Backup complete!

 

 

 

 

 

문제 1: 스크립트 실행 오류 분석

다음과 같은 내용의 cleanup.sh 스크립트가 있습니다.

Bash
 
#!/bin/bash

LOG_DIR="/var/log"
BACKUP_DIR="/tmp/backup_$(date +%Y%m%d)"

if [ ! -d "$LOG_DIR" ]; then
    echo "Error: $LOG_DIR does not exist."
    exit 1
fi

mkdir -p "$BACKUP_DIR"
cp $LOG_DIR/*.log "$BACKUP_DIR/"

echo "Log files backed up to $BACKUP_DIR"

이 스크립트를 일반 사용자(root가 아닌)로 실행했을 때, 다음 두 가지 상황 중 어떤 오류가 발생할 가능성이 가장 높으며, 그 이유는 무엇인가요?

  1. mkdir: cannot create directory '/tmp/backup_...' : Permission denied
  2. cp: cannot open '/var/log/*.log' for reading: Permission denied

정답:

2. cp: cannot open '/var/log/*.log' for reading: Permission denied

해설:

  • 일반 사용자는 /var/log 디렉터리에 있는 로그 파일들을 읽을 권한이 없습니다. 이 디렉터리는 시스템의 중요한 로그를 담고 있으므로, 일반적으로 root 또는 특정 그룹에 속한 사용자만 접근할 수 있도록 설정되어 있습니다. 따라서 cp 명령어가 파일에 접근할 때 Permission denied 오류가 발생합니다.
  • 반면, /tmp 디렉터리는 모든 사용자가 파일을 생성할 수 있도록 설정된 임시 디렉터리입니다. 따라서 mkdir -p "/tmp/backup_..." 명령어는 일반 사용자도 성공적으로 실행될 가능성이 높습니다. 이 스크립트의 가장 치명적인 오류는 cp 명령어에서 발생합니다.

'기타' 카테고리의 다른 글

06. FG BG nohup &  (0) 2025.08.28
05. 파일 복사 / 이동  (0) 2025.08.28
03. 프로세스 (관리)  (0) 2025.08.28
02. shell과 환경변수  (2) 2025.08.28
01. 계정/그룹 관리  (1) 2025.08.28

+ Recent posts