เมื่อเราจำเป็นต้องแชร์ทรัพยากรส่วนกลางในเครื่อง Mac ร่วมกันหลายคน (เช่น โฟลเดอร์ดาวน์โหลด, พื้นที่โปรเจกต์ หรือระบบแพ็กเกจอย่าง Homebrew) ปัญหาหลักที่มักจะเจอคือ “ไฟล์ที่สร้างขึ้นใหม่ติดสิทธิ์ Owner คนเดิม จน User คนอื่นในกลุ่มเดียวกันแก้ไขไม่ได้”
วิธีการแก้ไขปัญหาถาวรคือการเปลี่ยนค่า umask ให้เป็น 002 เพื่อให้กลุ่ม (Group) มีสิทธิ์เขียนไฟล์ได้เสมอ แต่แทนที่จะต้องให้ User ทุกคนสลับหน้าจอมาพิมพ์คำสั่งเองทีละบัญชี เราสามารถใช้ Bash/Zsh Loop Script รันด้วยสิทธิ์ Admin เพียงครั้งเดียว เพื่อเข้าไปเขียนไฟล์คอนฟิก ~/.zshrc ให้กับทุก User ในเครื่องพร้อมกันได้ทันทีครับ
🚀 โค้ดคำสั่ง Batch Script
ให้เปิด Terminal จากบัญชีที่มีสิทธิ์ Admin จากนั้นก๊อบปี้คำสั่ง 3 ขั้นตอนนี้ไปใช้งานได้เลยครับ
- เปลี่ยนสิทธิ์ปัจจุบันให้เป็น Root
เนื่องจากระบบควบคุมการเข้าถึง (Sandbox) ของ macOS จะบล็อกไม่ให้บัญชี Admin ทั่วไปเข้าไปแก้ไขไฟล์ข้ามไปที่ Home Directory ของ User คนอื่นตรงๆ เราจึงต้องสลับ Shell ให้เป็น Root ก่อนsudo -s
(ระบบจะถามรหัสผ่านของ Admin ให้กรอกให้เรียบร้อย) - รัน Script ลูปปรับแต่งทุกบัญชี
ก๊อบปี้บล็อกคำสั่งนี้ทั้งหมด แล้ววางลงใน Terminal ได้เลยครับBASH / Shell
BASH / Shell
for user_home in $(dscl . -list /Users NFSHomeDirectory | awk '$2 ~ /^\/Users/ {print $2}'); do owner=$(basename "$user_home") zshrc_file="${user_home}/.zshrc" # 1. ตรวจสอบก่อนว่าเคยตั้งค่า umask 002 ไปแล้วหรือยัง (เพื่อป้องกันคำสั่งซ้ำซ้อน) if [ -f "$zshrc_file" ] && grep -q "umask 002" "$zshrc_file"; then echo "[-] User: $owner -> Skipping (umask 002 already exists)" else # 2. ทำการเขียนคำสั่งลงท้ายไฟล์ ~/.zshrc ของ User นั้นๆ echo "[+] User: $owner -> Adding umask 002" echo -e "\n# Homebrew Multi-User Config\numask 002" >> "$zshrc_file" # 3. คืนสิทธิ์ความเป็นเจ้าของไฟล์ให้ User คนนั้นๆ (ป้องกันสิทธิ์ค้างที่ Root) chown "$owner":staff "$zshrc_file" fi done