5초 요약 (시간 없으신 분들은 여기만!)

무슨 문제?

같은 프로젝트 폴더에서 팀원들이 파일 만들 때, 그룹이 제각각 달라서 서로 접근 못 함!

해결책?

# 이 한 줄이면 끝!
sudo chmod 2770 [폴더경로]

→ 폴더 안에서 누가 파일을 만들든 자동으로 같은 그룹을 물려받음!

주의!

$ ls -ld [폴더]
drwxrws--- ...  # ← 소문자 s여야 정상!
      ↑
  • 소문자 s: 정상 작동 ✅
  • 대문자 S: 작동 안 함 ❌ → 다시 chmod 2770 실행!

이런 답답한 경험 있으신가요?

# 팀 프로젝트 폴더 (developers 그룹)
$ ls -ld ~/project/src
drwxrwx--- 2 dev_lead developers ...

# alice가 파일 생성
$ touch ~/project/src/feature.py
$ ls -l ~/project/src/feature.py
-rw-r--r-- 1 alice alice ...  # alice 그룹으로 생성됨!

# bob은 developers 그룹인데 못 읽음!
$ cat ~/project/src/feature.py
Permission denied  # 😭

"왜 같은 프로젝트 폴더인데 내가 만든 파일을 팀원이 못 읽지?"
"매번 chgrp 명령어로 그룹 바꿔주기 너무 귀찮아!"
"자동으로 같은 그룹으로 설정할 방법 없나?"

바로 이런 협업 문제를 해결하는 게 chmod의 특수 권한입니다!

저도 chmod 명령어는 자신 있었지만, 폴더에 파일 만들 때마다 자동으로 그룹을 상속시킬 수 있다는 걸 처음 알았을 때 정말 놀랐습니다. 특히 설정 과정에서 대문자 S와 소문자 s의 차이를 모르면 제대로 작동하지 않는 함정이 있어서, 이 글에서 완벽하게 정리해드리겠습니다!


해결책: 폴더에 "그룹 자동 상속" 설정하기

리눅스에는 폴더에 특수 권한을 설정하면, 그 안에서 만드는 모든 파일이 자동으로 폴더의 그룹을 물려받는 기능이 있습니다!

이 특수 권한을 "setgid 비트" (set group ID)라고 부르는데, 용어는 몰라도 됩니다. 중요한 건 어떻게 설정하느냐입니다!

설정 전 vs 설정 후

# developers 그룹 디렉터리
$ ls -ld /project/src
drwxrwx--- 2 dev_lead developers ...

# alice가 파일 생성
$ sudo -u alice touch /project/src/alice_file.txt
$ ls -l /project/src/alice_file.txt
-rw-r--r-- 1 alice alice ...  # alice의 기본 그룹(alice)으로 생성됨!

# 문제: bob은 developers 그룹인데 파일을 읽을 수 없음!
$ sudo -u bob cat /project/src/alice_file.txt
Permission denied

문제점: 같은 프로젝트 디렉터리에서 작업하는데, 각자 만든 파일의 그룹이 달라서 서로 접근할 수 없습니다! 😢

✅ 특수 권한 설정 후 (문제 해결!)

# 특수 권한 설정 (이 명령어만 실행하면 됨!)
$ sudo chmod 2770 /project/src
$ ls -ld /project/src
drwxrws--- 2 dev_lead developers ...  # ← 소문자 s가 보임!

# alice가 파일 생성
$ sudo -u alice touch /project/src/alice_file.txt
$ ls -l /project/src/alice_file.txt
-rw-r--r-- 1 alice developers ...  # ✅ 자동으로 developers 그룹!

# bob도 이제 접근 가능!
$ sudo -u bob cat /project/src/alice_file.txt
(파일 내용 출력 성공!)  # 🎉

해결! 🎉 누가 파일을 만들든 자동으로 폴더의 그룹(developers)을 물려받아서, 같은 그룹 멤버끼리 자유롭게 파일을 공유할 수 있습니다!

💡 참고: 이 특수 권한을 기술적으로 "setgid 비트"라고 부르지만, 용어보다 중요한 건 "그룹이 자동으로 상속된다"는 개념입니다!


⚠️ 함정 주의! 대문자 S가 뜨면 안 됩니다

chmod 명령어로 특수 권한을 설정할 때, 설정 방법을 잘못 쓰면 대문자 S가 표시되고 제대로 작동하지 않습니다!

이게 많은 분들이 삽질하는 부분입니다. 저도 처음에 이걸 몰라서 한참 헤맸습니다. 😅

❌ 대문자 S (잘못된 설정 - 작동 안 함!)

drw-rwS--- 2 dev_lead developers ...
      ↑
   대문자 S (문제!)

무슨 뜻인가요?

  • 특수 권한은 설정했지만...
  • 그룹이 폴더에 진입할 수 없는 상태입니다!
  • 진입도 못 하는데 파일을 만들 수가 없으니, 사실상 작동 안 함

왜 이렇게 되나요?
폴더의 "실행 권한(x)"이 없으면 그 폴더 안으로 cd 명령어로 들어갈 수 없습니다.

$ cd /project/src
bash: cd: /project/src: Permission denied  # 😭 진입 불가!

들어갈 수도 없는데 무슨 파일을 만들겠어요? 그래서 대문자 S는 거의 쓸모없는 상태입니다.

✅ 소문자 s (올바른 설정 - 정상 작동!)

drw-rws--- 2 dev_lead developers ...
      ↑
   소문자 s (정상!)

무슨 뜻인가요?

  • 특수 권한 설정됨 ✅
  • 그룹이 폴더에 진입 가능 ✅
  • 그룹 자동 상속이 정상 작동합니다! ✅
$ cd /project/src        # 진입 성공!
$ touch new_file.txt     # 파일 생성
$ ls -l new_file.txt
-rw-r--r-- 1 alice developers ...  # ✅ developers 그룹!

이게 우리가 원하는 거죠! 🎉

한눈에 비교

표시 폴더 진입 그룹 자동 상속 결론 chmod 예시
대문자 S ❌ 안 됨 ❌ 작동 안 함 쓸모없음 😭 2060
소문자 s ✅ 됨 ✅ 작동함! 이게 정답! 🎉 2770

💡 핵심: 반드시 소문자 s가 보여야 정상입니다!


🔧 올바르게 설정하는 법 (복붙하세요!)

제일 쉬운 방법: 숫자로 한 번에! (강력 추천 ⭐)

sudo chmod 2770 ~/project/phoenix_project/src

이게 끝입니다! 이 명령어 하나면 소문자 s가 제대로 뜹니다.

숫자가 뭘 의미하나요?

  • 2: "그룹 자동 상속" 특수 권한
  • 7: 소유자 권한 (읽기+쓰기+실행)
  • 7: 그룹 권한 (읽기+쓰기+실행) ← 여기에 실행 권한 포함!
  • 0: 다른 사용자 권한 (없음)

결과: drwxrws--- ← 완벽! ✅

심볼릭 방식 (주의 필요 ⚠️)

# ⚠️ 이것만 하면 대문자 S가 뜰 수 있어요!
sudo chmod g+s ~/project/phoenix_project/src

# ✅ 반드시 실행 권한도 함께 추가해야 합니다!
sudo chmod g+s ~/project/phoenix_project/src
sudo chmod g+x ~/project/phoenix_project/src

왜 심볼릭은 위험한가요?

  • g+s만 하면 "그룹에 특수 권한만 추가"하는 거예요
  • 만약 폴더의 그룹 권한이 rw-였다면 → rwS (대문자 S) 됨
  • 실행 권한을 따로 안 주면 작동 안 함!

그래서 초보자는 숫자 방식(2770)을 추천합니다! 한 번에 모든 권한을 정확히 설정할 수 있거든요.


💡 이럴 때 꼭 써야 해요! (실전 활용)

"아 이게 어디에 쓰이는 건지 모르겠어요!" 하시는 분들을 위해, 실제로 어떤 상황에서 유용한지 보여드릴게요.

상황 1: 웹 개발팀 협업 폴더

# 프로젝트 디렉터리 구조
/var/www/project/
├── src/           # 소스 코드
├── uploads/       # 사용자 업로드 파일
└── logs/          # 로그 파일

# 모든 개발자가 같은 그룹(webdev)에 속해 있음
$ sudo chgrp -R webdev /var/www/project
$ sudo chmod 2770 /var/www/project/src
$ sudo chmod 2770 /var/www/project/uploads
$ sudo chmod 2770 /var/www/project/logs

# 이제 alice가 만든 파일도, bob이 만든 파일도 모두 webdev 그룹!
# 팀원 누구나 수정 가능하고, 외부인은 접근 불가!

장점:

  • ✅ 매번 chgrp 명령어로 그룹 변경할 필요 없음
  • ✅ 새로 추가된 팀원도 자동으로 기존 파일 접근 가능
  • ✅ 다른 그룹(보안상 접근하면 안 되는 사람들)은 차단

상황 2: 데이터 공유 폴더

# 데이터 과학팀 공유 디렉터리
$ sudo mkdir -p /data/shared
$ sudo chgrp datascience /data/shared
$ sudo chmod 2770 /data/shared

# 누가 CSV 파일을 올려도 자동으로 datascience 그룹
# 팀원 모두가 데이터 분석 가능!

상황 3: Git 저장소 관리

# Git 원격 저장소
$ sudo mkdir -p /opt/git/repos/myproject.git
$ sudo chgrp developers /opt/git/repos/myproject.git
$ sudo chmod 2770 /opt/git/repos/myproject.git

# Git push할 때 생성되는 객체들이 자동으로 올바른 그룹 소유권을 가짐

🔍 설정 확인 및 테스트

1. 권한 확인

$ ls -ld ~/project/phoenix_project/src
drwxrws--- 2 dev_lead developers 4096 Nov 13 18:37 /project/src
      ↑
   소문자 s가 보여야 정상!

2. 실제로 작동하는지 테스트

# 현재 디렉터리 이동
$ cd ~/project/phoenix_project/src

# 테스트 파일 생성
$ touch test_file.txt
$ mkdir test_dir

# 그룹 확인
$ ls -l
drwxr-sr-x 2 root developers ... test_dir       # ✅ developers!
-rw-r--r-- 1 root developers ... test_file.txt  # ✅ developers!

3. 문제가 있다면?

대문자 S가 보인다면:

# 해결: 실행 권한 추가
sudo chmod g+x ~/project/phoenix_project/src

# 또는 다시 한 번에 설정
sudo chmod 2770 ~/project/phoenix_project/src

📝 자주 하는 실수와 해결책

실수 1: 심볼릭 방식으로만 설정

# ❌ 이렇게만 하면 안 됨!
sudo chmod g+s /project/src

# ✅ 실행 권한도 함께!
sudo chmod g+s /project/src
sudo chmod g+x /project/src

실수 2: 숫자를 잘못 입력

# ❌ 잘못된 예 (setgid 없음)
sudo chmod 770 /project/src   # → drwxrwx---

# ✅ 올바른 예 (setgid 포함)
sudo chmod 2770 /project/src  # → drwxrws---

실수 3: 그룹 소유권을 설정 안 함

# ❌ 그룹이 잘못 설정됨
drwxrws--- 2 dev_lead root ...  # root 그룹!

# ✅ 올바른 그룹 설정
sudo chgrp developers /project/src
sudo chmod 2770 /project/src
drwxrws--- 2 dev_lead developers ...  # developers 그룹!

마치며

chmod 명령어는 리눅스의 기본이지만, 폴더에 그룹 자동 상속 기능이 있다는 건 많은 분들이 모르시더라고요.

저도 처음 알았을 때 "와, 이런 기능이 있었어?" 하면서 신기했습니다. 특히 팀 프로젝트나 협업 환경에서는 진짜 유용한 기능이니, 꼭 기억해두세요!

대문자 S를 보셨다면?
당황하지 마시고 sudo chmod 2770 [폴더] 다시 실행하시면 됩니다! 😊

이 글이 도움이 되셨다면:

  • 👍 공감 버튼 눌러주세요
  • 💬 궁금한 점은 댓글로 남겨주세요
  • 🔗 같은 고민하는 동료에게 공유해주세요!

다들 삽질 적게 하시고, 행복한 리눅스 생활 되세요! 🐧


📌 자주 묻는 질문 (FAQ)

Q. 기존 파일들도 자동으로 그룹이 바뀌나요?
A. 아니요! 이미 만들어진 파일은 안 바뀝니다. 새로 만드는 파일만 자동으로 그룹을 상속받아요. 기존 파일은 chgrp 명령어로 수동으로 바꿔줘야 합니다.

Q. setgid를 설정한 폴더를 삭제하면 어떻게 되나요?
A. 폴더 삭제하면 설정도 같이 사라집니다. 당연한 얘기지만요! 😅

Q. 왜 2770인가요? 다른 숫자는 안 되나요?
A. 2770은 "그룹 자동 상속(2) + 소유자 전체 권한(7) + 그룹 전체 권한(7) + 다른 사람 권한 없음(0)"입니다. 필요에 따라 2775, 2750 등으로 조절 가능해요!

Q. Windows나 Mac에서도 되나요?
A. 아니요, 이건 리눅스/유닉스 계열 시스템의 기능입니다.

복사했습니다!