๐ง Linux ไฝฟ็จ่ ่ๆฌ้้ฒ้ๆๅ:useradd、็พค็ต็ฎก็่ ACL ๅฏฆๆฐ
ๅจๅฎๆฉๆกๆฉไธ,ๅพๅคไบบๅชๆๅปบ็ซไธๅๅธณ่,ๆฌ้ๅ้กๅฅฝๅไธๆ้กฏ;ไฝๅจ ๅคไบบๅ ฑ็จ、ๅๆ่ทๅคๅๆๅ็ Linux ไผบๆๅจ ไธ, ไฝฟ็จ่ ่ๆฌ้่จญ่จๅฐฑๆ็ดๆฅๅฝฑ้ฟๅฐๅฎๅ จๆง่็ถญ้ๆ็。
ๆฌ็ฏๆ็ซ ไปฅ「็พ็ง็ด」็ๆทฑๅบฆ,ๅฎๆด่ชชๆ Linux ็ ่บซๅๆจกๅ(User / Group / Others)、 ไฝฟ็จ่ ่็พค็ต็ฎก็、ๅณ็ตฑๆชๆกๆฌ้, ไปฅๅๆด้ฒ้็ ACL(Access Control List)ๅฏฆๆฐๆ็จ。 ไฝ ๅฏไปฅๆ้็ฏ็ถๆ:ๅปบ็ซไธๅฐๅคไบบๅ ฑไบซ Linux ไผบๆๅจไนๅ,ๅฟ ่ฎ็ๆฌ้่จญ่จๆๅ。
ไธ、Linux ็่บซๅ่ๆฌ้ๆจกๅๆฆๅฟต
ๅจๆไฝๆไปคไนๅ,ๅ ๅผๆๅนพๅ้้ตๅ่ฉ:
- UID(User ID):ๆฏๅๅธณ่่ๅพ้ฝๆไธๅๆธๅญ ID。
- GID(Group ID):ๆฏๅ็พค็ตไนๆไธๅ ID。
- user / group / others:ๆชๆกๆฌ้ๅๆไธ็ต่บซๅ。
- root:UID ็บ 0 ็่ถ ็ดไฝฟ็จ่ ,ๅนพไนๅฏไปฅๅไปปไฝไบๆ 。
- shell:/bin/bash、/bin/zsh… ไฝฟ็จ่ ็ปๅ ฅๅพๆไฝ็็ฐๅข。
ๅฏไปฅ็จ id ๆไปค็็่ชๅทฑ็ฎๅ็่บซๅ:
id
id <username>
่ผธๅบๅคง่ดๅ้ๆจฃ:
uid=1000(wwfandy) gid=1000(wwfandy) groups=1000(wwfandy),27(sudo),999(docker)
- uid=1000:ไฝฟ็จ่ ID。
- gid=1000:ไธป่ฆ็พค็ต ID。
- groups=...:้ๅ ็พค็ต(่ฃๅ ๆฌ้็้่ฆไพๆบ)。
Linux ่จญ่จ็ๆ ธๅฟ็ฒพ็ฅๆฏ:ไธๅ็ๆชๆก、ๆๆๆไฝ้ฝๅฟ ้ ็ถ้ๆฌ้ๆชขๆฅ。 ๅ ๅซๆชๆก、็ฎ้、่ฃ็ฝฎ็ฏ้ป、Socket、Pipe,้ฝๆๆๆ่ ่ๆฌ้่จญๅฎ。
ไบ、้่ฆ็ๅธณ่่็พค็ต็ธ้็ณป็ตฑๆช
ไฝฟ็จ่ ่็พค็ต่ณ่จไธป่ฆๅฒๅญๅจ้ๅนพๅๆชๆก:
/etc/passwd:ๅธณ่ๅบๆฌ่ณๆ(ๅ็จฑ、UID、GID、ๅฎถ็ฎ้、้ ่จญ shell)。/etc/shadow:ๅฏ็ขผ้ๆน่ๅฏ็ขผๆฟ็ญ(ๅชๆ root ็ๅพๅฐ)。/etc/group:็พค็ตๅ็จฑ่ GID,ไปฅๅๆๅกๅ่กจ。
ๅฏไปฅ็จ getent ๆไปคๆฅ่ฉข:
getent passwd wwfandy
getent group sudo
ๅปบ่ญฐ้ฟๅ
็ดๆฅๆๆน้ไบๆชๆก,้ค้้ๅธธ็ๆๆ ผๅผ;ๅคงๅคๆธๆ
ๆณ่ซไฝฟ็จ
useradd、usermod、groupadd ็ญๆไปค้ฒ่ก็ฎก็。
ไธ、ไฝฟ็จ่ ๅธณ่็ฎก็:useradd / passwd / usermod / userdel
1. ๆฐๅขไธ่ฌไฝฟ็จ่
ๆๅธธ่ฆ็ๆ ๅข:็บๅไบๆๆๅๅปบ็ซไธๅๆฐ็ๅธณ่。
# ๅปบ็ซๆฐๅธณ่ alice,ไธฆๅปบ็ซๅฎถ็ฎ้ /home/alice
sudo useradd -m alice
# ่จญๅฎๅฏ็ขผ
sudo passwd alice
ๆไบ็ผ่ก็(ไพๅฆ Debian/Ubuntu)ๆๅๅฅฝไฝฟ็จ adduser ้ๅๆฏ่ผ่ฆชๅ็ไบๅๅผๅ
่ฃๆไปค,
ไฝๅบๅฑค้ๆฏๅผๅซ useradd。
2. ๅธธ็จ useradd ๅๆธ
sudo useradd -m -s /bin/bash -c "ๅฐๆกA ้็ผ่
" alice
-m:่ชๅๅปบ็ซๅฎถ็ฎ้。-s:ๆๅฎ้ ่จญ shell。-c:ๅ่จปๆฌไฝ(ๅจ /etc/passwd ็ GECOS)。-u:่ช่จ UID(็นๆฎๆ ๅขๆ้่ฆ)。
3. ไฟฎๆนๅธณ่ๅฑฌๆง:usermod
# ๆ alice ็้ ่จญ shell ๆนๆ zsh
sudo usermod -s /bin/zsh alice
# ๆ alice ๅ ๅฐ sudo ็พค็ต(้ๅ ็พค็ต)
sudo usermod -aG sudo alice
ๅ
ถไธญ -aG ้ๅธธ้่ฆ:-a ไปฃ่กจ「append」,ๆฒๆ้ๅๆ่ฆ่ๆไฝฟ็จ่
ๅๆ็้ๅ ็พค็ต。
4. ๅช้คๅธณ่:userdel
# ๅ
ๅช้คๅธณ่,ไฟ็ๅฎถ็ฎ้
sudo userdel alice
# ๅช้คๅธณ่ไธฆ้ฃๅๅฎถ็ฎ้ไธ่ตท็งป้ค(่ซ่ฌนๆ
)
sudo userdel -r alice
ๅจๆญฃๅผ็ฐๅขๅปบ่ญฐๅ
้ๅฎๅธณ่(passwd -l ๆๅ็จ็ปๅ
ฅ),่งๅฏไธๆฎตๆ้็ขบ่ชๆฒๆๆๅไพ่ณดๅพ,
ๅๆฑบๅฎๆฏๅฆๆธ
้คๅฎถ็ฎ้。
ๅ、็พค็ต็ฎก็:groupadd / gpasswd ่ primary / supplementary groups
Linux ็ๆฌ้ๅคๅๆฏ「ไฝฟ็จ่ + ็พค็ต」ไธ่ตท่จญ่จ。 ไธๅไฝฟ็จ่ ้ๅธธๆๆ:
- ไธป่ฆ็พค็ต(primary group):ๅจ /etc/passwd ไธญ่จ้็้ฃๅ GID。
- ้ๅ ็พค็ต(supplementary groups):้กๅค่ขซๅ ้ฒๅป็็พค็ต。
1. ๆฐๅข็พค็ต
# ๅปบ็ซไธๅๅฐๆก็พค็ต projectA
sudo groupadd projectA
2. ๆไฝฟ็จ่ ๅ ๅ ฅ็พค็ต
# ่ฎ alice ๅ ๅ
ฅ projectA
sudo usermod -aG projectA alice
# ไนๅฏไปฅ็จ gpasswd ็ฎก็
sudo gpasswd -a alice projectA
3. ๆชขๆฅ็พค็ต
id alice
getent group projectA
ๅฏฆๅไธๅพๅธธ่ฆ็ๅๆณๆฏ:ๆฏไธๅๅฐๆกๅปบ็ซไธๅ็พค็ต,ๅๅฐ้่ฆๆฌ้็ไบบๅ จ้จๅ ้ฒ่ฉฒ็พค็ต, ๅฆๆญคไธ้่ฆๅฐๆฏๅๆชๆก้ไธ่จญๅฎๅคๅๅธณ่,ๅช่ฆไฝฟ็จ่ ๆ「็พค็ต่บซๅ」ๅณๅฏ。
ไบ、ๅณ็ตฑๆชๆกๆฌ้:rwx / chmod / chown / chgrp
1. ls -l ๆฌ้ๆฌไฝ่งฃ่ฎ
ls -l
-rw-r----- 1 alice projectA 4096 Nov 15 10:00 report.txt
drwxrws--- 2 root projectA 4096 Nov 15 09:00 /srv/projectA
- ็ฌฌ 1 ๅๅญๅ :ๆชๆก้กๅ(- ไธ่ฌๆชๆก、d ็ฎ้、l ่ป้ฃ็ต…)。
- ๅพ้ข 9 ๅๅญๅ ๅๆไธ็ต:user / group / others ็ rwx。
- ไธไพ
-rw-r-----่กจ็คบ:- ๆๆ่ (alice):่ฎๅฏซ。
- ็พค็ต(projectA):่ฎ。
- ๅ ถไปไบบ:ๆฒๆไปปไฝๆฌ้。
2. chmod ๆธๅญ่็ฌฆ่็จๆณ
# ๆธๅญ่กจ็คบๆณ:owner/group/others
chmod 640 report.txt
# ็ฌฆ่่กจ็คบๆณ:u/g/o/a + +/-/=
chmod g+w report.txt # ็ตฆ็พค็ตๅฏซๅ
ฅๆฌ้
chmod o-r report.txt # ๆฟๆๅ
ถไปไบบ็่ฎๅๆฌ้
chmod a-x script.sh # ๆๆไบบ้ฝไธ่ฝๅท่ก
3. chown ่ chgrp:่ชฟๆดๆชๆกๆๆ่ ่็พค็ต
# ๆน่ฎๆชๆกๆๆ่
่็พค็ต
sudo chown alice:projectA report.txt
# ๅ
่ฎๆด็พค็ต
sudo chgrp projectA report.txt
ๅฐๆผๅฐๆก็ฎ้,ๅฏไปฅไธๆฌก่ชฟๆดๆดๆฃต็ฎ้็ตๆง:
sudo chown -R root:projectA /srv/projectA
4. setgid ่็ฎ้็นผๆฟ็พค็ต
ๅฐๆผ「ๅคไบบๅ ฑ็จ็ๅฐๆก็ฎ้」,ๅพๅธธๆๆญ้ ็ฎ้็ setgid ไฝๅ :
sudo chmod 2770 /srv/projectA # 2 ไปฃ่กจ setgid
้ๆจฃ,ๅจ /srv/projectA ๅบไธๆฐๅปบ็ซ็ๆชๆก,็พค็ตๆ่ชๅ็นผๆฟ็บ projectA, ่ไธๆฏๅไฝฟ็จ่ ่ชๅทฑ็ไธป่ฆ็พค็ต。้ๆฏๅไฝ็ฐๅขไธญๅพ้่ฆ็ไธๅ็ดฐ็ฏ。
ๅ ญ、็บไฝ้่ฆ ACL?ๅณ็ตฑๆฌ้็้ๅถ
ๅณ็ตฑ็ rwx ๆฌ้ๆจกๅ,ๅฐ่ฑกๅชๆไธ้ก:user / group / others。 ๅจๆไบๆ ๅขๆไธๅคชๅค ็จ,ไพๅฆ:
- ๅฐๆก็พค็ต projectA ๆณๅ ฑ็จ่ณๆๅคพ,ไฝๅชๆณ้กๅค้ๆพ「ๅช่ฎ」็ตฆ audit ๅธณ่。
- ๆๅๆชๆก้่ฆๅๆ่ฎๅ ฉๅ็พค็ตๅฏ่ฎๅฏซ(ไพๅฆ dev ่ ops)。
ๅฆๆๅช้ ๅณ็ตฑๆฌ้,ๅธธๅธธ้่ฆ็กฌๅ็พค็ตๆๅปบ็ซ้กๅค่ค้็็ฎ้็ตๆง。 ้ๆๅๅฐฑๅฏไปฅไฝฟ็จ ACL(Access Control List) ไพๅๆด็ดฐ็ทป็ๆงๅถ。
ๅธธ่ฆๆไปค:
getfacl:ๆฅ็ ACL。setfacl:่จญๅฎ ACL。
็ขบ่ชๆชๆก็ณป็ตฑๆๆฏๆด ACL(ๅคง้จๅ ext4、xfs ้ ่จญ้ฝๆฏๆด):
mount | grep -E 'ext4|xfs'
# ๅฆๆๆ็ๅฐ acl ้ธ้
,ๅฐฑไปฃ่กจๅทฒๅ็จ ACL ๆฏๆด
ไธ、ACL ๅฏฆๆฐ:้ๅฐ็นๅฎไฝฟ็จ่ ่็พค็ต็ดฐ็ทปๆๆฌ
1. ๅฐ็นๅฎไฝฟ็จ่ ้ๆพ่ฎๅๆฌ้
ๅ่จญ:
/srv/projectAๆฏๅฐๆก็ฎ้。auditๅธณ่้่ฆๅช่ฎๆฌ้ๆชข่ฆๆชๆก。
# ๅ
็ขบไฟๅบๆฌๆฌ้ไธๅฐ others ้ๆพ
sudo chmod -R 770 /srv/projectA
# ๅฐไฝฟ็จ่
audit ้ๆพ「่ฎๅ่ๅท่ก」(X ่กจ็คบ็ฎ้ๅฏ้ฒๅ
ฅ)
sudo setfacl -R -m u:audit:rx /srv/projectA
# ๆฅ็ ACL
getfacl /srv/projectA
่ผธๅบ็ฏไพ:
# file: srv/projectA
# owner: root
# group: projectA
user::rwx
user:audit:rx
group::rwx
mask::rwx
other::---
้ไปฃ่กจ้คไบ็พค็ต projectA ็ๆๅกไปฅๅค,audit ไน้กๅค่ขซๆๆฌๅฏ่ฎๅๅ งๅฎน, ่ๅ ถไปไบบ(others)ไพ็ถๆฒๆไปปไฝๆฌ้。
2. ๅฐๆดๅ็ฎ้่จญๅฎ「้ ่จญ ACL」
ๅฆๆๅช่จญๅฎๅฎไธๆชๆก็ ACL,ๆฐๅปบ็ซ็ๆชๆกไธๆ่ชๅๅฅ็จ。 ๅ ๆญคๅจ็ฎ้ไธๅธธๆๅ่จญๅฎไธ็ต default ACL:
sudo setfacl -R -m u:audit:rx /srv/projectA
sudo setfacl -R -m d:u:audit:rx /srv/projectA
d: ไปฃ่กจ default ACL,ๆๅฅ็จๅฐๆชไพๅจๆญค็ฎ้ๅบไธๆฐๅปบ็ซ็ๆชๆกๆ็ฎ้。
3. ๅๆ็ตฆๅคๅ็พค็ตๆฌ้
ๅฆไธๅๅธธ่ฆๆกไพ:้็ผๅ้ dev ่็้ๅ้ ops ้ฝ้่ฆๅฏซๅ ฅๆฌ้。
sudo mkdir -p /srv/shared
sudo chown root:dev /srv/shared
sudo chmod 2770 /srv/shared # ๅบ็คๆฌ้็ตฆ dev
# ้กๅค็ตฆ ops ็พค็ต่ฎๅฏซๆฌ้
sudo setfacl -m g:ops:rwx /srv/shared
sudo setfacl -m d:g:ops:rwx /srv/shared
้ๆจฃๅช่ฆไฝฟ็จ่ ๆฏ dev ๆ ops ็ๆๅก,ๅฐฑๅฏไปฅๅจ /srv/shared ่ฃก่ช็ฑๅไฝ, ๅคงๅน ๆธๅฐ「็บไบๆฌ้」่่ขซ่ฟซ่ค่ฃฝไธๅ ่ณๆๅคพ็ๆ ๆณ。
ๅ ซ、ๅฎๆด็ฏไพ:ๅปบ็ซไธๅๅฎๅ จ็ๅฐๆกๅไฝ็ฐๅข
็ถๅๅ้ขๅ งๅฎน,ๆๅ่จญ่จไธๅๅฏฆๆฐๆ ๅข:
- ๅฐๆกๅ็จฑ:
projectA - ้็ผ่ :alice、bob
- ็จฝๆ ธ่ :audit(ๅช่ฎ)
- ๅฐๆก่ณๆๅคพ:
/srv/projectA
ๆญฅ้ฉ 1:ๅปบ็ซ็พค็ต่ไฝฟ็จ่ (่ฅๅฐๆชๅปบ็ซ)
sudo groupadd projectA
sudo useradd -m alice
sudo useradd -m bob
sudo useradd -m audit
sudo passwd alice
sudo passwd bob
sudo passwd audit
ๆญฅ้ฉ 2:ๆ้็ผ่ ๅ ๅ ฅ projectA ็พค็ต
sudo usermod -aG projectA alice
sudo usermod -aG projectA bob
ๆญฅ้ฉ 3:ๅปบ็ซๅฐๆก็ฎ้,่จญๅฎๆๆ่ ่็พค็ต
sudo mkdir -p /srv/projectA
sudo chown root:projectA /srv/projectA
sudo chmod 2770 /srv/projectA # setgid + 770
ๅฆๆญคไธไพ,ๅฐๆก่ฃก็ๆชๆก้ ่จญ็ฑ root ๆๆ,็พค็ต็บ projectA,ๅชๆๅฐๆก็พค็ตๆๅก็ๅพๅฐ, ไธฆ้ฟๅ ่ชคๆๆฌ้้ๆพ็ตฆ others。
ๆญฅ้ฉ 4:ไฝฟ็จ ACL ็ตฆ audit ๅช่ฎๆฌ้
sudo setfacl -R -m u:audit:rx /srv/projectA
sudo setfacl -R -m d:u:audit:rx /srv/projectA
็พๅจ,ๆๅๅฎๆไธๅ็ฌฆๅๅฏฆๅ้ๆฑ็ๆฌ้่จญ่จ:
- alice / bob:ๅฏๅจ /srv/projectA ๅ ง่ฎๅฏซ่ๅปบ็ซๆชๆก。
- audit:ๅฏ้ๆญท่้ฑ่ฎๆๆๅ งๅฎน,ไฝไธ่ฝไฟฎๆน。
- ๅ ถไปๅธณ่:ๆฒๆไปปไฝๆฌ้。
ไน、ๅธธ็จๆชขๆฅ่้ค้ฏๆๅทง
้ๅฐ「็บไป้บผๆไธ่ฝ่ฎ / ๅฏซ้ๅๆชๆก?」้้กๅ้กๆ,ๅฏไปฅไพๅบๆชขๆฅ:
- ็ขบ่ช่บซๅ:
id็็่ชๅทฑๆๅชไบ็พค็ต。 - ๆฅ็ๆชๆกๆฌ้:
ls -l็ๅณ็ตฑ rwx。 - ๆฅ็ ACL:
getfacl <ๆชๆกๆ็ฎ้>。 -
ๆจกๆฌไปฅๆๅไฝฟ็จ่
ๅท่ก(้่ฆ sudo):
sudo -u alice ls /srv/projectA
ๅฆๆๆฏ็ฎ้ๅฑค็ด็ๆฌ้ๅ้ก,่จๅพ่ฆไธ่ทฏๅพไธๆชขๆฅ,ไพๅฆ
/srv ๆฌ่บซๆฏๅฆๅฐ่ฉฒไฝฟ็จ่
ๆ「ๅท่ก(x)」ๆฌ้,ๅฆๅๅณไฝฟๅบไธ็ฎ้้ๅพๅๅคงไน้ฒไธๅป。
ๅ、ๅฎๅ จ่็ถญ้ๅปบ่ญฐ:ๆๆฌ้่จญ่จๆไธๅฅๆจๆบ
ๆๅพๆด็ๅนพๅๅฏฆๅไธ้ๅธธ้่ฆ็ๅๅ,ๅปบ่ญฐๅจ่ชๅทฑๆๅ้็ไผบๆๅจ SOP ไธญๅบๅฎไธไพ:
-
ๅๅ 1:้ฟๅ
ไปฅ root ็ดๆฅ็ปๅ
ฅ
ไฝฟ็จ sudo ๅงๆดพ็ฎก็ๆฌ้,ไธฆ่จ้ๅจ sudo log ่ฃก,ๆฏ่ผๅฎนๆ็จฝๆ ธ。 -
ๅๅ 2:ไธๅๆๅไธๅๅธณ่
ไพๅฆ web、db、backup ๅๅฅ็จ www-data、postgres、backupuser ็ญ, ็ผ็ๅ้กๆๆฏ่ผๅฅฝๅๅฒๆฌ้่้ขจ้ช。 -
ๅๅ 3:ๅฐๆกๅฐๅ็็พค็ต่จญ่จ
ๆฏๅๅฐๆกๅปบ็ซไธๅ็พค็ต(projectA、projectB…),ไฝฟ็จ่ ้้็พค็ต็ฒๅพๆฌ้,่ไธๆฏ็ดๆฅ็ตฆๅๅฅๅธณ่。 -
ๅๅ 4:ๆๆ่ณๆไธๅพ้้ others ๆฌ้
่จญๅฎ็บ 750、770、700 ้กๅ็ๆฌ้,ไธฆๆญ้ ACL ็ตฆ้่ฆ็ไบบ็ฒพๆบๆๆฌ。 -
ๅๅ 5:ๅฎๆๆชขๆฅไพๅค ACL
ACL ๅพๅผทๅคง,ไฝไนๅฎนๆ่ขซ้บๅฟ。ๅปบ่ญฐๅฎๆๆๆ้้ต็ฎ้,ๆด็ๅบ「่ชฐๅคไบๅชไบ็นๅฅๆฌ้」。
็ถไฝ ๆ「ๅธณ่ๅปบ็ซ、็พค็ตๅ้ 、็ฎ้็ตๆง、ๅๅงๆฌ้、ACL ่ฆๅ」้ๅนพไปถไบๆด็ๆไธๅฅ ๆจๆบๆต็จ(SOP) ไนๅพ,ๆฐๅฐๆก、ๆฐๅไบๅ ๅ ฅ้ฝๅฏไปฅๅฟซ้่ค่ฃฝๅๆจฃ็ๅฎๅ จๆฐดๆบ, ไน่ฎๆชไพ็็ถญ้、็จฝๆ ธ่ๅ้กๆๆฅๆดๅ ๆธ ๆฅ。
✅ ๅฆๆไฝ ๅทฒ็ถ็ๆๆฌๆ็ useradd、็พค็ต่ ACL ่งๅฟต,ไธไธๆญฅๅฏไปฅๆญ้ SSH ๅฎๅ จๅผทๅ、ๅไปฝ่ๆฅ่ช็ฃๆง ไธ่ตท่จญ่จๅบๅฎๆด็ Linux ไผบๆๅจๅฎๅ จๅบๆบ(Baseline), ่ฎๆฏไธๅฐๆฐไธ็ท็ไธปๆฉ้ฝ็ฌฆๅๅๆจฃ็ๅฎๅ จ่ๆฌ้ๆฟ็ญ。
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ