็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿง Linux ๆช”ๆกˆ็ณป็ตฑๆฌŠ้™ๅฎŒๆ•ดๆŒ‡ๅ—:ACL、setuid、setgid、sticky bit ๅ…จ่งฃๆž

    ๐Ÿง Linux ๆช”ๆกˆ็ณป็ตฑๆฌŠ้™ๅฎŒๆ•ดๆŒ‡ๅ—:ACL、setuid、setgid、sticky bit ๅ…จ่งฃๆž

    ๅœจ Linux ไผบๆœๅ™จๅฏฆๅ‹™ไธญ,ๆช”ๆกˆ็ณป็ตฑๆฌŠ้™่จญ่จˆ็ต•ๅฐไธๆ˜ฏๅชๆœ‰ chmod 755 ้€™้บผ็ฐกๅ–ฎ。 ็•ถไฝ ้–‹ๅง‹้ขๅฐๅคšไบบๅฐˆๆกˆ็›ฎ้Œ„、ๅ…ฑไบซ่ณ‡ๆ–™ๅคพ、Web ๆœๅ‹™ๅธณ่™Ÿ、Log ๆช”ไฟ่ญท่ˆ‡ๅฎ‰ๅ…จ็จฝๆ ธ้œ€ๆฑ‚ๆ™‚, ๅฐฑๆœƒๆŽฅ่งธๅˆฐ ACL(Access Control List)setuidsetgid ่ˆ‡ sticky bit ็ญ‰้€ฒ้šŽๆฉŸๅˆถ。 ๆœฌๆ–‡ๅพžๅŸบ็คŽๆฌŠ้™ๅพฉ็ฟ’้–‹ๅง‹,ไธ€่ทฏๅฏฆไฝœๅˆฐ ACL ่ˆ‡็‰นๆฎŠๆฌŠ้™่จญ่จˆ,ๅ”ๅŠฉไฝ ๅปบ็ซ‹ไธ€ๅฅ—「ๅฎ‰ๅ…จ、ๅฅฝ็ถญ่ญท、ๅฏ็จฝๆ ธ」็š„ๆช”ๆกˆๆฌŠ้™ๆžถๆง‹。

    ไธ€、ๅ…ˆๅฟซ้€Ÿ่ค‡็ฟ’:ๅŸบๆœฌๆฌŠ้™่ˆ‡ๆ•ธๅญ—่กจ็คบๆณ•

    ๅœจ็œ‹ ACL ่ˆ‡็‰นๆฎŠไฝๅ…ƒไน‹ๅ‰,ๅ…ˆ็”จๆœ€็Ÿญ็š„็ฏ‡ๅน…ๆŠŠๅŸบ็คŽ่ง€ๅฟตๅฐ้ฝŠ:

    • ไธ‰็จฎ่บซๅˆ†:ๆช”ๆกˆๆ“ๆœ‰่€…(user)、็พค็ต„(group)、ๅ…ถไป–ไบบ(others)。
    • ไธ‰็จฎๆฌŠ้™:่ฎ€(r)、ๅฏซ(w)、ๅŸท่กŒ(x)。
    • ๆ•ธๅญ—่กจ็คบ:r=4、w=2、x=1,็›ธๅŠ ๅพ—ๅˆฐๆฏไธ€็ต„ๆฌŠ้™ๆ•ธๅ€ผ。
    # ็ฏ„ไพ‹:-rwxr-x---
    #           u   g   o
    # user:  r+w+x = 4+2+1 = 7
    # group: r+ x  = 4+0+1 = 5
    # other: -+ -+ -       = 0
    chmod 750 somefile
    
    # ๆŸฅ็œ‹่ฉณ็ดฐๆฌŠ้™่ˆ‡ๆ“ๆœ‰่€…
    ls -l somefile
    

    ้€™ๅ€‹ๆจกๅž‹็ฐกๅ–ฎๅฅฝๆ‡‚,ไฝ†ๅชๆ”ฏๆด 「ไธ€ๅ€‹ๆ“ๆœ‰่€… + ไธ€ๅ€‹็พค็ต„ + ๅ…ถไป–ไบบ」 ไธ‰ๅฑค่ง’่‰ฒ。 ็•ถไฝ ้œ€่ฆ「ๅคšๅ€‹็‰นๅฎšไฝฟ็”จ่€…」ๅฐๅŒไธ€็›ฎ้Œ„ๆœ‰ไธๅŒๆฌŠ้™ๆ™‚,ๅฐฑๆœƒ้–‹ๅง‹ๆ„ŸๅˆฐๅƒๅŠ›,้€™ๆ™‚ๅฐฑๆ˜ฏ ACL ็™ปๅ ด็š„ๆ™‚ๆฉŸ。

    ไบŒ、ไป€้บผๆ˜ฏ ACL?็‚บไป€้บผ้œ€่ฆๅฎƒ?

    ACL(Access Control List) ๅฏไปฅๆƒณๆˆๆ˜ฏ「ๆ›ด็ดฐ้ก†็ฒ’ๅบฆ็š„ๆช”ๆกˆๆฌŠ้™่กจ」,ๅฎƒๅ…่จฑไฝ ้‡ๅฐๆฏๅ€‹ไฝฟ็”จ่€…ๆˆ–็พค็ต„,ๅˆ†ๅˆฅ่จญๅฎš่ฎ€ๅฏซๅŸท่กŒๆฌŠ้™,่€Œไธๅ†ๅช่ƒฝไพ่ณดๅ–ฎไธ€็พค็ต„。

    ๅ…ธๅž‹ไฝฟ็”จๅ ดๆ™ฏ:

    • ๅคšไบบๅฐˆๆกˆ็›ฎ้Œ„:้–‹็™ผ่€… A、B、C ้ƒฝ่ƒฝๅฏซๅ…ฅ,ไฝ†ๅ…ถ้ค˜ไบบๅช่ƒฝ่ฎ€ๅ–。
    • ็ถญ้‹ๅธณ่™Ÿ:ๆŸไบ›็ถญ้‹ไฝฟ็”จ่€…้œ€่ฆ่ฎ€ๅ–็‰นๅฎš Log,ไฝ†็„กๆณ•็›ดๆŽฅ่ฎŠๆ›ดๆช”ๆกˆ owner/group。
    • ๅ…ฑ็”จ่ณ‡ๆ–™ๅคพ:็‰นๅฎš็พค็ต„ๆœ‰ๅฎŒๆ•ดๅญ˜ๅ–ๆฌŠ,ๅฆๅค–ๅ†้–‹ๆ”พๅฐ‘ๆ•ธไบบๅช่ฎ€。

    ่ฆไฝฟ็”จ ACL,้œ€่ฆๆช”ๆกˆ็ณป็ตฑๆ”ฏๆดไธฆๅ•Ÿ็”จๅฐๆ‡‰ๆŽ›่ผ‰้ธ้ …(ๅคšๆ•ธ็พไปฃ ext4xfs ้ ่จญๅทฒๆ”ฏๆด)。 ๅฏไปฅๅ…ˆ็ขบ่ชๆ˜ฏๅฆๆœ‰ๆŽ›่ผ‰ acl ้ธ้ …:

    # ๆชขๆŸฅๆŽ›่ผ‰้ธ้ …
    mount | grep -E 'ext4|xfs'
    
    # ไนŸๅฏ็œ‹ /etc/fstab ไธญๆ˜ฏๅฆๆœ‰ acl
    grep acl /etc/fstab
    

    ไธ‰、ACL ๅŸบๆœฌๆŒ‡ไปค:getfacl / setfacl

    ๅธธ่ฆ‹ๆŒ‡ไปคๆœ‰ๅ…ฉๅ€‹:

    • getfacl:ๆŸฅ็œ‹ๆช”ๆกˆๆˆ–็›ฎ้Œ„็š„ ACL ่จญๅฎš。
    • setfacl:่จญๅฎšๆˆ–ไฟฎๆ”น ACL。

    ไปฅๅฎ‰่ฃ่ˆ‡ไฝฟ็”จ็‚บไพ‹:

    # Debian / Ubuntu
    sudo apt install acl
    
    # CentOS / RHEL / Rocky / AlmaLinux
    sudo dnf install acl
    
    # ๆชขๆŸฅ็œ‹็œ‹็›ฎๅ‰ ACL ๆƒ…ๆณ
    getfacl /var/log/messages
    

    3-1. ๅฐๅ–ฎไธ€ไฝฟ็”จ่€…ๆ–ฐๅขž ACL ๆฌŠ้™

    ๅ‡่จญๆœ‰ไธ€ๅ€‹็›ฎ้Œ„ /data/share,owner ่ˆ‡ group ๅทฒ่จญๅฎšๅฅฝ,ไฝ†ไฝ ๆƒณ้กๅค–็ตฆ user alice ๅฏซๅ…ฅๆฌŠ้™:

    # ๅฐ user alice ๆ–ฐๅขž rwx ๆฌŠ้™
    sudo setfacl -m u:alice:rwx /data/share
    
    # ๆชขๆŸฅ็œ‹็œ‹
    getfacl /data/share
    

    ่ผธๅ‡บๆœƒ้กžไผผ:

    # file: data/share
    # owner: root
    # group: project
    user::rwx
    user:alice:rwx
    group::r-x
    mask::rwx
    other::r-x
    

    3-2. ๅฐ็พค็ต„ๆ–ฐๅขž ACL ๆฌŠ้™

    ่‹ฅไฝ ๆœ‰ไธ€ๅ€‹็พค็ต„ auditor ๅฐˆ้–€็”จไพ†็จฝๆ ธ Log,ๅธŒๆœ›ไป–ๅ€‘่ƒฝ่ฎ€็‰นๅฎš Log ็›ฎ้Œ„:

    sudo setfacl -m g:auditor:rx /var/log/app
    getfacl /var/log/app
    

    3-3. Default ACL:่ฎ“ๆ–ฐๅปบ็ซ‹็š„ๆช”ๆกˆ่‡ชๅ‹•็นผๆ‰ฟ

    ่‹ฅๅชๅœจ็›ฎ้Œ„ๆœฌ่บซ่จญ ACL,ไน‹ๅพŒๆ–ฐๅปบ็ซ‹็š„ๆช”ๆกˆ้ ่จญไปๆœƒไพ็…ง umask ่ˆ‡ๆ“ๆœ‰่€…ๆฑบๅฎšๆฌŠ้™。 ๅฆ‚ๆžœไฝ ๅธŒๆœ›「ๆœชไพ†ๅœจๆญค็›ฎ้Œ„ๅบ•ไธ‹ๆ–ฐๅขž็š„ๆช”ๆกˆ,้ƒฝ่‡ชๅ‹•็นผๆ‰ฟ ACL ๆจกๅผ」,ๅฐฑ่ฆไฝฟ็”จ default ACL

    # ่ฎ“ /data/project ไธญ「ๆœชไพ†ๆ–ฐๆช”ๆกˆ」่‡ชๅ‹•็ตฆ group project rw ๆฌŠ้™
    sudo setfacl -m d:g:project:rwx /data/project
    
    # ไธ€ๆฌก่จญๅฎš user ่ˆ‡ group ็š„ default ACL
    sudo setfacl -m d:u:alice:rwx,d:g:project:rwx /data/project
    
    # ๆŸฅ็œ‹ default ACL
    getfacl /data/project
    

    ไฝ ๆœƒ็œ‹ๅˆฐ้กžไผผ:

    default:user::rwx
    default:user:alice:rwx
    default:group::rwx
    default:group:project:rwx
    default:mask::rwx
    default:other::r-x
    

    3-4. ้ž่ฟดๅฅ—็”จ ACL

    ่‹ฅ็›ฎ้Œ„ๅบ•ไธ‹ๅทฒ็ถ“ๆœ‰ๅพˆๅคšๆช”ๆกˆ,ๆƒณไธ€ๆฌก่ชฟๆ•ดๆ‰€ๆœ‰ๆช”ๆกˆ็š„ ACL,ๅฏไปฅๅŠ ไธŠ -R

    # ๅฐๆ•ดๅ€‹็›ฎ้Œ„็ตๆง‹ๅฅ—็”จ
    sudo setfacl -R -m g:project:rwX /data/project
    

    rwX ไธญ็š„ๅคงๅฏซ X ไปฃ่กจ「ๅชๅฐ็›ฎ้Œ„่ˆ‡ๅŽŸๆœฌๆœ‰ x ็š„ๆช”ๆกˆๅŠ ๅŸท่กŒๆฌŠ้™」,ๅฐๅคงๆ‰นๆช”ๆกˆๆ™‚้žๅธธๅฅฝ็”จ。

    3-5. ็งป้™ค ACL

    ่‹ฅ่ฆ็งป้™ค็‰นๅฎš่ฆๅ‰‡ๆˆ–ๅ…จ้ƒจ ACL:

    # ็งป้™คๆŒ‡ๅฎš user ็š„ ACL
    sudo setfacl -x u:alice /data/project
    
    # ็งป้™คๅ…จ้ƒจ ACL(ๅŒ…ๅซ้ ่จญ ACL)
    sudo setfacl -b /data/project
    

    ๅ››、ACL ๅธธ่ฆ‹่ธฉ้›ท่ˆ‡ๆŽ’้ŒฏๆŠ€ๅทง

    • Mask ๆฌŠ้™้™ๅˆถ:ACL ไธญ็š„ mask:: ๆœƒ้™ๅˆถๅฏฆ้š›ๆœ‰ๆ•ˆๆฌŠ้™, ๅณไฝฟไฝ ็ตฆ user:alice:rwx,ไฝ† mask ๅชๆœ‰ r-x,ๅฏฆ้š›็”Ÿๆ•ˆไปๆ˜ฏ r-x
    • ๅทฅๅ…ทๅช้กฏ็คบๅŸบๆœฌๆฌŠ้™:ls -l ๅชๆœƒ้กฏ็คบ「ไธ‰็ต„ๅ‚ณ็ตฑๆฌŠ้™」,่‹ฅๅญ—ๅฐพๆœ‰ๅŠ ่™Ÿ + ไปฃ่กจๆœ‰ ACL:
      ls -l /data/project
      drwxrwxr-x+ 2 root project 4096 Nov 24 10:00 project
    • ๅ‚™ไปฝ่ˆ‡้‚„ๅŽŸ:ๆŸไบ›ๅ‚™ไปฝๅทฅๅ…ท้ ่จญไธไฟ็•™ ACL,่‹ฅ้œ€่ฆๅฎŒๆ•ด้‚„ๅŽŸๆฌŠ้™,่ซ‹็ขบ่ชๆœ‰ๆ”ฏๆด ACL ้ธ้ …(ไพ‹ๅฆ‚ rsync -A)。
    # ไฝฟ็”จ rsync ไฟ็•™ ACL (-A) ่ˆ‡ extended attributes (-X)
    rsync -aAX /data/project /backup/project
    

    ไบ”、setuid / setgid / sticky bit ๆฆ‚ๅฟต็ธฝ่ฆฝ

    ๅœจๅ‚ณ็ตฑ Unix ไธ–็•Œ่ฃก,้™คไบ† rwx ไปฅๅค–,้‚„ๆœ‰ไธ‰ๅ€‹「็‰นๆฎŠไฝๅ…ƒ」:

    • setuid(Set User ID):ๅŸท่กŒๆช”ๅœจ่ขซๅŸท่กŒๆ™‚,ไปฅๆช”ๆกˆๆ“ๆœ‰่€…็š„่บซๅˆ†ๅŸท่กŒ。
    • setgid(Set Group ID):ๅฏ็”จๆ–ผๅŸท่กŒๆช”่ˆ‡็›ฎ้Œ„,่ฎ“็จ‹ๅบๆˆ–ๆ–ฐๆช”ๆกˆ็นผๆ‰ฟ็‰นๅฎš็พค็ต„。
    • sticky bit:ๅธธ็”จๅœจๅ…ฑไบซ็›ฎ้Œ„,ๅฆ‚ /tmp,้ฟๅ…ไฝฟ็”จ่€…ๅˆช้™คไป–ไบบๆช”ๆกˆ。

    ๅœจ ls -l ็š„้กฏ็คบไธญ,้€™ไธ‰ๅ€‹็‰นๆฎŠไฝๅ…ƒๆœƒๅ–ไปฃๅŽŸๆœฌ็š„ x

    • rwsr-xr-x → user ็š„ x ่ขซๆ›ฟๆ›ๆˆ s,ไปฃ่กจ setuid。
    • rwxr-sr-x → group ็š„ x ่ขซๆ›ฟๆ›ๆˆ s,ไปฃ่กจ setgid。
    • rwxrwxrwt → others ็š„ x ่ขซๆ›ฟๆ›ๆˆ t,ไปฃ่กจ sticky bit。

    ๅ…ญ、setuid:ไปฅๆช”ๆกˆๆ“ๆœ‰่€…่บซๅˆ†ๅŸท่กŒ

    setuid ๆœ€ๅธธ่ฆ‹็š„ไพ‹ๅญๆ˜ฏ /usr/bin/passwd

    ls -l /usr/bin/passwd
    -rwsr-xr-x 1 root root 68208 Oct 30 12:34 /usr/bin/passwd
    

    ๅ‰้ข็š„ s ่กจ็คบ:passwd ้€™ๅ€‹็จ‹ๅผๅœจๅŸท่กŒๆ™‚,ๆœƒไปฅ root ่บซๅˆ†้‹ไฝœ, ๅฆ‚ๆญคไธ€ไพ†ไธ€่ˆฌไฝฟ็”จ่€…ๅฐฑ่ƒฝไฟฎๆ”น่‡ชๅทฑ็š„ๅฏ†็ขผ,่€Œไธ้œ€่ฆ็›ดๆŽฅ็ตฆ root ๆฌŠ้™。

    6-1. ๅฆ‚ไฝ•่จญๅฎš / ๅ–ๆถˆ setuid

    ๅฏไปฅ็”จๆ•ธๅญ—ๆˆ–็ฌฆ่™Ÿๆ–นๅผ่จญๅฎš:

    # ็”จๆ•ธๅญ—่กจ็คบ:4xxx → setuid
    chmod 4755 some_binary       # ็ญ‰ๅƒนๆ–ผ:rwsr-xr-x
    
    # ็”จ็ฌฆ่™Ÿ่กจ็คบ
    chmod u+s some_binary        # ่จญๅฎš setuid
    chmod u-s some_binary        # ๅ–ๆถˆ setuid
    

    6-2. setuid ็š„้ขจ้šช่ˆ‡ๅปบ่ญฐ

    • ้ขจ้šช:่‹ฅ setuid ็จ‹ๅผๆœ‰ๆผๆดž,ๆ”ปๆ“Š่€…ๅฏ่—‰ๆญคๅ–ๅพ—้ซ˜ๆฌŠ้™(็”š่‡ณ root)。
    • ๅปบ่ญฐ:
      • ้ฟๅ…่‡ชๅฏซ็จ‹ๅผ้šจๆ„ๅŠ ไธŠ setuid,ๅฐคๅ…ถๆ˜ฏ่งฃ่ญฏๅž‹่ชž่จ€(ๅฆ‚ Python、Shell)。
      • ๅฎšๆœŸๆŽƒๆ็ณป็ตฑไธŠๆ‰€ๆœ‰ setuid ๆช”ๆกˆ,็ขบ่ชๆ˜ฏๅฆ็‚บ้ ๆœŸๆธ…ๅ–ฎ。
    # ๆ‰พๅ‡บ็ณป็ตฑไธŠๆ‰€ๆœ‰ setuid ๆช”ๆกˆ
    sudo find / -perm -4000 -type f -xdev -print
    

    ไธƒ、setgid:็จ‹ๅผ็พค็ต„่ˆ‡็›ฎ้Œ„ๅฐˆๆกˆๆจกๅผ

    setgid ๅœจ「ๆช”ๆกˆ」่ˆ‡「็›ฎ้Œ„」ไธŠ็š„่กŒ็‚บไธๅŒ:

    • ๅฐๅŸท่กŒๆช”:็จ‹ๅบๅœจๅŸท่กŒๆ™‚ๆœƒไปฅๆช”ๆกˆ็พค็ต„่บซๅˆ†ๅŸท่กŒ。
    • ๅฐ็›ฎ้Œ„:ๅœจ่ฉฒ็›ฎ้Œ„ๅ…งๅปบ็ซ‹็š„ๆ–ฐๆช”ๆกˆ,ๅ…ถ group ๆœƒ็นผๆ‰ฟ็›ฎ้Œ„็š„็พค็ต„,่€Œไธๆ˜ฏไฝฟ็”จ่€…ไธป่ฆ็พค็ต„。

    7-1. ๅฐˆๆกˆ็›ฎ้Œ„ๅธธ่ฆ‹่จญ่จˆ็ฏ„ๆœฌ

    ๅ‡่จญไฝ ๆœ‰ไธ€ๅ€‹ๅฐˆๆกˆ็พค็ต„ project,ๆ‰€ๆœ‰ๅฐˆๆกˆๆˆๅ“ก้ƒฝๅœจ้€™ๅ€‹็พค็ต„่ฃก:

    # ๅปบ็ซ‹ๅฐˆๆกˆ็›ฎ้Œ„่ˆ‡็พค็ต„
    sudo groupadd project
    sudo mkdir -p /srv/project
    sudo chown root:project /srv/project
    
    # ่จญๅฎš็›ฎ้Œ„็พค็ต„็‚บ project,ไธฆๅ•Ÿ็”จ setgid
    sudo chmod 2775 /srv/project
    

    2 ไปฃ่กจ setgid,775 ๅ‰‡ๆ˜ฏ rwxrwxr-x。 ไน‹ๅพŒๆ‰€ๆœ‰ๅœจ /srv/project ่ฃกๆ–ฐๅปบ็š„ๆช”ๆกˆ,้ƒฝๆœƒ่‡ชๅ‹•ๅธถไธŠ project ็พค็ต„, ้ฟๅ…ๅ‡บ็พ ๆŸไบ›ๆช”ๆกˆๆ˜ฏ user ็š„ไธป่ฆ็พค็ต„、้€ ๆˆๆฌŠ้™ไธไธ€่‡ด ็š„ๆƒ…ๆณ。

    # ้ฉ—่ญ‰ setgid ็›ฎ้Œ„่กŒ็‚บ
    sudo -u alice touch /srv/project/alice.txt
    sudo -u bob   touch /srv/project/bob.txt
    
    ls -l /srv/project
    # ๅ…ฉๅ€‹ๆช”ๆกˆ็š„ group ้ƒฝๆ‡‰่ฉฒๆ˜ฏ project
    

    7-2. ่จญๅฎš / ๅ–ๆถˆ็›ฎ้Œ„ setgid

    # ่จญๅฎš็›ฎ้Œ„ setgid
    chmod g+s /srv/project          # ๅœจๆฌŠ้™้กฏ็คบๆœƒ็œ‹ๅˆฐ rwsrwsr-x ๆˆ– rwxr-sr-x
    
    # ๅ–ๆถˆ็›ฎ้Œ„ setgid
    chmod g-s /srv/project
    

    ๅ…ซ、sticky bit:/tmp ็‚บไป€้บผไธๆœƒ่ขซๅฝผๆญคไบ‚ๅˆช?

    sticky bit ๆœ€ๅธธ็ขฐๅˆฐ็š„ไพ‹ๅญๆ˜ฏ /tmp

    ls -ld /tmp
    drwxrwxrwt 10 root root 4096 Nov 24 10:00 /tmp
    

    ๆœ€ๅพŒไธ€ๅ€‹ๅญ—ๅ…ƒๆ˜ฏ t,ไปฃ่กจ sticky bit。ๅฎƒ็š„ไฝœ็”จๆ˜ฏ: ๅœจๆญค็›ฎ้Œ„ไธญ,ๅชๆœ‰ๆช”ๆกˆ็š„ๆ“ๆœ‰่€…、็›ฎ้Œ„ๆ“ๆœ‰่€…ๆˆ– root ๅฏไปฅๅˆช้™คๆช”ๆกˆ, ๅณไฝฟๅคงๅฎถๅฐ็›ฎ้Œ„้ƒฝๆœ‰ๅฏซๅ…ฅๆฌŠ้™,ไนŸไธ่ƒฝ้šจๆ„ๅˆช้™คไป–ไบบ็š„ๆช”ๆกˆ。

    8-1. ๅปบ็ซ‹ๅ…ฑไบซๆšซๅญ˜็›ฎ้Œ„็š„็ฏ„ไพ‹

    ๅฆ‚ๆžœไฝ ๆƒณๅปบ็ซ‹ไธ€ๅ€‹้กžไผผ /tmp ็š„ๅ…ฑไบซๆšซๅญ˜็ฉบ้–“:

    sudo mkdir /srv/tmp
    sudo chmod 1777 /srv/tmp    # 1 ไปฃ่กจ sticky bit,777 ๆ˜ฏ rwxrwxrwx
    
    # ๆˆ–็”จ็ฌฆ่™Ÿ่กจ็คบ
    sudo chmod a+rwx,+t /srv/tmp
    

    ไน、็‰นๆฎŠไฝๅ…ƒๆ•ธๅญ—็ธฝๆ•ด็†:4 / 2 / 1 ่ˆ‡ 7xxx ๆจกๅผ

    ๅœจไฝฟ็”จ chmod ็š„ๅ››ไฝๆ•ธๆจกๅผๆ™‚,ๆœ€ๅ‰้ขไธ€ไฝๆ˜ฏ「็‰นๆฎŠไฝๅ…ƒ」:

    • 4xxx:setuid
    • 2xxx:setgid
    • 1xxx:sticky bit
    • 7xxx:setuid + setgid + sticky bit ๅ…จ้–‹(ๅฏฆๅ‹™ไธŠๅพˆๅฐ‘็”จๅˆฐ)。
    # ๅธธ่ฆ‹็ต„ๅˆ็ฏ„ไพ‹
    chmod 4755 file   # setuid + 755
    chmod 2755 dir    # setgid + 755(ๅธธ็”จๅœจๅฐˆๆกˆ็›ฎ้Œ„)
    chmod 1777 /tmp   # sticky + 777(ๅ…ฑไบซๆšซๅญ˜็ฉบ้–“)
    

    ๅ、ๅฏฆๅ‹™็ฏ„ไพ‹:ๅฆ‚ไฝ•่จญ่จˆไธ€ๅ€‹「ๅฅฝ็ถญ่ญท」็š„ๆฌŠ้™ๆžถๆง‹?

    10-1. Web ๆœๅ‹™ๆช”ๆกˆ่ˆ‡้ƒจ็ฝฒๆต็จ‹

    ๅ‡่จญไฝ ๆœ‰ไธ€ๅ€‹ Web App ๆ”พๅœจ /var/www/myapp,็”ฑ www-data ๅŸท่กŒ:

    # ๅปบ็ซ‹็พค็ต„่ˆ‡็›ฎ้Œ„
    sudo groupadd webdev
    sudo mkdir -p /var/www/myapp
    
    # ๅฐˆๆกˆๆˆๅ“กๅŠ ๅ…ฅ webdev ็พค็ต„
    sudo usermod -aG webdev alice
    sudo usermod -aG webdev bob
    
    # ่จญๅฎš็›ฎ้Œ„ๆ“ๆœ‰่€…่ˆ‡็พค็ต„
    sudo chown -R www-data:webdev /var/www/myapp
    
    # ่จญๅฎš setgid,็ขบไฟๆ–ฐๆช”ๆกˆ็พค็ต„ไธ€่‡ด
    sudo chmod 2775 /var/www/myapp
    
    # ่‹ฅๆœ‰ CI/CD ๅธณ่™Ÿ,ไนŸๅŠ ๅ…ฅ webdev ็พค็ต„
    sudo usermod -aG webdev gitlab-runner
    

    ๅฆ‚ๆญคไธ€ไพ†:

    • Web ็จ‹ๅผไปฅ www-data ่บซๅˆ†้‹ไฝœ。
    • ๅฐˆๆกˆๆˆๅ“ก้€้Ž webdev ็พค็ต„ๅ…ฑๅŒ็ถญ่ญทๆช”ๆกˆ。
    • setgid ่ฎ“ๆ‰€ๆœ‰ๆ–ฐๆช”ๆกˆ็š„็พค็ต„้ƒฝไฟๆŒ็‚บ webdev,ๆฌŠ้™ๆธ…ๆฅšไธ”ๅฅฝ็ฎก็†。

    10-2. ๅฐˆๆกˆๅ…ฑ็”จ็›ฎ้Œ„ + ACL ็ฒพ็ดฐๆŽงๅˆถ

    ่‹ฅไฝ ๆœ‰ไธ€ๅ€‹ๆ•ๆ„Ÿๅฐˆๆกˆ็›ฎ้Œ„,ๅช้–‹ๆ”พๆŒ‡ๅฎšไบบๅ“ก่ฎ€ๅฏซ:

    # ๅปบ็ซ‹็พค็ต„่ˆ‡็›ฎ้Œ„
    sudo groupadd finance
    sudo mkdir -p /srv/finance
    sudo chown root:finance /srv/finance
    
    # ็›ฎ้Œ„ๅŸบๆœฌๆฌŠ้™:็พค็ต„ๅฏ่ฎ€ๅฏซ,others ็„กๆฌŠ
    sudo chmod 2770 /srv/finance
    
    # ่‹ฅๆœ‰ๅ…ฉไฝๅค–้ƒจ็จฝๆ ธ่€…ๅช้œ€่ฎ€ๅ–ๆฌŠ้™
    sudo setfacl -m u:auditor1:rx,u:auditor2:rx /srv/finance
    sudo setfacl -m d:u:auditor1:rx,d:u:auditor2:rx /srv/finance
    

    ้€™ๆจฃๅฏไปฅ:

    • ้ฟๅ…็‚บไบ†็จฝๆ ธ่€…ๅปบ็ซ‹ๆ–ฐ็พค็ต„ / ่ชฟๆ•ดไธป่ฆ็พค็ต„。
    • ๆธ…ๆฅšๅˆ†้›ข「ๅฐˆๆกˆๆˆๅ“ก(ๅฏๅฏซ)」่ˆ‡「็จฝๆ ธ่€…(ๅช่ƒฝ่ฎ€)」。

    10-3. Log ๆช”่ฎ€ๅ–ๆฌŠ้™ๆŽง็ฎก

    ๅพˆๅคš็ถญ้‹ๆƒ…ๅขƒๅช้œ€่ฆ่ฎ“ๆŸไบ›ไบบ「็œ‹ log」่€Œไธ้œ€่ฆ root ๆฌŠ้™:

    # ๅปบ็ซ‹ logreader ็พค็ต„
    sudo groupadd logreader
    
    # ๆŒ‡ๅฎš log ็›ฎ้Œ„็พค็ต„่ˆ‡ๆฌŠ้™
    sudo chown -R root:logreader /var/log/myapp
    sudo chmod -R 2750 /var/log/myapp
    
    # ่‹ฅๆ‡‰็”จ็จ‹ๅผๆœฌ่บซ้œ€่ฆๅฏซๅ…ฅ,ๅฏๆญ้… setgid ๆˆ– ACL
    sudo setfacl -m u:myapp:rwX /var/log/myapp
    

    ๅไธ€、ๅฎ‰ๅ…จๆชขๆŸฅๆธ…ๅ–ฎ:ไธŠ็ทšๅ‰ๅ…ˆ่‡ชๅ•้€™ๅนพไปถไบ‹

    • ๆ˜ฏๅฆๆœ‰ไธๅฟ…่ฆ็š„ setuid ๆจ™่จ˜?ๆœ‰ๆฒ’ๆœ‰ๅฎšๆœŸๆŽƒๆ?
    • ๅ…ฑไบซ็›ฎ้Œ„(ๅฐคๅ…ถๆ˜ฏ /tmp ้กžๅž‹)ๆ˜ฏๅฆ้ƒฝๆœ‰่จญๅฎš sticky bit?
    • ๅฐˆๆกˆ็›ฎ้Œ„ๆ˜ฏๅฆไฝฟ็”จ setgid ็ขบไฟ็พค็ต„ไธ€่‡ด,้ฟๅ…「้ƒจๅˆ†ๆช”ๆกˆๆฌŠ้™ๆ€ชๆ€ช็š„」?
    • ACL ๆ˜ฏๅฆ็œŸ็š„ๆœ‰้œ€่ฆ?ๅฆ‚ๆžœๅŸบๆœฌ user/group ๆจกๅž‹ๅฐฑ่ƒฝๆปฟ่ถณ,ๅ„ชๅ…ˆไฝฟ็”จๅ‚ณ็ตฑๆฌŠ้™่ผƒๆ˜“็ถญ่ญท。
    • ๅ‚™ไปฝ่ˆ‡้‚„ๅŽŸๆต็จ‹ๆ˜ฏๅฆๆœ‰ไฟ็•™ ACL ่ˆ‡ extended attributes?

    ๐Ÿงญ ่กŒๅ‹•ๆธ…ๅ–ฎ(ๅฏไปฅ็›ดๆŽฅ็…งๅš)

    ✅ ๅœจๆธฌ่ฉฆ็’ฐๅขƒไธญ็ทด็ฟ’ getfacl / setfacl(ๅ–ฎไธ€ๆช”ๆกˆ + ็›ฎ้Œ„ + default ACL)
    ✅ ็‚บไฝ ็š„ๅฐˆๆกˆ็›ฎ้Œ„่จญ่จˆไธ€ๅ€‹「็พค็ต„ + setgid」ๆจกๅผ,็ขบไฟๆฌŠ้™ไธ€่‡ด
    ✅ ๅปบ็ซ‹ไธ€ๅ€‹้กžไผผ /tmp ็š„ๅ…ฑไบซๆšซๅญ˜็ฉบ้–“,ๅฏฆไฝœ sticky bit
    ✅ ไฝฟ็”จ find ๆŽƒๆ็ณป็ตฑไธŠ็š„ๆ‰€ๆœ‰ setuid / setgid ๅŸท่กŒๆช”,ๆ•ด็†ๅ‡บ「ๅ…่จฑๆธ…ๅ–ฎ」
    ✅ ๆชขๆŸฅๅ‚™ไปฝๅทฅๅ…ท่จญๅฎš,็ขบ่ชๆ˜ฏๅฆๆœ‰ไฟ็•™ ACL / xattr(ๅฆ‚ rsync -aAX)

    ๐Ÿ”— ๅปถไผธ้–ฑ่ฎ€

    — WWFandy・Linux ๆฌŠ้™่ˆ‡ๅฎ‰ๅ…จ็ญ†่จ˜

    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš