๐ Linux ACL / Setuid / Setgid / Sticky bit:้ฒ้ๆชๆกๅฎๅ จ่ๆฌ้็ฎก็ๆๅ
Linux ็ๆชๆกๆฌ้ๆงๅถไธๅช rwx ๅ chmod。
ๅจไผๆฅญ็ฐๅข、ๅคไบบๅไฝ、ๅฐๆก่ณๆๅคพ่ๅคๆๅๆถๆงไธ,ไฝ ๅธธๆ้ๅฐ:
- ๅไธไปฝ่ณๆ,้็ตฆ「ๅค็ตไบบ」ไธๅๆฌ้
- ่ฆ่ฎไธ่ฌไฝฟ็จ่ ไปฅ็นๅฎ่บซไปฝๅท่ก็จๅผ(ๅฆ passwd)
- ๅ้ๅ ฑ็จ่ณๆๅคพ,ไฝไธ่ฝไบ็ธๅช้คๆไปถ
- ๅธๆๅปบ็ซ UID/GID ่ฎๅๅพ,่ณๆๅคพ่ชๅ็นผๆฟ็พค็ต่ๆฌ้
้ไบ้ๆฑ้ฝๅฑฌๆผ「้ฒ้ๆฌ้็ฎก็」,้่ฆ็จๅฐ: ACL、Setuid、Setgid、Sticky bit。 ๆฌๆๅฐ็จๆธ ๆฅ็็ฏไพ่ๅฏฆๆฐๆต็จๅธถไฝ ๆๆกๆๆ็ดฐ็ฏ。
๐ ็ฎ้
- ไธ、ACL:็ช็ ด chmod ้ๅถ็็ดฐ็ฒๅบฆๆฌ้ๆงๅถ
- ไบ、Setuid:็จๅผไปฅๆชๆก Owner ่บซไปฝๅท่ก
- ไธ、Setgid:่ชๅ็นผๆฟ็พค็ต/ไปฅ็พค็ต่บซไปฝๅท่ก
- ๅ、Sticky Bit:ๅคไบบๅ ฑไบซ่ณๆๅคพ็ๆๅผทไฟ่ญท
- ไบ、ACL vs chmod vs ็นๆฎๆฌ้ๆฏ่ผ
- ๅ ญ、ๅฏฆๆฐๆ ๅข็คบ็ฏ:ๅฎๅ จๆๆฌ่ๅฐๆก่ณๆๅคพ็ญ็ฅ
- ไธ、ๅธธ่ฆๅ้ก FAQ
- ๐ ๅปถไผธ้ฑ่ฎ
ไธ、ACL:็ช็ ด chmod ้ๅถ็็ดฐ็ฒๅบฆๆฌ้ๆงๅถ
ๅณ็ตฑ chmod ๆฌ้ๅ ๆฏๆ:
- Owner
- Group
- Others
ไฝๅจไผๆฅญ็ฐๅขๅธธ้ๅไธ่ณๆๅคพๆไพๅค็ตไบบไธๅๆฌ้。ไพๅฆ:
- ๅทฅ็จ้จ:่ฎ + ๅฏซ
- ๅไฟ้จ:ๅช่ฝ่ฎ
- ๅคๅ ๅป ๅ:ๅช่ฝ่ฎๆไบๆชๆก
้ๆๅฐฑ้่ฆ ACL(Access Control List)。
✔ ๆฅ็ ACL
getfacl filename
✔ ่จญๅฎ ACL(ๆฐๅขไฝฟ็จ่ /็พค็ตๆฌ้)
# ็ตฆ user tom ่ฎๅฏซๆฌ
setfacl -m u:tom:rw file.txt
# ็ตฆ group qa ่ฎๅๆฌ
setfacl -m g:qa:r file.txt
✔ ็งป้ค ACL
setfacl -b filename
✔ ่ณๆๅคพ่ชๅ็นผๆฟ(default ACL)
# ๆฐๅข้ฒ่ณๆๅคพ็ๆชๆก่ชๅๅธถๆ ACL
setfacl -m d:u:tom:rw /project/data
ๅธธ่ฆ็จ้:
- ๅคไบบๅไฝๅฐๆก
- ๅค้จ้ๅ ฑ็จ่ณๆๅคพ(Dev、QA、PM)
- ็ฒพๆบๆง็ฎก API ๆ App ็ๅพ็ซฏๆชๆกๅญๅ
ไบ、Setuid:็จๅผไปฅๆชๆก Owner ่บซไปฝๅท่ก
็ถๆชๆก่จญ็ฝฎ Setuid bit ๆ,ๅท่ก่ ๆไปฅ「ๆชๆก owner」็่บซไปฝๅท่ก,่ไธๆฏ่ชๅทฑ็่บซไปฝ。
ๆๅธธ่ฆ็ไพๅญ:
-rwsr-xr-x 1 root root /usr/bin/passwd
passwd ้่ฆไฟฎๆน /etc/shadow,ๅ ๆญคๅฟ ้ ไปฅ root ่บซไปฝๅท่ก。
✔ ่จญๅฎ Setuid
chmod u+s program
✔ ๅๆถ Setuid
chmod u-s program
⚠ ๅฎๅ จ่ญฆๅ
- ็ตไธ่ฆๅฐ shell script(sh, bash, python)่จญ Setuid
- ๅฎนๆ้ ๆๆๆฌๆผๆด
- ๅ ้ฉ็จ「็ถ้ๅฎๅ จๅฏฉๆฅ」็็ทจ่ญฏ็จๅผ
้ฉ็จๆ ๅข:
- ้่ฆไธ่ฌไฝฟ็จ่ ๅท่ก็นๆฌๆไฝ(ไฟฎๆนๅฏ็ขผ、ๆ่ผ่ฃ็ฝฎ…)
ไธ、Setgid:ไปฅ็พค็ต่บซไปฝๅท่ก、่ณๆๅคพ่ชๅ็นผๆฟ็พค็ต
Setgid ๆๅ ฉ็จฎ็จ้:
๐(1)ๆชๆก:ไปฅ็พค็ต่บซไปฝๅท่ก
chmod g+s script
๐(2)่ณๆๅคพ:ๆฐๆชๆก่ชๅ็นผๆฟ็พค็ต(ๆๅธธ็จ)
็ถ่ณๆๅคพ่จญๅฎ Setgid,ๆฐๅปบ็ๆชๆกๆ่ณๆๅคพๆ่ชๅ็นผๆฟ่ฉฒ่ณๆๅคพ็็พค็ต。
# ่จญๅฎ Setgid
chmod g+s /project/data
้ๅฐๅ้ๅไฝ้ๅธธ้่ฆ: ๆๆไบบๆฐๅขๆชๆก้ฝๆไฟๆๅไธๅ็พค็ต,้ฟๅ ็ข็「ไธๅไฝฟ็จ่ ๅฏซๅ ฅไธๅ็พค็ต」่็กๆณๅญๅ็ๅ้ก。
ๅธธ่ฆ็จ้:
- ๅ้ๅ ฑ็จ่ณๆๅคพ
- CI/CD ็ข็ๆชๆก่ฆไฟๆ็ธๅ็พค็ต(ๅฆ Jenkins)
ๅ、Sticky Bit:ๅคไบบๅ ฑ็จ็ฎ้็ๅผทๅถไฟ่ญท
Sticky Bit ็ไฝ็จ: ไฝฟ็จ่ ๅช่ฝๅช้ค่ชๅทฑๅปบ็ซ็ๆชๆก。
ๅ
ธๅไพๅญ: /tmp
drwxrwxrwt tmp
↑
Sticky Bit (t)
✔ ่จญๅฎ Sticky Bit
chmod +t /shared
✔ ็งป้ค Sticky Bit
chmod -t /shared
็จ้:
- /tmp
- ๅคไบบๅ ฑ็จ่ณๆๅคพ
- ้ฒ็ซฏๅๆญฅๆซๅญ่ณๆๅคพ
ไบ、ACL vs chmod vs ็นๆฎๆฌ้ๆฏ่ผ่กจ
| ๅ่ฝ | chmod | ACL | Setuid | Setgid | Sticky Bit |
|---|---|---|---|---|---|
| ็ดฐ็ฒๅบฆๆฌ้ | ✘ | ✔ | ✘ | ✘ | ✘ |
| ๅคไบบๅ ฑ็จ็ฎก็ | ๆฎ้ | ✔ ๆ้ฉๅ | ✘ | ✔(่ณๆๅคพ) | ✔ |
| ไปฅ Owner ่บซไปฝๅท่ก | ✘ | ✘ | ✔ | ✘ | ✘ |
| ้ฟๅ ไบๅชๆชๆก | ✘ | ✘ | ✘ | ✘ | ✔ |
ๅ ญ、ๅฏฆๆฐๆ ๅข:ๅฐๆก่ณๆๅคพๆฌ้ไธๆฌก้ ็ฝฎๅฎๆ
ๅ่จญไฝ ๆไธๅๅ้่ณๆๅคพ:
/project/data
้ๆฑ:
- Dev:่ฎๅฏซ
- QA:ๅช่ฎ
- ๆๆๆฐๆชๆก้ฝ่ชๅ็นผๆฟ็พค็ต
- ๆฏๅไบบไธ่ฝๅช้คๅฅไบบ็ๆชๆก
✔ ๅปบ็ซ็พค็ต
groupadd dev
groupadd qa
✔ ่จญๅฎ่ณๆๅคพๅบๆฌๆฌ้
chown root:dev /project/data
chmod 2770 /project/data # 2 = Setgid
✔ ๅ ไธ Sticky Bit
chmod +t /project/data
✔ ่จญๅฎ ACL ็ตฆ QA(ๅช่ฎ)
setfacl -m g:qa:r /project/data
✔ ่จญ Default ACL(ๆฐๆชๆก็นผๆฟๆฌ้)
setfacl -m d:g:dev:rw /project/data
setfacl -m d:g:qa:r /project/data
๐ ๅฎๆๅพไฝ ๆๅพๅฐ: ๅฏ็ถญ่ญท、ๅฏๆดๅ 、ๅฏๅฏฉ่จ、ๅฏ่ชๅ็นผๆฟ็ๅฐๆก่ณๆๅคพๆฌ้ๆถๆง。
ไธ、ๅธธ่ฆๅ้ก FAQ
Q:ACL ๆ่ฎๆฌ้่ฎๅพ่ค้ๅ?
ๆ,ไฝๆไพ็ๆฏๆด้ซๅฝๆง。ๅปบ่ญฐๆญ้
getfacl ๆฅ่ฉขๅทฅๅ
ท่ๆไปถๆง็ฎก。
Q:Setuid / Setgid ๆ้บผ็ๆฏๅฆๅ็จ?
ๆชๆกๆฌ้ๆๅบ็พ S / s ไพๅฆ:
-rwsr-xr-x
Q:Sticky Bit ็ t / T ๅทฎๅจๅช?
- t:ๅท่กไฝๅ ๅญๅจ → ๆฌ้ๅฎๆด
- T:ๆฒๆๅท่กไฝๅ → ไฝ sticky bit ไปๅจ
๐ ๅปถไผธ้ฑ่ฎ
- ๐ง Linux ไฝฟ็จ่ ่็พค็ต็ฎก็:useradd、usermod、passwd、sudoers ๆทฑๅบฆ่งฃๆ
- ๐ง Linux ๆชๆก็ณป็ตฑ:inode、EXT4、XFS、ๆฌ้่ๅฏฆ้ซๅฒๅญ็ตๆง
- ๐ง Linux ็ณป็ตฑๅ ๅบ:SELinux、AppArmor、auditd、Fail2Ban ๅ จ้ขๅฎๅ จ้ฒ่ญท
- ๐ง LVM ่็ฃ็ขๆดๅฎน:PV/VG/LV、็ทไธๆดๅฑ、็ธฎๅฐ่ๅฟซ็ งๅฎๆดๆๅญธ
— WWFandy・Linux ๆฌ้็ฎก็็ญ่จ
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ