Primeiro, você compila seu programa como root, então o binário resultante é de propriedade de root:
[04/03/2018 06:04] seed@ubuntu:~/Desktop/assignment$ ls -l test
-rwsr-xr-x 1 root root 7198 Apr 3 05:56 test
# ^^^^
Em segundo lugar, executando chmod 4755 test
você definiu setuid bit em ./test
:
[04/03/2018 06:04] seed@ubuntu:~/Desktop/assignment$ ls -l test
-rwsr-xr-x 1 root root 7198 Apr 3 05:56 test
# ^
Isso significa que seu binário é executado como seu proprietário de arquivo (= root), não como usuário que o iniciou. É por isso que /bin/sh
gerado por ele também é executado pelo root.