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. 아니요, 이건 리눅스/유닉스 계열 시스템의 기능입니다.
'리눅스' 카테고리의 다른 글
| grep 'fail|error' 했는데 왜 검색이 안 될까? 파이프 기호의 비밀 (1) | 2025.11.08 |
|---|---|
| [강추] 리눅스 실습 환경 찾다가 발견한 최고의 사이트 LabEx 솔직 후기 (0) | 2025.11.06 |
| [Linux] scp 명령어 사용법 (0) | 2022.12.06 |
| netstat 명령어 사용법 (0) | 2022.11.14 |