sethostname
「sethostname」の調査。
知りたいのは,「sethostname」の制限が/proc/sys/kernel/hostname
へのアクセス制御で実現できるか。
以下が,sethostnameのソース。
1513 asmlinkage long sys_sethostname(char __user *name, int len) 1514 { 1515 int errno; 1516 char tmp[__NEW_UTS_LEN]; 1517 1518 if (!capable(CAP_SYS_ADMIN)) 1519 return -EPERM; 1520 if (len < 0 || len > __NEW_UTS_LEN) 1521 return -EINVAL; 1522 down_write(&uts_sem); 1523 errno = -EFAULT; 1524 if (!copy_from_user(tmp, name, len)) { 1525 memcpy(system_utsname.nodename, tmp, len); 1526 system_utsname.nodename[len] = 0; 1527 errno = 0; 1528 } 1529 up_write(&uts_sem); 1530 return errno; 1531 }
capble(CAP_SYS_ADMIN)で,capability:sys_adminがチェックされてる。
で分からないのが,
sethostnameシステムコールを使って(sethostname("test",4))とすると,
なぜか/proc/sys/kernel/hostnameが書き換わる。
これがどこで起こってるのか?誰か教えてください…
ちょっとしたテストで確認。
auditallow domain sysctl_kernel_t:file write;
として,
sethostname("test",4)
を,実行すると,/proc/sys/kernel/hostname
が書き換わるしかし,/proc/sys/kernel/hostnameへのアクセスログは出ず。
一方
echo "test">/proc/sys/kernel/hostname
だと,ちゃんとログがでる。
●結論:
「sethostnameだけを制限することはできない」
昔のSELinuxでは出来たのになぁ。
LSM&カーネル本家へのマージの関係に違いない。