Linux เชเชฐเซเชจเชฒ เชธเซเชฐเชเซเชทเชพ, เชคเซเชจเซ เชตเชฟเชถเซเชทเชคเชพเช เช เชจเซ Seccomp
BPF เชธเซเชฅเชฟเชฐเชคเชพ, เชธเซเชฐเชเซเชทเชพ เช เชฅเชตเชพ เชเชกเชชเชจเซ เชฌเชฒเชฟเชฆเชพเชจ เชเชชเซเชฏเชพ เชตเชฟเชจเชพ เชเชฐเซเชจเชฒเชจเซ เชตเชฟเชธเซเชคเชพเชฐเชตเชพเชจเซ เชเช เชถเชเซเชคเชฟเชถเชพเชณเซ เชฐเซเชค เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เช เชเชพเชฐเชฃเซเชธเชฐ, เชเชฐเซเชจเชฒ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชเช เชตเชฟเชเชพเชฐเซเชฏเซเช เชเซ BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชฆเซเชตเชพเชฐเชพ เชธเชชเซเชฐเซเชเซเชก Seccomp เชซเชฟเชฒเซเชเชฐเซเชธ, เชเซเชจเซ Seccomp BPF เชคเชฐเซเชเซ เชชเชฃ เชเชณเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชจเชพ เช เชฎเชฒเซเชเชฐเชฃ เชฆเซเชตเชพเชฐเชพ Seccomp เชฎเชพเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เช เชฒเชเชคเชพ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชเซ เชคเซเชจเซ เชตเซเชตเชฟเชงเซเชฏเชคเชพเชจเซ เชเชชเชฏเซเช เชเชฐเชตเซ เช เชธเชพเชฐเซ เชตเชฟเชเชพเชฐ เชเซ. เช เชชเซเชฐเชเชฐเชฃเชฎเชพเช เช เชฎเซ Seccomp เชถเซเช เชเซ เช เชจเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเซเชตเซ เชฐเซเชคเซ เชฅเชพเชฏ เชเซ เชคเซ เชธเชฎเชเชพเชตเซเชถเซเช. เชชเชเซ เชคเชฎเซ BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ Seccomp เชซเชฟเชฒเซเชเชฐเซเชธ เชเซเชตเซ เชฐเซเชคเซ เชฒเชเชตเชพ เชคเซ เชถเซเชเซ เชถเชเชถเซ. เชคเซ เชชเชเซ, เช เชฎเซ เชฌเชฟเชฒเซเช-เชเชจ BPF เชนเซเชเซเชธ เชเซเชเชถเซเช เชเซ Linux เชธเซเชฐเชเซเชทเชพ เชฎเซเชกเซเชฏเซเชฒเซเชธ เชฎเชพเชเซ เชเชฐเซเชจเชฒเชฎเชพเช เชธเชฎเชพเชตเชฟเชทเซเช เชเซ.
Linux เชธเชฟเชเซเชฏเซเชฐเชฟเชเซ เชฎเซเชกเซเชฏเซเชฒเซเชธ (LSM) เช เชเช เชซเซเชฐเซเชฎเชตเชฐเซเช เชเซ เชเซ เชซเชเชเซเชถเชจเชจเซ เชธเชฎเซเชน เชชเซเชฐเซ เชชเชพเชกเซ เชเซ เชเซเชจเซ เชเชชเชฏเซเช เชชเซเชฐเชฎเชพเชฃเชฟเชค เชฐเซเชคเซ เชตเชฟเชตเชฟเชง เชธเซเชฐเชเซเชทเชพ เชฎเซเชกเชฒเซเชธเชจเซ เช เชฎเชฒเชฎเชพเช เชเชฐเชตเชพ เชฎเชพเชเซ เชฅเช เชถเชเซ เชเซ. LSM เชจเซ เชธเซเชงเชพ เชเชฐเซเชจเชฒ เชธเซเชคเซเชฐเซเชค เชตเซเชเซเชทเชฎเชพเช เชตเชพเชชเชฐเซ เชถเชเชพเชฏ เชเซ, เชเซเชฎ เชเซ Apparmor, SELinux เช เชจเซ Tomoyo.
เชเชพเชฒเซ Linux เชจเซ เชเซเชทเชฎเชคเชพเชเชจเซ เชเชฐเซเชเชพ เชเชฐเซเชจเซ เชถเชฐเซเชเชค เชเชฐเซเช.
เชฒเชเซเชทเชฃเซ
Linux เชจเซ เชเซเชทเชฎเชคเชพเชเชจเซ เชธเชพเชฐ เช เชเซ เชเซ เชคเชฎเชพเชฐเซ เชเซเชเซเชเชธ เชเชพเชฐเซเชฏ เชเชฐเชตเชพ เชฎเชพเชเซ เชเช เชฌเชฟเชจเชชเซเชฐเชพเชชเซเชคเชฟเชนเซเชค เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชชเชฐเชตเชพเชจเชเซ เชเชชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชชเชฐเชเชคเซ เชคเซ เชนเซเชคเซ เชฎเชพเชเซ suidเชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเชพ เชตเชฟเชจเชพ, เช เชฅเชตเชพ เช เชจเซเชฏเชฅเชพ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชตเชฟเชถเซเชทเชพเชงเชฟเชเซเชค เชฌเชจเชพเชตเชตเซ, เชนเซเชฎเชฒเชพเชจเซ เชถเชเซเชฏเชคเชพ เชเชเชพเชกเซเชจเซ เช เชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเซเชเซเชเชธ เชเชพเชฐเซเชฏเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเซ เชคเชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชตเชฟเชถเซเชทเชพเชงเชฟเชเซเชค เชชเซเชฐเซเช เชเซเชฒเชตเชพเชจเซ เชเชฐเซเชฐ เชนเซเชฏ, เชคเซ 80 เชเชนเซ, เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชฐเซเช เชคเชฐเซเชเซ เชเชฒเชพเชตเชตเชพเชจเซ เชฌเชฆเชฒเซ, เชคเชฎเซ เชคเซเชจเซ CAP_NET_BIND_SERVICE เชเซเชทเชฎเชคเชพ เชเชชเซ เชถเชเซ เชเซ.
main.go เชจเชพเชฎเชจเชพ เชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชตเชฟเชเชพเชฐ เชเชฐเซ:
package main
import (
"net/http"
"log"
)
func main() {
log.Fatalf("%v", http.ListenAndServe(":80", nil))
}
เช เชชเซเชฐเซเชเซเชฐเชพเชฎ เชชเซเชฐเซเช 80 เชชเชฐ HTTP เชธเชฐเซเชตเชฐเชจเซ เชธเซเชตเชพ เชเชชเซ เชเซ (เช เชเช เชตเชฟเชถเซเชทเชพเชงเชฟเชเซเชค เชชเซเชฐเซเช เชเซ). เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เช เชฎเซ เชคเซเชจเซ เชธเชเชเชฒเชจ เชชเชเซ เชคเชฐเชค เช เชเชฒเชพเชตเซเช เชเซเช:
$ go build -o capabilities main.go
$ ./capabilities
เชเซ เชเซ, เช เชฎเซ เชฐเซเช เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐเซ เชเชชเชคเชพ เชจ เชนเซเชตเชพเชฅเซ, เช เชเซเชก เชชเซเชฐเซเชเชจเซ เชฌเชพเชเชงเชคเซ เชตเชเชคเซ เชญเซเชฒ เชเชฐเชถเซ:
2019/04/25 23:17:06 listen tcp :80: bind: permission denied
exit status 1
capsh (เชถเซเชฒ เชฎเซเชจเซเชเชฐ) เช เชเช เชธเชพเชงเชจ เชเซ เชเซ เชเซเชทเชฎเชคเชพเชเชจเชพ เชเซเชเซเชเชธ เชธเซเช เชธเชพเชฅเซ เชถเซเชฒ เชเชฒเชพเชตเซ เชเซ.
เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชชเชนเซเชฒเซเชฅเซ เช เชเชฒเซเชฒเซเช เชเชฐเซเชฏเซ เชเซ เชคเซเชฎ, เชธเชเชชเซเชฐเซเชฃ เชฐเซเช เช เชงเชฟเชเชพเชฐเซ เชเชชเชตเชพเชจเซ เชฌเชฆเชฒเซ, เชคเชฎเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฎเชพเช เชชเชนเซเชฒเซเชฅเซ เช เชเซ เชคเซ เชฌเชงเซเช เชธเชพเชฅเซ cap_net_bind_service เชเซเชทเชฎเชคเชพ เชชเซเชฐเชฆเชพเชจ เชเชฐเซเชจเซ เชตเชฟเชถเซเชทเชพเชงเชฟเชเซเชค เชชเซเชฐเซเช เชฌเชพเชเชจเซเชกเชฟเชเชเชจเซ เชธเชเซเชทเชฎ เชเชฐเซ เชถเชเซ เชเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เช เชฎเซ เช เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชเซ เชชเชถเชฎเชพเช เชฌเชเชง เชเชฐเซ เชถเชเซเช เชเซเช:
# capsh --caps='cap_net_bind_service+eip cap_setpcap,cap_setuid,cap_setgid+ep'
--keep=1 --user="nobody"
--addamb=cap_net_bind_service -- -c "./capabilities"
เชเชพเชฒเซ เช เชเซเชฎเชจเซ เชฅเซเชกเซเช เชธเชฎเชเซเช.
- capsh - เชถเซเชฒ เชคเชฐเซเชเซ capsh เชจเซ เชเชชเชฏเซเช เชเชฐเซ.
- โcaps='cap_net_bind_service+eip cap_setpcap,cap_setuid,cap_setgid+ep' - เชเชพเชฐเชฃ เชเซ เช เชฎเชพเชฐเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชฌเชฆเชฒเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ (เช เชฎเซ เชฐเซเช เชคเชฐเซเชเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเชเชคเชพ เชจเชฅเซ), เช เชฎเซ cap_net_bind_service เช เชจเซ เชเชฐเซเชเชฐ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ ID เชจเซ เชฌเชฆเชฒเชตเชพเชจเซ เชเซเชทเชฎเชคเชพเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซเชถเซเช. เชฐเซเช เชเซ เชจเซเชฌเชกเซ, เชเชเชฒเซ เชเซ cap_setuid เช เชจเซ cap_setgid.
- โkeep=1 โ เช เชฎเซ เชฐเซเช เชเชเชพเชเชจเซเชเชฎเชพเชเชฅเซ เชธเซเชตเชฟเช เชเชฐเชคเซ เชตเชเชคเซ เชธเซเชฅเชพเชชเชฟเชค เชเซเชทเชฎเชคเชพเช เชฐเชพเชเชตเชพ เชฎเชพเชเชเซเช เชเซเช.
- โuser=โเชเซเช เชจเชนเชฟโ โ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชฒเชพเชตเชจเชพเชฐ เช เชเชคเชฟเชฎ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเซเช เชจเชนเซเช เชนเซเชฏ.
- โaddamb=cap_net_bind_service โ เชฐเซเช เชฎเซเชกเชฎเชพเชเชฅเซ เชธเซเชตเชฟเช เชเชฐเซเชฏเชพ เชชเชเซ เชธเชเชฌเชเชงเชฟเชค เชเซเชทเชฎเชคเชพเชเชจเชพ เชเซเชฒเชฟเชฏเชฐเชฟเชเชเชจเซ เชธเซเช เชเชฐเซ.
- - -c "./capabilities" - เชซเชเซเชค เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชฒเชพเชตเซ.
เชฒเชฟเชเชเซเชก เชเซเชทเชฎเชคเชพเช เช เชเช เชเชพเชธ เชชเซเชฐเชเชพเชฐเชจเซ เชเซเชทเชฎเชคเชพเช เชเซ เชเซ เชฌเชพเชณ เชเชพเชฐเซเชฏเชเซเชฐเชฎเซ เชฆเซเชตเชพเชฐเชพ เชตเชพเชฐเชธเชพเชฎเชพเช เชฎเชณเซ เชเซ เชเซเชฏเชพเชฐเซ เชตเชฐเซเชคเชฎเชพเชจ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชคเซเชฎเชจเซ execve() เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชเซเชเชฟเชเซเชฏเซเช เชเชฐเซ เชเซ. เชฎเชพเชคเซเชฐ เชเชตเซ เชเซเชทเชฎเชคเชพเช เชเซ เชเซเชจเซ เชธเชพเชเชเชณเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเซ, เช เชฅเชตเชพ เชฌเซเชเชพ เชถเชฌเซเชฆเซเชฎเชพเช เชเชนเซเช เชคเซ, เชชเชฐเซเชฏเชพเชตเชฐเชฃเซเชฏ เชเซเชทเชฎเชคเชพเช เชคเชฐเซเชเซ, เชตเชพเชฐเชธเชพเชฎเชพเช เชฎเชณเซ เชถเชเซ เชเซ.
--caps เชตเชฟเชเชฒเซเชชเชฎเชพเช เชเซเชทเชฎเชคเชพเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซเชฏเชพ เชชเชเซ เชคเชฎเซ เชเชฆเชพเช เชเชถเซเชเชฐเซเชฏ เชชเชพเชฎเซ เชฐเชนเซเชฏเชพ เชเซ เชเซ +eip เชจเซ เช เชฐเซเชฅ เชถเซเช เชฅเชพเชฏ เชเซ. เช เชซเซเชฒเซเชเซเชธเชจเซ เชเชชเชฏเซเช เชเซเชทเชฎเชคเชพ เชจเชเซเชเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชฅเชพเชฏ เชเซ:
-เชธเชเซเชฐเชฟเชฏ เชนเซเชตเซเช เช เชเซเชเช (p);
- เชเชชเชฏเซเช เชฎเชพเชเซ เชเชชเชฒเชฌเซเชง (e);
-เชฌเชพเชณ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชฆเซเชตเชพเชฐเชพ เชตเชพเชฐเชธเชพเชฎเชพเช เชฎเชณเซ เชถเชเซ เชเซ (i).
เชเชพเชฐเชฃ เชเซ เชเชชเชฃเซ cap_net_bind_service เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเชเซเช เชเซเช, เชเชชเชฃเซ เช เช เชซเซเชฒเซเช เชธเชพเชฅเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชชเชเซ เชเชชเชฃเซ เชเชฆเซเชถเชฎเชพเช เชถเซเชฒ เชถเชฐเซ เชเชฐเซเชถเซเช. เช เชเซเชทเชฎเชคเชพเชเชจเซ เชฌเชพเชเชจเชฐเซ เชเชฒเชพเชตเชถเซ เช เชจเซ เชเชชเชฃเซ เชคเซเชจเซ i เชซเซเชฒเซเช เชธเชพเชฅเซ เชเชฟเชนเซเชจเชฟเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชเซเชฒเซเชฒเซ, เช เชฎเซ เชเชเซเชเซเช เชเซเช เชเซ p เชธเชพเชฅเซ เชธเซเชตเชฟเชงเชพ เชธเชเซเชทเชฎ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ (เช เชฎเซ UID เชฌเชฆเชฒเซเชฏเชพ เชตเชฟเชจเชพ เช เชเชฐเซเชฏเซเช). เชคเซ cap_net_bind_service+eip เชเซเชตเซเช เชฒเชพเชเซ เชเซ.
เชคเชฎเซ ss เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเชฐเชฟเชฃเชพเชฎ เชเชเชพเชธเซ เชถเชเซ เชเซ. เชเชพเชฒเซ เชชเซเชทเซเช เชชเชฐ เชซเชฟเช เชฅเชตเชพ เชฎเชพเชเซ เชเชเชเชชเซเชเชจเซ เชฅเซเชกเซเช เชเซเชเชเซเช เชเชฐเซเช, เชชเชฐเชเชคเซ เชคเซ 0 เชธเชฟเชตเชพเชฏ เช เชจเซเชฏ เชธเชเชเชณเชพเชฏเซเชฒ เชชเซเชฐเซเช เช เชจเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ ID เชฌเชคเชพเชตเชถเซ, เช เชเชฟเชธเซเชธเชพเชฎเชพเช 65:
# ss -tulpn -e -H | cut -d' ' -f17-
128 *:80 *:*
users:(("capabilities",pid=30040,fd=3)) uid:65534 ino:11311579 sk:2c v6only:0
เช เชเชฆเชพเชนเชฐเชฃเชฎเชพเช เช เชฎเซ capsh เชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเซ เชเซ, เชชเชฐเชเชคเซ เชคเชฎเซ libcap เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชถเซเชฒ เชฒเชเซ เชถเชเซ เชเซ. เชตเชงเซ เชฎเชพเชนเชฟเชคเซ เชฎเชพเชเซ, เชฎเซเชจ 3 เชฒเชฟเชฌเชเซเชช เชเซเช.
เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชฒเชเชคเซ เชตเชเชคเซ, เชเชฃเซ เชตเชพเชฐ เชกเซเชตเชฒเชชเชฐ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชฐเชจ เชธเชฎเชฏเซ เชเซเชเชคเซ เชคเชฎเชพเชฎ เชธเซเชตเชฟเชงเชพเช เช เชเชพเชเชฅเซ เชเชพเชฃเชคเซ เชจเชฅเซ; เชตเชงเซเชฎเชพเช, เช เชธเซเชตเชฟเชงเชพเช เชจเชตเชพ เชธเชเชธเซเชเชฐเชฃเซเชฎเชพเช เชฌเชฆเชฒเชพเช เชถเชเซ เชเซ.
เช เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชเซเชทเชฎเชคเชพเชเชจเซ เชตเชงเซ เชธเชพเชฐเซ เชฐเซเชคเซ เชธเชฎเชเชตเชพ เชฎเชพเชเซ, เช เชฎเซ BCC เชธเชเซเชทเชฎ เชธเชพเชงเชจ เชฒเช เชถเชเซเช เชเซเช, เชเซ cap_capable เชเชฐเซเชจเชฒ เชซเชเชเซเชถเชจ เชฎเชพเชเซ kprobe เชธเซเช เชเชฐเซ เชเซ:
/usr/share/bcc/tools/capable
TIME UID PID TID COMM CAP NAME AUDIT
10:12:53 0 424 424 systemd-udevd 12 CAP_NET_ADMIN 1
10:12:57 0 1103 1101 timesync 25 CAP_SYS_TIME 1
10:12:57 0 19545 19545 capabilities 10 CAP_NET_BIND_SERVICE 1
เชเชชเชฃเซ cap_capable เชเชฐเซเชจเชฒ เชซเชเชเซเชถเชจเชฎเชพเช เชตเชจ-เชฒเชพเชเชจเชฐ kprobe เชธเชพเชฅเซ bpftrace เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเชฎเชพเชจ เชตเชธเซเชคเซ เชชเซเชฐเชพเชชเซเชค เชเชฐเซ เชถเชเซเช เชเซเช:
bpftrace -e
'kprobe:cap_capable {
time("%H:%M:%S ");
printf("%-6d %-6d %-16s %-4d %dn", uid, pid, comm, arg2, arg3);
}'
| grep -i capabilities
เช เชจเซเชเซเชจเซ เชเซเชฎ เชเชเชเช เชเชเชเชชเซเช เชเชฐเชถเซ เชเซ kprobe เชชเชเซ เชเชชเชฃเชพ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชเซเชทเชฎเชคเชพเช เชธเชเซเชทเชฎ เชนเซเชฏ:
12:01:56 1000 13524 capabilities 21 0
12:01:56 1000 13524 capabilities 21 0
12:01:56 1000 13524 capabilities 21 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 10 1
เชชเชพเชเชเชฎเซ เชเซเชฒเชฎ เช เชเซเชทเชฎเชคเชพเช เชเซ เชเซเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเชฐเซเชฐ เชเซ, เช เชจเซ เช เชเชเชเชชเซเชเชฎเชพเช เชฌเชฟเชจ-เชเชกเชฟเช เชเชเชจเชพเชเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชคเซ เชนเซเชตเชพเชฅเซ, เช เชฎเซ เชคเชฎเชพเชฎ เชฌเชฟเชจ-เชเชกเชฟเช เชคเชชเชพเชธเซ เชเซเชเช เชเซเช เช เชจเซ เช เชเชคเซ เชเชกเชฟเช เชซเซเชฒเซเช (เชเชเชเชชเซเชเชฎเชพเช เชเซเชฒเซเชฒเซเช) เชธเชพเชฅเซ เชเชฐเซเชฐเซ เชเซเชทเชฎเชคเชพ 1. เชเซเชทเชฎเชคเชพ เชชเชฐ เชธเซเช เชเซ. เช เชฎเชจเซ เชเซเชฎเชพเช เชฐเชธ เชเซ เชคเซ CAP_NET_BIND_SERVICE เชเซ, เชคเซ เชซเชพเชเชฒเชฎเชพเช เชเชฐเซเชจเชฒ เชธเซเชฐเซเชธ เชเซเชกเชฎเชพเช เชเช เชธเซเชฅเชฟเชฐ เชคเชฐเซเชเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชฅเชฏเซเชฒ เชเซ include/uapi/linux/ability.h เชเชณเชเชเชฐเซเชคเชพ 10 เชธเชพเชฅเซ:
/* Allows binding to TCP/UDP sockets below 1024 */
/* Allows binding to ATM VCIs below 32 */
#define CAP_NET_BIND_SERVICE 10<source lang="go">
เชฐเชจ-เชธเซ เช เชฅเชตเชพ เชกเซเชเชฐ เชเซเชตเชพ เชเชจเซเชเซเชจเชฐ เชฎเชพเชเซ เชฐเชจเชเชพเชเชฎ เชธเชฎเชฏเซ เชเซเชทเชฎเชคเชพเช เชธเชเซเชทเชฎ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชเซเชฅเซ เชคเซเชเชจเซ เช เชจเชชเซเชฐเชฟเชตเชฟเชฒเซเชเซเชก เชฎเซเชกเชฎเชพเช เชเชฒเชพเชตเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชฎเชณเซ, เชชเชฐเชเชคเซ เชคเซเชฎเชจเซ เชฎเซเชเชพเชญเชพเชเชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชเซเชทเชฎเชคเชพเชเชจเซ เช เชฎเชเชเซเชฐเซ เชเชชเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเซเชฏเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเซเชเซเชเชธ เชเซเชทเชฎเชคเชพเชเชจเซ เชเชฐเซเชฐ เชนเซเชฏ, เชคเซเชฏเชพเชฐเซ เชกเซเชเชฐ เชคเซเชฎเชจเซ --cap-add เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชถเชเซ เชเซ:
docker run -it --rm --cap-add=NET_ADMIN ubuntu ip link add dummy0 type dummy
เช เชเชฆเซเชถ เชเชจเซเชเซเชจเชฐเชจเซ CAP_NET_ADMIN เชเซเชทเชฎเชคเชพ เชเชชเชถเซ, เชเซ เชคเซเชจเซ เชกเชฎเซ0 เชเชจเซเชเชฐเชซเซเชธ เชเชฎเซเชฐเชตเชพ เชฎเชพเชเซ เชจเซเชเชตเชฐเซเช เชฒเชฟเชเชเชจเซ เชเซเช เชตเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชถเซ.
เชเชเชณเชจเซ เชตเชฟเชญเชพเช เชฌเชคเชพเชตเซ เชเซ เชเซ เชซเชฟเชฒเซเชเชฐเชฟเชเช เชเซเชตเซ เชธเซเชตเชฟเชงเชพเชเชจเซ เชเชชเชฏเซเช เชเซเชตเซ เชฐเซเชคเซ เชเชฐเชตเซ, เชชเชฐเชเชคเซ เชเช เช เชฒเช เชคเชเชจเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซ เช เชฎเชจเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชเชฟเช เชฐเซเชคเซ เช เชฎเชพเชฐเชพ เชชเซเชคเชพเชจเชพ เชซเชฟเชฒเซเชเชฐเซเชธเชจเซ เช เชฎเชฒ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ.
เชธเซเชเชเซเชฎเซเชช
Seccomp เช เชธเชฟเชเซเชฏเซเชฐ เชเชฎเซเชชเซเชฏเซเชเชฟเชเช เชฎเชพเชเซ เชตเชชเชฐเชพเชฏ เชเซ เช เชจเซ เชคเซ Linux เชเชฐเซเชจเชฒเชฎเชพเช เช เชฎเชฒเชฎเชพเช เชฎเซเชเชพเชฏเซเชฒ เชธเซเชฐเชเซเชทเชพ เชธเซเชคเชฐ เชเซ เชเซ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชเชจเซ เชเซเชเซเชเชธ เชธเชฟเชธเซเชเชฎ เชเซเชฒเซเชธเชจเซ เชซเชฟเชฒเซเชเชฐ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เชเซเชเซ เชธเซเชเชเซเชฎเซเชช เชฒเชฟเชจเชเซเชธ เชธเชพเชฅเซ เชเซเชทเชฎเชคเชพเชเชฎเชพเช เชคเซเชฒเชจเชพเชคเซเชฎเช เชเซ, เช เชฎเซเช เชธเชฟเชธเซเชเชฎ เชเซเชฒเซเชธเชจเซเช เชธเชเชเชพเชฒเชจ เชเชฐเชตเชพเชจเซ เชคเซเชจเซ เชเซเชทเชฎเชคเชพ เชคเซเชจเซ เชธเชฐเชเชพเชฎเชฃเซเชฎเชพเช เชคเซเชจเซ เชตเชงเซ เชฒเชตเชเซเช เชฌเชจเชพเชตเซ เชเซ.
Seccomp เช เชจเซ Linux เชฒเชเซเชทเชฃเซ เชชเชฐเชธเซเชชเชฐ เชตเชฟเชถเชฟเชทเซเช เชจเชฅเซ เช เชจเซ เชเชฃเซ เชตเชเชค เชฌเชเชจเซ เช เชญเชฟเชเชฎเซเชฅเซ เชฒเชพเชญ เชฎเซเชณเชตเชตเชพ เชฎเชพเชเซ เชเชเชธเชพเชฅเซ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชฏ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชคเชฎเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ CAP_NET_ADMIN เชเซเชทเชฎเชคเชพ เชเชชเชตเชพ เชฎเชพเชเชเซ เชเซ เชชเชฐเชเชคเซ เชคเซเชจเซ เชธเซเชเซเช เชเชจเซเชเซเชถเชจเซเชธ เชธเซเชตเซเชเชพเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชคเชพ เชจเชฅเซ, เชธเซเชตเซเชเชพเชฐเซ เช เชจเซ เชธเซเชตเซเชเชพเชฐเซ4 เชธเชฟเชธเซเชเชฎ เชเซเชฒเซเชธเชจเซ เช เชตเชฐเซเชงเชฟเชค เชเชฐเซ.
Seccomp เชซเชฟเชฒเซเชเชฐเชฟเชเช เชชเชฆเซเชงเชคเชฟ SECOMP_MODE_FILTER เชฎเซเชกเชฎเชพเช เชเชพเชฐเซเชฏเชฐเชค BPF เชซเชฟเชฒเซเชเชฐเซเชธ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเซ, เช เชจเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชซเชฟเชฒเซเชเชฐเชฟเชเช เชชเซเชเซเชเซเชจเซ เชเซเชฎ เช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชธเซเชเชเซเชฎเซเชช เชซเชฟเชฒเซเชเชฐเซเชธ PR_SET_SECCOMP เชเชชเชฐเซเชถเชจ เชฆเซเชตเชพเชฐเชพ prctl เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฒเซเชก เชฅเชพเชฏ เชเซ. เช เชซเชฟเชฒเซเชเชฐเซเชธ เชเช BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซเช เชธเซเชตเชฐเซเชช เชฒเซ เชเซ เชเซ seccomp_data เชฎเชพเชณเชเซเช เชฆเซเชตเชพเชฐเชพ เชฐเชเซ เชเชฐเชพเชฏเซเชฒ เชฆเชฐเซเช Seccomp เชชเซเชเซเช เชฎเชพเชเซ เชเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เช เชฎเชพเชณเชเซเช เชธเชเชฆเชฐเซเชญ เชเชฐเซเชเชฟเชเซเชเซเชเชฐ, เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชธเชฎเชฏเซ เชชเซเชฐเซเชธเซเชธเชฐ เชธเซเชเชจเชพเช เชฎเชพเชเซ เชเช เชจเชฟเชฐเซเชฆเซเชถเช เช เชจเซ เชฎเชนเชคเซเชคเชฎ เช เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชฆเชฒเซเชฒเซ เชงเชฐเชพเชตเซ เชเซ, เชเซ uint64 เชคเชฐเซเชเซ เชตเซเชฏเชเซเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
linux/seccomp.h เชซเชพเชเชฒเชฎเชพเช เชเชฐเซเชจเชฒ เชธเซเชฐเซเชธ เชเซเชกเชฎเชพเชเชฅเซ seccomp_data เชฎเชพเชณเชเซเช เชเชจเชพ เชเซเชตเซเช เชฆเซเชเชพเชฏ เชเซ:
struct seccomp_data {
int nr;
__u32 arch;
__u64 instruction_pointer;
__u64 args[6];
};
เชเซเชฎ เชคเชฎเซ เช เชฐเชเชจเชพเชฎเชพเชเชฅเซ เชเซเช เชถเชเซ เชเซ, เช เชฎเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒ, เชคเซเชจเซ เชฆเชฒเซเชฒเซ เช เชฅเชตเชพ เชฌเชเชจเซเชจเชพ เชธเชเชฏเซเชเชจ เชฆเซเชตเชพเชฐเชพ เชซเชฟเชฒเซเชเชฐ เชเชฐเซ เชถเชเซเช เชเซเช.
เชฆเชฐเซเช Seccomp เชชเซเชเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเซเชฏเชพ เชชเชเซ, เชซเชฟเชฒเซเชเชฐเซ เช เชเชคเชฟเชฎ เชจเชฟเชฐเซเชฃเชฏ เชฒเซเชตเชพ เชฎเชพเชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเซ เชเซเชเช เช เชจเซ เชเชฐเซเชจเชฒเชจเซ เชเชเชณ เชถเซเช เชเชฐเชตเซเช เชคเซ เชเชฃเชพเชตเชตเซเช เชเซเชเช. เช เชเชคเชฟเชฎ เชจเชฟเชฐเซเชฃเชฏ เชเช เชตเชณเชคเชฐ เชฎเซเชฒเซเชฏเซ (เชธเซเชฅเชฟเชคเชฟ เชเซเชกเซเชธ) เชฆเซเชตเชพเชฐเชพ เชตเซเชฏเชเซเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
- SECOMP_RET_KILL_PROCESS - เชธเชฟเชธเซเชเชฎ เชเซเชฒเชจเซ เชซเชฟเชฒเซเชเชฐ เชเชฐเซเชฏเชพ เชชเชเซ เชคเชฐเชค เช เชธเชฎเชเซเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชฎเชพเชฐเซ เชจเชพเชเซ เชเซ เชเซ เชเชจเชพ เชเชพเชฐเชฃเซ เชเชเซเชเชฟเชเซเชฏเซเช เชฅเช เชถเชเชคเซ เชจเชฅเซ.
- SECOMP_RET_KILL_THREAD - เชธเชฟเชธเซเชเชฎ เชเซเชฒเชจเซ เชซเชฟเชฒเซเชเชฐ เชเชฐเซเชฏเชพ เชชเชเซ เชคเชฐเชค เช เชตเชฐเซเชคเชฎเชพเชจ เชฅเซเชฐเซเชกเชจเซ เชธเชฎเชพเชชเซเชค เชเชฐเซ เชเซ เชเซ เช เชเชพเชฐเชฃเซ เชเชเซเชเชฟเชเซเชฏเซเช เชฅเชคเซ เชจเชฅเซ.
โ SECOMP_RET_KILL โ SECOMP_RET_KILL_THREAD เชฎเชพเชเซ เชเชชเชจเชพเชฎ, เชชเชเชพเชค เชธเซเชธเชเชเชคเชคเชพ เชฎเชพเชเซ เชฌเชพเชเซ.
- SECOMP_RET_TRAP - เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชชเซเชฐเชคเชฟเชฌเชเชงเชฟเชค เชเซ, เช เชจเซ SIGSYS (เชเชฐเชพเชฌ เชธเชฟเชธเซเชเชฎ เชเซเชฒ) เชธเชฟเชเซเชจเชฒ เชคเซ เชเชพเชฐเซเชฏ เชชเชฐ เชฎเซเชเชฒเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชเซ เชคเซเชจเซ เชเซเชฒ เชเชฐเซ เชเซ.
- SECOMP_RET_ERRNO - เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชเชเซเชเชฟเชเซเชฏเซเช เชฅเชฏเซ เชจเชฅเซ, เช เชจเซ SECOMP_RET_DATA เชซเชฟเชฒเซเชเชฐ เชฐเชฟเชเชฐเซเชจ เชตเซเชฒเซเชฏเซเชจเซ เชเช เชญเชพเช errno เชฎเซเชฒเซเชฏ เชคเชฐเซเชเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเชเซเชฏเชพเชจเซ เชชเชธเชพเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชญเซเชฒเชจเชพ เชเชพเชฐเชฃเชจเซ เชเชงเชพเชฐเซ, เชตเชฟเชตเชฟเชง เชญเซเชฒ เชฎเซเชฒเซเชฏเซ เชชเชฐเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเชเชณเชจเชพ เชตเชฟเชญเชพเชเชฎเชพเช เชญเซเชฒ เชจเชเชฌเชฐเซเชจเซ เชธเซเชเชฟ เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
- SECOMP_RET_TRACE - เชคเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเซเชตเชพ เช เชจเซ เชจเชฟเชฏเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชเซเชฏเชพเชฐเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชเชเซเชเชฟเชเซเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชคเซเชฏเชพเชฐเซ เช เชเชเชพเชตเชตเชพ เชฎเชพเชเซ - PTRACE_O_TRACESECCOMP เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ ptrace เชเซเชฐเซเชธเชฐเชจเซ เชธเซเชเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชตเชชเชฐเชพเชฏ เชเซ. เชเซ เชเซเชฐเซเชธเชฐ เชเชจเซเชเซเชเซเชก เชจ เชนเซเชฏ, เชคเซ เชญเซเชฒ เชชเชฐเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชญเซเชฒ -ENOSYS เชชเชฐ เชธเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช เชจเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชเชเซเชเชฟเชเซเชฏเซเช เชฅเชคเซ เชจเชฅเซ.
- SECOMP_RET_LOG - เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชเชเซเชฒเชพเช เชเชฏเซ เช เชจเซ เชฒเซเช เชฅเชฏเซ.
- SECOMP_RET_ALLOW - เชธเชฟเชธเซเชเชฎ เชเซเชฒเชจเซ เชฎเชเชเซเชฐเซ เชเซ.
ptrace เช เชเซเชฐเซเชธเซ เชจเชพเชฎเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชเซเชฐเซเชธเซเชเช เชฎเชฟเชเซเชจเชฟเชเชฎเซเชธเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพ เชฎเชพเชเซเชจเซ เชเช เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชเซ, เชเซเชฎเชพเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเชพ เช เชฎเชฒเชจเซ เชฎเซเชจเชฟเชเชฐ เชเชฐเชตเชพเชจเซ เช เชจเซ เชจเชฟเชฏเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพเชจเซ เชเซเชทเชฎเชคเชพ เชเซ. เชเซเชฐเซเชธ เชชเซเชฐเซเชเซเชฐเชพเชฎ เช เชธเชฐเชเชพเชฐเช เชฐเซเชคเซ เช เชฎเชฒเชจเซ เชชเซเชฐเชญเชพเชตเชฟเชค เชเชฐเซ เชถเชเซ เชเซ เช เชจเซ เชเซเชฐเซเชธเซเชจเชพ เชฎเซเชฎเชฐเซ เชฐเชเซเชธเซเชเชฐเชฎเชพเช เชซเซเชฐเชซเชพเชฐ เชเชฐเซ เชถเชเซ เชเซ. Seccomp เชธเชเชฆเชฐเซเชญเชฎเชพเช, เชเซเชฏเชพเชฐเซ SECOMP_RET_TRACE เชธเซเชเซเชเชธ เชเซเชก เชฆเซเชตเชพเชฐเชพ เชเซเชฐเชฟเชเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชคเซเชฏเชพเชฐเซ ptrace เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเซเชฅเซ เชเซเชฐเซเชธเชฐ เชธเชฟเชธเซเชเชฎ เชเซเชฒเชจเซ เชเชเซเชเชฟเชเซเชฏเซเช เชเชฐเชคเชพ เช เชเชเชพเชตเซ เชถเชเซ เชเซ เช เชจเซ เชคเซเชจเชพ เชชเซเชคเชพเชจเชพ เชคเชฐเซเชเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเซ เชถเชเซ เชเซ.
เชธเซเชเชเซเชฎเซเชช เชญเซเชฒเซ
เชธเชฎเชฏ เชธเชฎเชฏ เชชเชฐ, Seccomp เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชคเซ เชตเชเชคเซ, เชคเชฎเชจเซ เชตเชฟเชตเชฟเชง เชญเซเชฒเซเชจเซ เชธเชพเชฎเชจเซ เชเชฐเชตเซ เชชเชกเชถเซ, เชเซ SECOMP_RET_ERRNO เชชเซเชฐเชเชพเชฐเชจเชพ เชตเชณเชคเชฐ เชฎเซเชฒเซเชฏ เชฆเซเชตเชพเชฐเชพ เชเชณเชเชพเชฏ เชเซ. เชญเซเชฒเชจเซ เชเชพเชฃ เชเชฐเชตเชพ เชฎเชพเชเซ, seccomp เชธเชฟเชธเซเชเชฎ เชเซเชฒ 1 เชจเซ เชฌเชฆเชฒเซ -0 เชชเชฐเชค เชเชฐเชถเซ.
เชจเซเชเซเชจเซ เชญเซเชฒเซ เชถเชเซเชฏ เชเซ:
- EACCESS - เชเซเชฒเชฐเชจเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชจเชฅเซ. เช เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชฅเชพเชฏ เชเซ เชเชพเชฐเชฃ เชเซ เชคเซเชฎเชพเช CAP_SYS_ADMIN เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐเซ เชจเชฅเซ เช เชฅเชตเชพ prctl เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ no_new_privs เชธเซเช เชเชฐเซเชฒ เชจเชฅเซ (เช เชฎเซ เช เชตเชฟเชถเซ เชชเชเซเชฅเซ เชตเชพเชค เชเชฐเซเชถเซเช);
โ EFAULT โ เชชเชธเชพเชฐ เชฅเชฏเซเชฒเซ เชฆเชฒเซเชฒเซ (seccomp_data เชธเซเชเซเชฐเชเซเชเชฐเชฎเชพเช args) เชชเชพเชธเซ เชฎเชพเชจเซเชฏ เชธเชฐเชจเชพเชฎเซเช เชจเชฅเซ;
โ EINVAL โ เช เชนเซเช เชเชพเชฐ เชเชพเชฐเชฃเซ เชนเซเช เชถเชเซ เชเซ:
- เชตเชฟเชจเชเชคเซ เชเชฐเซเชฒ เชเชพเชฎเชเซเชฐเซ เช เชเซเชเชพเชค เชเซ เช เชฅเชตเชพ เชตเชฐเซเชคเชฎเชพเชจ เชฐเซเชชเชฐเซเชเชพเชเชเชจเชฎเชพเช เชเชฐเซเชจเชฒ เชฆเซเชตเชพเชฐเชพ เชธเชฎเชฐเซเชฅเชฟเชค เชจเชฅเซ;
- เชเชฒเซเชฒเซเชเชฟเชค เชซเซเชฒเซเช เชตเชฟเชจเชเชคเซ เชเชฐเซเชฒ เชเชพเชฎเชเซเชฐเซ เชฎเชพเชเซ เชฎเชพเชจเซเชฏ เชจเชฅเซ;
-เชเชชเชฐเซเชถเชจเชฎเชพเช BPF_ABS เชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ, เชชเชฐเชเชคเซ เชเชฒเซเชฒเซเชเชฟเชค เชเชซเชธเซเช เชธเชพเชฅเซ เชธเชฎเชธเซเชฏเชพเช เชเซ, เชเซ seccomp_data เชธเซเชเซเชฐเชเซเชเชฐเชจเชพ เชเชฆ เชเชฐเชคเชพเช เชตเชงเซ เชถเชเซ เชเซ;
-เชซเชฟเชฒเซเชเชฐเชจเซ เชชเชธเชพเชฐ เชเชฐเซเชฒ เชธเซเชเชจเชพเชเชจเซ เชธเชเชเซเชฏเชพ เชฎเชนเชคเซเชคเชฎ เชเชฐเชคเชพเช เชตเชงเซ เชเช เชเซ;
โ ENOMEM โ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชชเซเชฐเชคเซ เชฎเซเชฎเชฐเซ เชจเชฅเซ;
- EOPNOTSUPP - เชเชชเชฐเซเชถเชจ เชธเซเชเชตเซ เชเซ เชเซ SECOMP_GET_ACTION_AVAIL เชธเชพเชฅเซ เชเซเชฐเชฟเชฏเชพ เชเชชเชฒเชฌเซเชง เชนเชคเซ, เชชเชฐเชเชคเซ เชเชฐเซเชจเชฒ เชฆเชฒเซเชฒเซเชฎเชพเช เชตเชณเชคเชฐเชจเซ เชธเชชเซเชฐเซเช เชเชฐเชคเซเช เชจเชฅเซ;
โ ESRCH โ เชฌเซเชเซ เชธเซเชเซเชฐเซเชฎ เชธเชฟเชเชเซเชฐเชจเชพเชเช เชเชฐเชคเซ เชตเชเชคเซ เชธเชฎเชธเซเชฏเชพ เชเชตเซ;
- ENOSYS - SECOMP_RET_TRACE เชเซเชฐเชฟเชฏเชพ เชธเชพเชฅเซ เชเซเช เชเซเชฐเซเชธเชฐ เชเซเชกเชพเชฏเซเชฒ เชจเชฅเซ.
prctl เช เชเช เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชเซ เชเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ-เชธเซเชชเซเชธ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเชพ เชเซเชเซเชเชธ เชชเชพเชธเชพเช, เชเซเชฎ เชเซ เชฌเชพเชเช เชเชจเซเชกเชฟเชฏเชจเชจเซเชธ, เชฅเซเชฐเซเชก เชจเซเชฎเซเชธ, เชธเชฟเชเซเชฏเซเชฐ เชเซเชฎเซเชชเซเชฏเซเชเซเชถเชจ เชฎเซเชก (เชธเซเชเชเซเชฎเซเชช), เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐเซ, เชชเชฐเซเชซ เชเชตเซเชจเซเชเซเชธ เชตเชเซเชฐเซเชฎเชพเช เชเชพเชฒเชพเชเซ (เชธเซเช เช เชจเซ เชฎเซเชณเชตเชตเชพ) เชฎเชพเชเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ.
เชธเซเชเชเซเชฎเซเชช เชคเชฎเชจเซ เชธเซเชจเซเชกเชฌเซเชเซเชธ เชเซเชเซเชจเซเชฒเซเชเซ เชเซเชตเซเช เชฒเชพเชเซ เชเซ, เชชเชฐเชเชคเซ เชเชตเซเช เชจเชฅเซ. Seccomp เช เชเช เชเชชเชฏเซเชเชฟเชคเชพ เชเซ เชเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเซ เชธเซเชจเซเชกเชฌเซเชเซเชธ เชฎเชฟเชเซเชจเชฟเชเชฎ เชตเชฟเชเชธเชพเชตเชตเชพ เชฎเชพเชเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ. เชนเชตเซ เชเชพเชฒเซ เชเซเชเช เชเซ เชเซเชตเซ เชฐเซเชคเซ เชธเซเชเซเชฎเซเชช เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชฆเซเชตเชพเชฐเชพ เชธเซเชงเชพ เชฌเซเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเชคเชพ เชซเชฟเชฒเซเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฏเซเชเชฐ เชเชจเซเชเชฐเซเชเซเชถเชจ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
BPF Seccomp เชซเชฟเชฒเซเชเชฐ เชเชฆเชพเชนเชฐเชฃ
เช เชนเซเช เชเชชเชฃเซ เชฌเชคเชพเชตเซเชถเซเช เชเซ เช เชเชพเช เชเชฐเซเชเชพ เชเชฐเซเชฒเซ เชฌเซ เชเซเชฐเชฟเชฏเชพเชเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชเซเชกเชตเซ, เชเชเชฒเซ เชเซ:
โ เช เชฎเซ เชเช Seccomp BPF เชชเซเชฐเซเชเซเชฐเชพเชฎ เชฒเชเซเชถเซเช, เชเซ เชฒเซเชตเชพเชฎเชพเช เชเชตเซเชฒเชพ เชจเชฟเชฐเซเชฃเชฏเซเชจเชพ เชเชงเชพเชฐเซ เช เชฒเช-เช เชฒเช เชฐเชฟเชเชฐเซเชจ เชเซเชกเซเชธ เชธเชพเชฅเซ เชซเชฟเชฒเซเชเชฐ เชคเชฐเซเชเซ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชถเซ;
prctl เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชซเชฟเชฒเซเชเชฐ เชฒเซเชก เชเชฐเซ.
เชชเซเชฐเชฅเชฎ เชคเชฎเชพเชฐเซ เชชเซเชฐเชฎเชพเชฃเชญเซเชค เชฒเชพเชเชฌเซเชฐเซเชฐเซ เช เชจเซ Linux เชเชฐเซเชจเชฒเชฎเชพเชเชฅเซ เชนเซเชกเชฐเซเชจเซ เชเชฐเซเชฐ เชเซ:
#include <errno.h>
#include <linux/audit.h>
#include <linux/bpf.h>
#include <linux/filter.h>
#include <linux/seccomp.h>
#include <linux/unistd.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/prctl.h>
#include <unistd.h>
เช เชเชฆเชพเชนเชฐเชฃเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเชคเชพ เชชเชนเซเชฒเชพ, เชเชชเชฃเซ เชเชพเชคเชฐเซ เชเชฐเชตเซ เชเซเชเช เชเซ เชเชฐเซเชจเชฒ CONFIG_SECCOMP เช เชจเซ CONFIG_SECCOMP_FILTER เชธเชพเชฅเซ y เชชเชฐ เชธเซเช เชเชฐเซเชฒ เชเซ. เชตเชฐเซเชเชฟเชเช เชฎเชถเซเชจ เชชเชฐ เชคเชฎเซ เชเชจเซ เช เชฐเซเชคเซ เชเซเช เชเชฐเซ เชถเชเซ เชเซ:
cat /proc/config.gz| zcat | grep -i CONFIG_SECCOMP
เชฌเชพเชเซเชจเซ เชเซเชก เชฌเซ เชญเชพเชเชจเซ install_filter เชซเชเชเซเชถเชจ เชเซ. เชชเซเชฐเชฅเชฎ เชญเชพเชเชฎเชพเช BPF เชซเชฟเชฒเซเชเชฐเชฟเชเช เชธเซเชเชจเชพเชเชจเซ เช เชฎเชพเชฐเซ เชธเซเชเชฟ เชเซ:
static int install_filter(int nr, int arch, int error) {
struct sock_filter filter[] = {
BPF_STMT(BPF_LD + BPF_W + BPF_ABS, (offsetof(struct seccomp_data, arch))),
BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, arch, 0, 3),
BPF_STMT(BPF_LD + BPF_W + BPF_ABS, (offsetof(struct seccomp_data, nr))),
BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, nr, 0, 1),
BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ERRNO | (error & SECCOMP_RET_DATA)),
BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ALLOW),
};
เชธเซเชเชจเชพเช linux/filter.h เชซเชพเชเชฒเชฎเชพเช เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค BPF_STMT เช
เชจเซ BPF_JUMP เชฎเซเชเซเชฐเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชเชพเชฒเซ เชธเซเชเชจเชพเชเชฎเชพเชเชฅเซ เชชเชธเชพเชฐ เชฅเชเช.
- BPF_STMT(BPF_LD + BPF_W + BPF_ABS (offsetof(struct seccomp_data, arch))) - BPF_LD เชถเชฌเซเชฆ BPF_W เชจเชพ เชฐเซเชชเชฎเชพเช เชธเชฟเชธเซเชเชฎ เชฒเซเชก เชฅเชพเชฏ เชเซ เช เชจเซ เชเชเช เชพ เชฅเชพเชฏ เชเซ, เชชเซเชเซเช เชกเซเชเชพ เชจเชฟเชถเซเชเชฟเชค เชเชซเชธเซเช BPF_ABS เชชเชฐ เชธเซเชฅเชฟเชค เชเซ.
- BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, arch, 0, 3) - BPF_JEQ เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชคเชชเชพเชธเซ เชเซ เชเซ เชถเซเช BPF_K เชธเชเชเชฏเช เชธเซเชฅเชฟเชฐเชพเชเชเชฎเชพเช เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชฎเซเชฒเซเชฏ เชเชฎเชพเชจเชจเซ เชฌเชฐเชพเชฌเชฐ เชเซ. เชเซ เชเชฎ เชนเซเชฏ เชคเซ, เชเชเชฒเซ เชธเซเชเชจเชพ เชชเชฐ เชเชซเชธเซเช 0 เชชเชฐ เชเซเชฆเชเซ เชฒเชเชพเชตเซ, เช เชจเซเชฏเชฅเชพ เชเชฎเชพเชจ เชฎเซเชณ เชเชพเชคเซ เชจ เชนเซเชตเชพเชจเซ เชเชพเชฐเชฃเซ เชญเซเชฒ เชซเซเชเชเชตเชพ เชฎเชพเชเซ เชเชซเชธเซเช 3 (เช เชเชฟเชธเซเชธเชพเชฎเชพเช) เชชเชฐ เชเซเชฆเชเซ.
- BPF_STMT(BPF_LD + BPF_W + BPF_ABS (offsetof(struct seccomp_data, nr))) - BPF_LD เชฎเชพเชเชฅเซ BPF_W เชถเชฌเซเชฆเชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชฒเซเชก เชฅเชพเชฏ เชเซ เช เชจเซ เชธเชเชเชฟเชค เชฅเชพเชฏ เชเซ, เชเซ BPF_ABS เชจเชพ เชจเชฟเชถเซเชเชฟเชค เชเชซเชธเซเชเชฎเชพเช เชธเชฎเชพเชฏเซเชฒ เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชจเชเชฌเชฐ เชเซ.
โ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, nr, 0, 1) โ เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชจเชเชฌเชฐเชจเซ nr เชตเซเชฐเซเชเชฌเชฒเชจเชพ เชฎเซเชฒเซเชฏ เชธเชพเชฅเซ เชธเชฐเชเชพเชตเซ เชเซ. เชเซ เชคเซเช เชธเชฎเชพเชจ เชนเซเชฏ, เชคเซ เชเชเชณเชจเซ เชธเซเชเชจเชพ เชชเชฐ เชเชเชณ เชตเชงเซ เชเซ เช เชจเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒเชจเซ เช เชเซเชทเชฎ เชเชฐเซ เชเซ, เช เชจเซเชฏเชฅเชพ SECOMP_RET_ALLOW เชธเชพเชฅเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ.
- BPF_STMT(BPF_RET + BPF_K, SECOMP_RET_ERRNO | (เชญเซเชฒ & SECCOMP_RET_DATA)) - BPF_RET เชธเชพเชฅเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชธเชฎเชพเชชเซเชค เชเชฐเซ เชเซ เช เชจเซ เชชเชฐเชฟเชฃเชพเชฎเซ เชญเซเชฒ เชตเซเชฐเชฟเชฏเซเชฌเชฒเชจเชพ เชจเชเชฌเชฐ เชธเชพเชฅเซ SECOMP_RET_ERRNO เชญเซเชฒ เชชเซเชฆเชพ เชเชฐเซ เชเซ.
- BPF_STMT(BPF_RET + BPF_K, SECOMP_RET_ALLOW) - เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ BPF_RET เชธเชพเชฅเซ เชธเชฎเชพเชชเซเชค เชเชฐเซ เชเซ เช เชจเซ SECCOMP_RET_ALLOW เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒเชจเซ เชเชเซเชเชฟเชเซเชฏเซเช เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ.
SECOMP เช CBPF เชเซ
เชคเชฎเซ เชตเชฟเชเชพเชฐเซ เชฐเชนเซเชฏเชพ เชนเชถเซ เชเซ เชธเชเชเชฒเชฟเชค ELF เชเชฌเซเชเซเชเซเช เช เชฅเชตเชพ JIT เชธเชเชเชฒเชฟเชค C เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชฌเชฆเชฒเซ เชธเซเชเชจเชพเชเชจเซ เชธเซเชเชฟ เชถเชพ เชฎเชพเชเซ เชตเชชเชฐเชพเชฏ เชเซ.เชเชจเชพ เชฌเซ เชเชพเชฐเชฃเซ เชเซ.
โข เชธเซเชชเซเชฐเชฅเชฎ, Seccomp cBPF (เชเซเชฒเชพเชธเชฟเช BPF) เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ เช เชจเซ eBPF เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เชเซเชจเซ เช เชฐเซเชฅ เชเซ: เชคเซเชฎเชพเช เชเซเช เชฐเชเชฟเชธเซเชเชฐ เชจเชฅเซ, เชชเชฐเชเชคเซ เชเซเชฒเซเชฒเชพ เชเชฃเชคเชฐเซเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเชจเซ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชฎเชพเชคเซเชฐ เชเช เชธเชเชเชฏเช เชเซ, เชเซเชฎ เชเซ เชเชฆเชพเชนเชฐเชฃเชฎเชพเช เชเซเช เชถเชเชพเชฏ เชเซ.
โข เชฌเซเชเซเช, Seccomp เชธเซเชงเชพ BPF เชธเซเชเชจเชพเชเชจเซ เชถเซเชฐเซเชฃเซ เชฎเชพเชเซ เชจเชฟเชฐเซเชฆเซเชถเช เชธเซเชตเซเชเชพเชฐเซ เชเซ เช เชจเซ เชฌเซเชเซเช เชเชเช เชจเชนเซเช. เช เชฎเซ เชเซ เชฎเซเชเซเชฐเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเซ เชเซ เชคเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฐ-เชซเซเชฐเซเชเชกเชฒเซ เชฐเซเชคเซ เช เชธเซเชเชจเชพเชเชจเซ เชธเซเชชเชทเซเช เชเชฐเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเซ เชเซ.
เชเซ เชคเชฎเชจเซ เช เชเชธเซเชฎเซเชฌเชฒเซเชจเซ เชธเชฎเชเชตเชพเชฎเชพเช เชตเชงเซ เชฎเชฆเชฆเชจเซ เชเชฐเซเชฐ เชนเซเชฏ, เชคเซ เชธเซเชฏเซเชกเซเชเซเชกเชจเซ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซ เชเซ เชธเชฎเชพเชจ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ:
if (arch != AUDIT_ARCH_X86_64) {
return SECCOMP_RET_ALLOW;
}
if (nr == __NR_write) {
return SECCOMP_RET_ERRNO;
}
return SECCOMP_RET_ALLOW;
เชธเซเชเซเช_เชซเชฟเชฒเซเชเชฐ เชธเซเชเซเชฐเชเซเชเชฐเชฎเชพเช เชซเชฟเชฒเซเชเชฐ เชเซเชกเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซเชฏเชพ เชชเชเซ, เชคเชฎเชพเชฐเซ เชเซเชก เช เชจเซ เชซเชฟเชฒเซเชเชฐเชจเซ เชเชฃเชคเชฐเซ เชเชฐเซเชฒ เชฒเชเชฌเชพเช เชงเชฐเชพเชตเชคเชพ เชธเซเช_เชเชซเชชเซเชฐเซเชเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชชเชเซเชฅเซ เชเชฒเชพเชตเชตเชพเชจเซ เชเซเชทเชฃเชพ เชเชฐเชตเชพ เชฎเชพเชเซ เชฆเชฒเซเชฒ เชคเชฐเซเชเซ เช เชกเซเชเชพ เชธเซเชเซเชฐเชเซเชเชฐเชจเซ เชเชฐเซเชฐ เชเซ:
struct sock_fprog prog = {
.len = (unsigned short)(sizeof(filter) / sizeof(filter[0])),
.filter = filter,
};
install_filter เชซเชเชเซเชถเชจเชฎเชพเช เชฎเชพเชคเซเชฐ เชเช เช เชตเชธเซเชคเซ เชฌเชพเชเซ เชเซ - เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เช เชฒเซเชก เชเชฐเซ! เช เชเชฐเชตเชพ เชฎเชพเชเซ, เช เชฎเซ prctl เชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช, PR_SET_SECCOMP เชจเซ เชธเซเชฐเชเซเชทเชฟเชค เชเชฎเซเชชเซเชฏเซเชเชฟเชเช เชฎเซเชกเชฎเชพเช เชฆเชพเชเชฒ เชเชฐเชตเชพเชจเชพ เชตเชฟเชเชฒเซเชช เชคเชฐเซเชเซ เชฒเชเช เชเซเช. เชชเชเซ เช เชฎเซ เชฎเซเชกเชจเซ SECOMP_MODE_FILTER เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชซเชฟเชฒเซเชเชฐเชจเซ เชฒเซเชก เชเชฐเชตเชพ เชฎเชพเชเซ เชเชนเซเช เชเซเช, เชเซ sock_fprog เชชเซเชฐเชเชพเชฐเชจเชพ เชชเซเชฐเซเช เชตเซเชฐเซเชเชฌเชฒเชฎเชพเช เชธเชฎเชพเชฏเซเชฒ เชเซ:
if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog)) {
perror("prctl(PR_SET_SECCOMP)");
return 1;
}
return 0;
}
เชเซเชฒเซเชฒเซ, เช เชฎเซ เช เชฎเชพเชฐเชพ install_filter เชซเชเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซเช เชเซเช, เชชเชฐเชเชคเซ เชคเซ เชชเชนเซเชฒเชพเช เช เชฎเชพเชฐเซ เชตเชฐเซเชคเชฎเชพเชจ เชเชเซเชเซเชเซเชฏเซเชถเชจ เชฎเชพเชเซ PR_SET_NO_NEW_PRIVS เชธเซเช เชเชฐเชตเชพ prctl เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เช เชจเซ เชคเซเชฅเซ เชเชตเซ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเซ เชเชพเชณเชตเซ เชเซเชเช เชเซเชฏเชพเช เชฌเชพเชณเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชคเซเชฎเชจเชพ เชฎเชพเชคเชพเชชเชฟเชคเชพ เชเชฐเชคเชพเช เชตเชงเซ เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐเซ เชฎเซเชณเชตเซ เชเซ. เช เชธเชพเชฅเซ, เช เชฎเซ เชฐเซเช เช เชงเชฟเชเชพเชฐเซ เชตเชฟเชจเชพ install_filter เชซเชเชเซเชถเชจเชฎเชพเช เชจเซเชเซเชจเชพ prctl เชเซเชฒเซเชธ เชเชฐเซ เชถเชเซเช เชเซเช.
เชนเชตเซ เชเชชเชฃเซ install_filter เชซเชเชเซเชถเชจเชจเซ เชเซเชฒ เชเชฐเซ เชถเชเซเช เชเซเช. เชเชพเชฒเซ X86-64 เชเชฐเซเชเชฟเชเซเชเซเชเชฐเชฅเซ เชธเชเชฌเชเชงเชฟเชค เชคเชฎเชพเชฎ เชฐเชพเชเช เชธเชฟเชธเซเชเชฎ เชเซเชฒเซเชธเชจเซ เชฌเซเชฒเซเช เชเชฐเซเช เช เชจเซ เชซเชเซเชค เชเช เชชเชฐเชตเชพเชจเชเซ เชเชชเซเช เชเซ เชคเชฎเชพเชฎ เชชเซเชฐเชฏเชพเชธเซเชจเซ เช เชตเชฐเซเชงเซ เชเซ. เชซเชฟเชฒเซเชเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเชฏเชพ เชชเชเซ, เช เชฎเซ เชชเซเชฐเชฅเชฎ เชฆเชฒเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช เชฎเชฒ เชเชพเชฒเซ เชฐเชพเชเซเช เชเซเช:
int main(int argc, char const *argv[]) {
if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) {
perror("prctl(NO_NEW_PRIVS)");
return 1;
}
install_filter(__NR_write, AUDIT_ARCH_X86_64, EPERM);
return system(argv[1]);
}
เชเชพเชฒเซ, เชถเชฐเซ เชเชฐเซเช. เช เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชเชฎเซเชชเชพเชเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชชเชฃเซ เชเซเชฒเซเชเช เช เชฅเชตเชพ gcc เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซเช เชเซเช, เชเซเชเชชเชฃ เชฐเซเชคเซ เชคเซ เชเชพเชธ เชตเชฟเชเชฒเซเชชเซ เชตเชฟเชจเชพ main.c เชซเชพเชเชฒเชจเซเช เชเชฎเซเชชเชพเชเชฒ เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ:
clang main.c -o filter-write
เชจเซเชเชงเซเชฏเซเช เชเซ เชคเซเชฎ, เช เชฎเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฎเชพเชเชจเซ เชฌเชงเซ เชเชจเซเชเซเชฐเซเชเชจเซ เช เชตเชฐเซเชงเชฟเชค เชเชฐเซ เชเซ. เชเชจเซ เชเชเชพเชธเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชเช เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชเชฐเซเชฐ เชเซ เชเซ เชเชเชเช เชเชเชเชชเซเช เชเชฐเซ เชเซ - ls เชเช เชธเชพเชฐเชพ เชเชฎเซเชฆเชตเชพเชฐ เชเซเชตเซเช เชฒเชพเชเซ เชเซ. เชคเซเชฃเซ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เช เชฐเซเชคเซ เชตเชฐเซเชคเซ เชเซ:
ls -la
total 36
drwxr-xr-x 2 fntlnz users 4096 Apr 28 21:09 .
drwxr-xr-x 4 fntlnz users 4096 Apr 26 13:01 ..
-rwxr-xr-x 1 fntlnz users 16800 Apr 28 21:09 filter-write
-rw-r--r-- 1 fntlnz users 19 Apr 28 21:09 .gitignore
-rw-r--r-- 1 fntlnz users 1282 Apr 28 21:08 main.c
เช เชฆเซเชญเซเชค! เช เชฎเชพเชฐเชพ เชฐเซเชชเชฐ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชถเซเช เชฆเซเชเชพเชฏ เชเซ เชคเซ เช เชนเซเช เชเซ: เช เชฎเซ เชชเซเชฐเชฅเชฎ เชฆเชฒเซเชฒ เชคเชฐเซเชเซ เชชเชฐเซเชเซเชทเชฃ เชเชฐเชตเชพ เชฎเชพเชเซเช เชเซเช เชคเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เช เชฎเซ เชซเชเซเชค เชชเชพเชธ เชเชฐเซเช เชเซเช:
./filter-write "ls -la"
เชเซเชฏเชพเชฐเซ เชเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เช เชชเซเชฐเซเชเซเชฐเชพเชฎ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชเชพเชฒเซ เชเชเชเชชเซเช เชเชคเซเชชเชจเซเชจ เชเชฐเซ เชเซ. เชเซ เชเซ, เชถเซเช เชเชพเชฒเซ เชฐเชนเซเชฏเซเช เชเซ เชคเซ เชเซเชตเชพ เชฎเชพเชเซ เช เชฎเซ เชธเซเชเซเชฐเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซเช เชเซเช:
strace -f ./filter-write "ls -la"
เชเชพเชฐเซเชฏเชจเซเช เชชเชฐเชฟเชฃเชพเชฎ เชฎเซเชเชพ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช เชเซเชเชเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ, เชชเชฐเชเชคเซ เชคเซเชจเซ เช เชจเซเชฐเซเชช เชญเชพเช เชฆเชฐเซเชถเชพเชตเซ เชเซ เชเซ เชฐเซเชเซเชฐเซเชกเซเชธ EPERM เชญเซเชฒ เชธเชพเชฅเซ เช เชตเชฐเซเชงเชฟเชค เชเซ - เชคเซ เช เชเซ เช เชฎเซ เชเซเช เชตเซเชฏเซเช เชเซ. เชเชจเซ เช เชฐเซเชฅ เช เชเซ เชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชเชเชชเชฃ เชเชเชเชชเซเช เชเชฐเชคเซเช เชจเชฅเซ เชเชพเชฐเชฃ เชเซ เชคเซ เชฐเชพเชเช เชธเชฟเชธเซเชเชฎ เชเซเชฒเชจเซ เชเชเซเชธเซเชธ เชเชฐเซ เชถเชเชคเซเช เชจเชฅเซ:
[pid 25099] write(2, "ls: ", 4) = -1 EPERM (Operation not permitted)
[pid 25099] write(2, "write error", 11) = -1 EPERM (Operation not permitted)
[pid 25099] write(2, "n", 1) = -1 EPERM (Operation not permitted)
เชนเชตเซ เชคเชฎเซ เชธเชฎเชเซ เชเซ เชเซ Seccomp BPF เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชเซ เช เชจเซ เชคเชฎเซ เชคเซเชจเซ เชธเชพเชฅเซ เชถเซเช เชเชฐเซ เชถเชเซ เชเซ เชคเซเชจเซ เชธเชพเชฐเซ เชเซเชฏเชพเชฒ เชเซ. เชชเชฐเชเชคเซ เชถเซเช เชคเชฎเซ เชคเซเชจเซ เชธเชเชชเซเชฐเซเชฃ เชถเชเซเชคเชฟเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ cBPF เชจเซ เชฌเชฆเชฒเซ eBPF เชธเชพเชฅเซ เชธเชฎเชพเชจ เชตเชธเซเชคเซ เชชเซเชฐเชพเชชเซเชค เชเชฐเชตเชพเชจเซเช เชชเชธเชเชฆ เชเชฐเชถเซ เชจเชนเซเช?
eBPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชตเชฟเชถเซ เชตเชฟเชเชพเชฐเชคเซ เชตเชเชคเซ, เชฎเซเชเชพเชญเชพเชเชจเชพ เชฒเซเชเซ เชตเชฟเชเชพเชฐเซ เชเซ เชเซ เชคเซเช เชซเชเซเชค เชคเซเชฎเชจเซ เชฒเชเซ เชเซ เช เชจเซ เชคเซเชฎเชจเซ เชเชกเชฎเชฟเชจเชฟเชธเซเชเซเชฐเซเชเชฐ เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐเซ เชธเชพเชฅเซ เชฒเซเชก เชเชฐเซ เชเซ. เชเซเชฏเชพเชฐเซ เช เชตเชฟเชงเชพเชจ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชธเชพเชเซเช เชนเซเชฏ เชเซ, เชเชฐเซเชจเชฒ เชตเชฟเชตเชฟเชง เชธเซเชคเชฐเซ เชชเชฐ eBPF เชเชฌเซเชเซเชเซเชเซเชธเชจเซ เชธเซเชฐเชเซเชทเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชฎเชฟเชเซเชจเชฟเชเชฎเชจเซ เชธเชฎเซเชน เชฒเชพเชเซ เชเชฐเซ เชเซ. เช เชฎเชฟเชเซเชจเชฟเชเชฎเซเชธเชจเซ BPF LSM เชเซเชฐเซเชชเซเชธ เชเชนเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
BPF LSM เชซเชพเชเชธเซ
เชธเชฟเชธเซเชเชฎ เชเชตเซเชจเซเชเซเชธเชจเซเช เชเชฐเซเชเชฟเชเซเชเซเชเชฐ-เชธเซเชตเชคเชเชคเซเชฐ เชฆเซเชเชฐเซเช เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเชพ เชฎเชพเชเซ, LSM เชเซเชฐเซเชชเซเชธเชจเซ เชตเชฟเชญเชพเชตเชจเชพเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเซ เชเซ. เชนเซเช เชเซเชฒ เชคเชเชจเซเชเซ เชฐเซเชคเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชเซเชตเซ เช เชเซ, เชชเชฐเชเชคเซ เชธเชฟเชธเซเชเชฎ เชธเซเชตเชคเชเชคเซเชฐ เชเซ เช เชจเซ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ เชธเชพเชฅเซ เชธเชเชเชฒเชฟเชค เชเซ. LSM เชเช เชจเชตเซ เชเซเชฏเชพเชฒ เชชเซเชฐเซ เชชเชพเชกเซ เชเซ เชเซเชฎเชพเช เชเชฌเซเชธเซเชเซเชฐเซเชเซเชถเชจ เชฒเซเชฏเชฐ เชตเชฟเชตเชฟเชง เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชชเชฐ เชธเชฟเชธเซเชเชฎ เชเซเชฒเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชคเซ เชตเชเชคเซ เชเชตเชคเซ เชธเชฎเชธเซเชฏเชพเชเชจเซ เชเชพเชณเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเซ เชถเชเซ เชเซ.
เชฒเชเชตเชพเชจเชพ เชธเชฎเชฏเซ, เชเชฐเซเชจเชฒ เชชเชพเชธเซ BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชธเชพเชฅเซ เชธเชเชเชณเชพเชฏเซเชฒเชพ เชธเชพเชค เชนเซเช เชเซ, เช เชจเซ SELinux เช เชเชเชฎเชพเชคเซเชฐ เชฌเชฟเชฒเซเช-เชเชจ LSM เชเซ เชเซ เชคเซเชฎเชจเซ เชฒเชพเชเซ เชเชฐเซ เชเซ.
เชซเชพเชเชธเซ เชฎเชพเชเซเชจเซ เชธเซเชคเซเชฐเซเชค เชเซเชก เชซเชพเชเชฒเชฎเชพเช เชเชฐเซเชจเชฒ เชเซเชฐเซเชฎเชพเช เชธเซเชฅเชฟเชค เชเซ include/linux/security.h:
extern int security_bpf(int cmd, union bpf_attr *attr, unsigned int size);
extern int security_bpf_map(struct bpf_map *map, fmode_t fmode);
extern int security_bpf_prog(struct bpf_prog *prog);
extern int security_bpf_map_alloc(struct bpf_map *map);
extern void security_bpf_map_free(struct bpf_map *map);
extern int security_bpf_prog_alloc(struct bpf_prog_aux *aux);
extern void security_bpf_prog_free(struct bpf_prog_aux *aux);
เชคเซเชฎเชพเชเชฅเซ เชฆเชฐเซเชเชจเซ เช เชฎเชฒเชจเชพ เชตเชฟเชตเชฟเชง เชคเชฌเชเซเชเชพเชฎเชพเช เชฌเซเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเชถเซ:
โ security_bpf โ เชเชเซเชเชฟเชเซเชฏเซเชเซเชก BPF เชธเชฟเชธเซเชเชฎ เชเซเชฒเซเชธเชจเซ เชชเซเชฐเชพเชฐเชเชญเชฟเช เชคเชชเชพเชธ เชเชฐเซ เชเซ;
- security_bpf_map - เชเซเชฏเชพเชฐเซ เชเชฐเซเชจเชฒ เชจเชเชถเชพ เชฎเชพเชเซ เชซเชพเชเชฒ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพ เชชเชฐเชค เชเชฐเซ เชเซ เชคเซเชฏเชพเชฐเซ เชคเชชเชพเชธ เชเชฐเซ เชเซ;
- security_bpf_prog - เชเซเชฏเชพเชฐเซ เชเชฐเซเชจเชฒ eBPF เชชเซเชฐเซเชเซเชฐเชพเชฎ เชฎเชพเชเซ เชซเชพเชเชฒ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพ เชชเชฐเชค เชเชฐเซ เชเซ เชคเซเชฏเชพเชฐเซ เชคเชชเชพเชธ เชเชฐเซ เชเซ;
โ security_bpf_map_alloc โ BPF เชจเชเชถเชพเชจเซ เช เชเชฆเชฐ เชธเซเชฐเชเซเชทเชพ เชเซเชทเซเชคเซเชฐ เชเชฐเชเชญ เชฅเชฏเซเชฒ เชเซ เชเซ เชเซเชฎ เชคเซ เชคเชชเชพเชธเซ เชเซ;
- security_bpf_map_free - BPF เชจเชเชถเชพเชจเซ เช เชเชฆเชฐ เชธเซเชฐเชเซเชทเชพ เชเซเชทเซเชคเซเชฐ เชธเชพเชซ เชเซ เชเซ เชเซเชฎ เชคเซ เชคเชชเชพเชธเซ เชเซ;
โ security_bpf_prog_alloc โ BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเชจเซ เช เชเชฆเชฐ เชธเซเชฐเชเซเชทเชพ เชเซเชทเซเชคเซเชฐ เชเชฐเชเชญ เชฅเชฏเซเชฒ เชเซ เชเซ เชเซเชฎ เชคเซ เชคเชชเชพเชธเซ เชเซ;
- security_bpf_prog_free - BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเชจเซ เช เชเชฆเชฐ เชธเซเชฐเชเซเชทเชพ เชซเซเชฒเซเชก เชธเชพเชซ เชเซ เชเซ เชเซเชฎ เชคเซ เชคเชชเชพเชธเซ เชเซ.
เชนเชตเซ, เช เชฌเชงเซเช เชเซเชเชจเซ, เช เชฎเซ เชธเชฎเชเซเช เชเซเช: LSM BPF เชเชจเซเชเชฐเชธเซเชชเซเชเชฐเซเชธ เชชเชพเชเชณเชจเซ เชตเชฟเชเชพเชฐ เช เชเซ เชเซ เชคเซเช เชฆเชฐเซเช eBPF เชเชฌเซเชเซเชเซเชเชจเซ เชฐเชเซเชทเชฃ เชชเซเชฐเซเช เชชเชพเชกเซ เชถเชเซ เชเซ, เชคเซเชจเซ เชเชพเชคเชฐเซ เชเชฐเซเชจเซ เชเซ เชฏเซเชเซเชฏ เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐเซ เชงเชฐเชพเชตเชคเชพ เชฒเซเชเซ เช เชเชพเชฐเซเชกเซเชธ เช เชจเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชชเชฐ เชเชชเชฐเซเชถเชจ เชเชฐเซ เชถเชเซ เชเซ.
เชธเชพเชฐเชพเชเชถ
เชธเซเชฐเชเซเชทเชพ เชเชตเซ เชเซเช เชตเชธเซเชคเซ เชจเชฅเซ เชเซ เชคเชฎเซ เชธเซเชฐเชเซเชทเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซ เชคเซ เชฆเชฐเซเช เชตเชธเซเชคเซ เชฎเชพเชเซ เชคเชฎเซ เชเช-เชธเชพเชเช-เชซเซเช-เชฌเชงเซ เชฐเซเชคเซ เช เชฎเชฒ เชเชฐเซ เชถเชเซ เชเซ. เชตเชฟเชตเชฟเชง เชธเซเชคเชฐเซ เช เชจเซ เชตเชฟเชตเชฟเชง เชฐเซเชคเซ เชธเชฟเชธเซเชเชฎเซเชจเซเช เชฐเชเซเชทเชฃ เชเชฐเชตเชพเชฎเชพเช เชธเชเซเชทเชฎ เชฌเชจเชตเซเช เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซ. เชฎเชพเชจเซ เชเซ เชจเชพ เชฎเชพเชจเซ, เชธเชฟเชธเซเชเชฎเชจเซ เชธเซเชฐเชเซเชทเชฟเชค เชเชฐเชตเชพเชจเซ เชถเซเชฐเซเชทเซเช เชฐเซเชค เช เชเซ เชเซ เชตเชฟเชตเชฟเชง เชชเซเชเชฟเชถเชจเซเชธเชฅเซ เช เชฒเช-เช เชฒเช เชธเซเชคเชฐเชจเชพ เชฐเชเซเชทเชฃเชจเซเช เชเชฏเซเชเชจ เชเชฐเชตเซเช, เชเซเชฅเซ เชเช เชธเซเชคเชฐเชจเซ เชธเซเชฐเชเซเชทเชพ เชเชเชพเชกเชตเซ เชธเชฎเชเซเชฐ เชธเชฟเชธเซเชเชฎเชจเซ เชเชเซเชธเซเชธ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชคเซ เชจเชฅเซ. เชฎเซเชเซเชฏ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชเช เช เชฎเชจเซ เชตเชฟเชตเชฟเชง เชธเซเชคเชฐเซ เช เชจเซ เชเชเชชเซเชเชจเซเชเซเชธเชจเซ เชธเชฎเซเชน เชเชชเชตเชพเชจเซเช เชเชคเซเชคเชฎ เชเชพเชฎ เชเชฐเซเชฏเซเช เชเซ. เช เชฎเซ เชเชถเชพ เชฐเชพเชเซเช เชเซเช เชเซ เช เชฎเซ เชคเชฎเชจเซ เชธเซเชคเชฐเซ เชถเซเช เชเซ เช เชจเซ เชคเซเชฎเชจเซ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเชจเซ เชเชชเชฏเซเช เชเซเชตเซ เชฐเซเชคเซ เชเชฐเชตเซ เชคเซเชจเซ เชธเชพเชฐเซ เชธเชฎเช เชเชชเซ เชเซ.
เชฒเซเชเชเซ เชตเชฟเชถเซ
เชกเซเชตเชฟเชก เชเชพเชฒเชตเซเชฐเชพ Netlify เชเชพเชคเซ CTO เชเซ. เชคเซเชฎเชฃเซ เชกเซเชเชฐ เชธเชชเซเชฐเซเชเชฎเชพเช เชเชพเชฎ เชเชฐเซเชฏเซเช เช เชจเซ Runc, Go เช เชจเซ BCC เชเซเชฒเซเชธ เชคเซเชฎเช เช เชจเซเชฏ เชเชชเชจ เชธเซเชฐเซเชธ เชชเซเชฐเซเชเซเชเซเชเซเชธเชจเชพ เชตเชฟเชเชพเชธเชฎเชพเช เชฏเซเชเชฆเชพเชจ เชเชชเซเชฏเซเช. เชกเซเชเชฐ เชชเซเชฐเซเชเซเชเซเชเซเชธ เช เชจเซ เชกเซเชเชฐ เชชเซเชฒเชเชเชจ เชเชเซเชธเชฟเชธเซเชเชฎเชจเชพ เชตเชฟเชเชพเชธ เชชเชฐเชจเชพ เชคเซเชฎเชจเชพ เชเชพเชฐเซเชฏ เชฎเชพเชเซ เชเชพเชฃเซเชคเชพ เชเซ. เชกเซเชตเชฟเชก เชซเซเชฒเซเชฎ เชเซเชฐเชพเชซ เชตเชฟเชถเซ เชเซเชฌ เช เชเซเชธเซเชธเชพเชฆเชพเชฐ เชเซ เช เชจเซ เชนเชเชฎเซเชถเชพ เชชเซเชฐเชฆเชฐเซเชถเชจเชจเซ เชเชชเซเชเชฟเชฎเชพเชเช เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซ.
เชฒเซเชฐเซเชจเซเชเซ เชซเซเชจเซเชเชพเชจเชพ Sysdig เชเชพเชคเซ เชเชชเชจ เชธเซเชฐเซเชธ เชเซเชฎ เชชเชฐ เชเชพเชฎ เชเชฐเซ เชเซ, เชเซเชฏเชพเช เชคเซเช เชฎเซเชเซเชฏเชคเซเชตเซ Falco เชชเชฐ เชงเซเชฏเชพเชจ เชเซเชจเซเชฆเซเชฐเชฟเชค เชเชฐเซ เชเซ, เชเซ เชเช เชเซเชฒเชพเชเชก เชจเซเชเชฟเชต เชเชฎเซเชชเซเชฏเซเชเชฟเชเช เชซเชพเชเชจเซเชกเซเชถเชจ เชชเซเชฐเซเชเซเชเซเช เชเซ เชเซ เชเชฐเซเชจเชฒ เชฎเซเชกเซเชฏเซเชฒ เช เชจเซ eBPF เชฆเซเชตเชพเชฐเชพ เชเชจเซเชเซเชจเชฐ เชฐเชจเชเชพเชเชฎ เชธเซเชฐเชเซเชทเชพ เช เชจเซ เชตเชฟเชธเชเชเชคเชคเชพ เชถเซเชง เชชเซเชฐเซ เชชเชพเชกเซ เชเซ. เชคเซ เชกเชฟเชธเซเชเซเชฐเชฟเชฌเซเชฏเซเชเซเชก เชธเชฟเชธเซเชเชฎเซเชธ, เชธเซเชซเซเชเชตเซเชฐ เชกเชฟเชซเชพเชเชจเซเชก เชจเซเชเชตเชฐเซเชเชฟเชเช, เชฒเชฟเชจเชเซเชธ เชเชฐเซเชจเชฒ เช เชจเซ เชชเชฐเชซเซเชฐเซเชฎเชจเซเชธ เชเชจเชพเชฒเชฟเชธเชฟเชธ เชตเชฟเชถเซ เชเชคเซเชธเชพเชนเซ เชเซ.
ยป เชชเซเชธเซเชคเช เชตเชฟเชถเซ เชตเชงเซ เชฎเชพเชนเชฟเชคเซ เชฎเชพเชเซ, เชเซเชชเชพ เชเชฐเซเชจเซ เชฎเซเชฒเชพเชเชพเชค เชฒเซ
ยป
ยป
Khabrozhiteli เชฎเชพเชเซ เชเซเชชเชจ เชชเชฐ 25% เชกเชฟเชธเซเชเชพเชเชจเซเช - Linux
เชชเซเชธเซเชคเชเชจเชพ เชชเซเชชเชฐ เชตเชฐเซเชเชจเชจเซ เชเซเชเชตเชฃเซ เชเชฐเซเชฏเชพ เชชเชเซ, เช-เชฎเซเชฒ เชชเชฐ เช-เชฌเซเช เชฎเซเชเชฒเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชธเซเชฐเซเชธ: www.habr.com