ติดตั้ง Debian Bookworm ใหม่ วันนี้บน VPS ของ cloudcone แล้วเจอว่า คำสั่ง ping มีปัญหาถ้าใช้งานจาก ผูัใช้ธรรมดาที่ไม่ใช่ root โดยเจอ
cj@cc1:~$ ping www.google.com
2023-09-07 on cc1
ping: socktype: SOCK_RAW
ping: socket: Operation not permitted
ping: => missing cap_net_raw+p capability or setuid?
เอาล่ะ มีปัญหาเรื่อง capability ล่ะ จะ set มันยังไง ยังไม่อยากแก้ปัญหาด้วย setuid root
Search google ก็ไปเจอ
https://unix.stackexchange.com/questions/592911/how-does-ping-work-on-fedora-without-setuid-and-capabilities
คำตอบที่น่าสนใจคือเรื่องของ ping group range ใน sysctl ซึ่งก็ไม่ตรงกับ capability โดยตรงสักเท่าไหร่ ลองหาดูจาก sysctl -a | grep ping_group_range ก็เจอเฉพาะ ipv4 ไม่มีของ ipv6 ค่าตั้งต้นเป็น 1 0
root@cc1:/home/cj# sysctl -a | grep net.ipv4.ping_group_range
net.ipv4.ping_group_range = 1 0
ซึ่งเป็น range เริ่มต้นที่ 1 และจบที่ 0
ซึ่งถ้าเป็นตามนี้จริงๆก็คือ ไม่มีใครใช้งานได้เลยแม้กระทั่ง root แต่จริงๆไม่ใช่ เพราะทดลองใช้ root แล้วก็สามารถ ping ได้ ไม่มีปัญหา
แต่เพื่อจะให้มันใช้งานได้ก่อน เพราะ cloudcone agent มันต้องการฟังก์ชันส่วนนี้ในการ monitor ตัว server อยู่ก็เลยไปเพิ่มไฟล์ 999-ping.conf ใน /etc/sysctl.d
echo “net.ipv4.ping_group_range=0 4294967295” > /etc/sysctl.d/999-ping.conf
ตามตัวอย่างใน stackexchange ซึ่งไม่ work ต้องเปลี่ยนค่า group ตัวหลังเป็น 65535 ถึงจะใช้งานได้
root@cc1:/home/cj# sysctl -p /etc/sysctl.d/999-ping.conf
sysctl: setting key “net.ipv4.ping_group_range”: Invalid argumentroot@cc1:/home/cj# cat /etc/sysctl.d/999-ping.conf
net.ipv4.ping_group_range=0 65535root@cc1:/etc/sysctl.d# sysctl -p /etc/sysctl.d/999-ping.conf
net.ipv4.ping_group_range = 0 65535