Возможно, в привилегиях.
useradd, вообще-то, по умолчанию запускается только с правами root. CGI, с большой долей вероятности правами root не наделен, и правильно. При «обычном запуске» — Вы от рута запускаете, что оно работает? Или в вашей конфигурации разрешено использование useradd сторонними пользователями?
В крайнем случае — перенаправьте вывод команды useradd… > useradd.log 2> useradd.err.log. И посмотрите, что будет