고급 C 프로그래밍 – 파일 처리와 디렉터리 다루기 – 4 – 파일과 디렉터리의 권한 설정

고급 C 프로그래밍 – 파일 처리와 디렉터리 다루기 – 4편: 파일과 디렉터리의 권한 설정

안녕하세요, C 언어로 시스템 프로그래밍까지 마스터하고 싶은 여러분! 😎
오늘은 조금 더 깊은 주제로 파일과 디렉터리의 권한 설정에 대해 알아보겠습니다.

🔐 파일 권한은 마치 “문에 달린 자물쇠” 같아요.
누가 열 수 있는지, 누가 쓸 수 있는지 명확히 지정해줘야 안전하답니다!

C 언어에서는 시스템 호출을 통해
파일을 누가 읽고 쓸 수 있는지, 디렉터리를 누가 접근할 수 있는지 등을 정할 수 있어요.


1. 권한(permission)이란?

유닉스(리눅스) 시스템에서는 각 파일과 디렉터리에 소유자와 권한이 설정되어 있습니다.

기본 권한 분류

  • 소유자(owner): 파일을 만든 사용자
  • 그룹(group): 해당 파일에 속한 사용자 그룹
  • 기타(other): 나머지 모든 사용자

권한 종류

기호 권한 설명
r 읽기 (read) 파일 내용을 읽을 수 있음
w 쓰기 (write) 파일 내용을 수정할 수 있음
x 실행 (execute) 실행 가능한 파일, 또는 디렉터리 접근 가능

2. 권한 숫자 표기법 (8진수)

권한은 8진수로 표현하며, r=4, w=2, x=1의 값을 합산합니다.

권한 조합 숫자
rwx 7 (4+2+1)
rw- 6 (4+2)
r-- 4
r-x 5 (4+1)

예: chmod 755 → 소유자: rwx, 그룹: rx, 기타: rx


3. 파일 생성 시 권한 지정: open() 또는 fopen()umask

C 언어에서 파일을 생성할 때 기본적으로 권한은 시스템의 umask 값에 따라 결정됩니다.

open() 함수 (POSIX)

#include <fcntl.h>
#include <sys/stat.h>

int fd = open("test.txt", O_CREAT | O_WRONLY, 0644);
  • 0644: 소유자 rw, 그룹과 기타 r

⚠️ fopen()은 내부적으로 open()을 호출하므로 직접 권한 제어가 어려움
대신 umask()로 기본값을 설정할 수 있어요.


4. 디렉터리 생성 시 권한 설정: mkdir()

#include <sys/stat.h>
#include <sys/types.h>

mkdir("myfolder", 0755);
  • 0755: 소유자 rwx, 그룹과 기타 rx
  • 디렉터리는 실행(x) 권한이 있어야 접근 가능합니다!

📁 디렉터리에 x 권한이 없으면 cd로 진입할 수 없어요!


5. 권한 변경: chmod()

#include <sys/stat.h>

chmod("filename.txt", 0644);
chmod("myfolder", 0755);
  • chmod() 함수로 파일이나 디렉터리의 권한을 변경할 수 있어요.
  • 성공 시 0, 실패 시 -1 반환

6. 파일 소유자 변경: chown() (관리자 권한 필요)

#include <unistd.h>
#include <sys/types.h>

chown("file.txt", new_uid, new_gid);
  • 소유자 또는 그룹을 변경
  • 일반 사용자는 자신의 파일이라도 chown() 사용 불가 → root 권한 필요

7. 파일 권한 확인: stat() 함수

#include <sys/stat.h>
#include <stdio.h>

struct stat st;
stat("file.txt", &st);

printf("권한: %o
", st.st_mode & 0777);

🔍 stat()을 이용하면 현재 파일의 권한을 숫자로 확인할 수 있어요.


8. 예제: 디렉터리 만들고 권한 설정하기

#include <stdio.h>
#include <sys/stat.h>

int main() {
    int result = mkdir("secure_dir", 0700);
    if (result == 0) {
        printf("디렉터리 생성 완료
");
    } else {
        perror("디렉터리 생성 실패");
    }

    chmod("secure_dir", 0755);  // 나중에 권한 조정
    return 0;
}

📌 처음에는 제한된 권한으로 만들고,
나중에 상황에 따라 조정하는 것이 보안에 더 좋아요!


9. 윈도우에서는 어떻게 하나요?

Windows에서는 C 표준 함수로는 권한을 직접 다루기 어렵고,
Windows API (SetFileSecurity, GetFileAttributesEx 등)를 사용해야 합니다.

따라서 파일 권한 설정은 유닉스 계열 시스템에서 더 많이 사용되는 기능이에요.


10. 실전 사용 시 주의할 점

주의사항 설명
무조건 0777 사용 금지 보안상 모든 사용자에게 rwx 권한은 매우 위험합니다!
x 권한 없는 디렉터리 내부로 접근 자체가 불가능함
chmod() 호출 오류 파일이 없거나 권한이 없을 경우 발생
stat() 반환값 확인 반드시 존재 여부 체크 후 사용
디렉터리 삭제 전에 rwx 확인 디렉터리 내부 파일 권한도 중요

✅ 요약 정리

기능 함수 예시
권한 부여 open() open("file", O_CREAT, 0644)
디렉터리 생성 mkdir() mkdir("dir", 0755)
권한 변경 chmod() chmod("file", 0644)
권한 조회 stat() stat("file", &st)
소유자 변경 chown() chown("file", uid, gid)

마무리하며 💬

C 언어에서 권한 설정은 단순히 파일을 만들고 읽는 수준을 넘어서
시스템 자원 보호, 보안 설정, 협업 환경 제어를 위한 필수 능력입니다.

🎯 “파일을 만들 줄 아는 건 개발자고,
파일을 지킬 줄 아는 건 프로그래머다!”

다음 시간에는 실제 예제를 기반으로
파일 검색, 필터링, 자동 정리 프로그램 만들기로 이어서
실전 프로젝트에 응용해볼게요!

끝까지 함께 하신 여러분 최고입니다! 💪📂🔐

답글 남기기