วัน: 26 กรกฎาคม 2026

เทคนิคตั้งค่า umask 002 ให้กับทุก User บน Mac อัตโนมัติผ่าน Terminal (Batch Script)เทคนิคตั้งค่า umask 002 ให้กับทุก User บน Mac อัตโนมัติผ่าน Terminal (Batch Script)

เมื่อเราจำเป็นต้องแชร์ทรัพยากรส่วนกลางในเครื่อง Mac ร่วมกันหลายคน (เช่น โฟลเดอร์ดาวน์โหลด, พื้นที่โปรเจกต์ หรือระบบแพ็กเกจอย่าง Homebrew) ปัญหาหลักที่มักจะเจอคือ “ไฟล์ที่สร้างขึ้นใหม่ติดสิทธิ์ Owner คนเดิม จน User คนอื่นในกลุ่มเดียวกันแก้ไขไม่ได้”

วิธีการแก้ไขปัญหาถาวรคือการเปลี่ยนค่า umask ให้เป็น 002 เพื่อให้กลุ่ม (Group) มีสิทธิ์เขียนไฟล์ได้เสมอ แต่แทนที่จะต้องให้ User ทุกคนสลับหน้าจอมาพิมพ์คำสั่งเองทีละบัญชี เราสามารถใช้ Bash/Zsh Loop Script รันด้วยสิทธิ์ Admin เพียงครั้งเดียว เพื่อเข้าไปเขียนไฟล์คอนฟิก ~/.zshrc ให้กับทุก User ในเครื่องพร้อมกันได้ทันทีครับ


🚀 โค้ดคำสั่ง Batch Script

ให้เปิด Terminal จากบัญชีที่มีสิทธิ์ Admin จากนั้นก๊อบปี้คำสั่ง 3 ขั้นตอนนี้ไปใช้งานได้เลยครับ

  1. เปลี่ยนสิทธิ์ปัจจุบันให้เป็น Root
    เนื่องจากระบบควบคุมการเข้าถึง (Sandbox) ของ macOS จะบล็อกไม่ให้บัญชี Admin ทั่วไปเข้าไปแก้ไขไฟล์ข้ามไปที่ Home Directory ของ User คนอื่นตรงๆ เราจึงต้องสลับ Shell ให้เป็น Root ก่อน
    sudo -s
    (ระบบจะถามรหัสผ่านของ Admin ให้กรอกให้เรียบร้อย)
  2. รัน Script ลูปปรับแต่งทุกบัญชี
    ก๊อบปี้บล็อกคำสั่งนี้ทั้งหมด แล้ววางลงใน Terminal ได้เลยครับ
    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
    
  3. ออกจากสิทธิ์ Root
    เมื่อ Script ทำงานเสร็จสิ้น ให้พิมพ์คำสั่งนี้เพื่อกลับมาเป็นสิทธิ์ User ปกติเพื่อความปลอดภัย
    exit

🔍 เจาะลึกการทำงานของ Script (ตัวนี้ทำอะไรบ้าง?)

เพื่อความปลอดภัยในการนำสคริปต์ระดับระบบไปใช้ มาดูการทำงานทีละบรรทัดกันครับ

  1. dscl . -list /Users NFSHomeDirectory: คำสั่งดั้งเดิมของ macOS ในการเข้าไปดึงฐานข้อมูล Directory Services เพื่อตรวจสอบว่าในเครื่องมี User ชื่ออะไรบ้าง และใช้โฟลเดอร์ Home อยู่ที่ไหน
  2. awk '$2 ~ /^\/Users/ ...': ทำหน้าที่กรองบัญชีระบบออก (เช่น daemon, nobody) โดยจะเลือกเฉพาะบัญชีมนุษย์ทั่วไปที่มีโฟลเดอร์เริ่มต้นขึ้นต้นด้วย /Users/ เท่านั้น
  3. grep -q "umask 002": เช็กในไฟล์ ~/.zshrc ของแต่ละคนก่อน ถ้ามีคำสั่งนี้อยู่แล้ว ระบบจะแสดงสถานะ [-] Skipping ข้ามไป เพื่อรักษาความสะอาดของโค้ดคอนฟิก
  4. chown "$owner":staff: ตัวนี้เป็นหัวใจสำคัญครับ เพราะการที่เราสลับร่างเป็น Root (ในขั้นตอน sudo -s) เพื่อเปิดประตูเข้าไปเขียนไฟล์ให้คนอื่น ตัวไฟล์ .zshrc ของพวกเขาก็จะตกเป็นสิทธิ์ของ Root ไปด้วยทันที ซึ่งจะทำให้เจ้าตัวรันโปรแกรมระบบของตัวเองไม่ได้ คำสั่งนี้จึงทำหน้าที่ “โอนคืนสิทธิ์” กลับไปให้เจ้าของตัวจริงและกลุ่ม staff ได้เข้าถึงอย่างสมบูรณ์

🎯 ผลลัพธ์ที่ได้

เมื่อรันสคริปต์เสร็จ หน้าจอ Terminal จะแสดงรายงานผลแยกรายชื่อแบบชัดเจน

[+] User: pitt -> Adding umask 002
[-] User: phunsanit -> Skipping (umask 002 already exists)
[+] User: pp -> Adding umask 002

เพียงเท่านี้ หลังจากที่ User แต่ละคนเปิดหน้าจอ Terminal ขึ้นมาใหม่ ค่า umask 002 จะเปิดทำงานอัตโนมัติเบื้องหลัง ทำให้ทุกไฟล์ที่พวกเขาสร้างหรือดาวน์โหลดลงในพื้นที่ส่วนกลางของกลุ่ม สมาชิกคนอื่นๆ จะสามารถแก้ไข ลบ หรือเขียนทับได้อย่างอิสระ โดยไม่ติดขัดเรื่องสิทธิ์อีกต่อไปครับ


อ่านเพิ่มเติม