Я пытаюсь разрешить мое node.js применение для перезапуска freeradius (
Код: Выделить всё
freeradius.service
Когда я запускаю команду вручную из терминала как root [/b], он работает нормально:
Код: Выделить всё
sudo -n /usr/bin/systemctl restart freeradius
Код: Выделить всё
❌ Error restarting FreeRADIUS: Command failed: sudo -n /usr/bin/systemctl restart freeradius
sudo: a password is required
< /code>
[b] Что я сделал до сих пор: < /strong> < /h3>
[h4] Файл Sudoers: [/b] [/h4]
Я создал следующий файл sudoers в /etc/sudoers.d/nodejs-freeradius-restart
Код: Выделить всё
# Node.js permission to restart FreeRADIUS without a password
root ALL=(ALL) NOPASSWD:/usr/bin/systemctl restart freeradius
Код: Выделить всё
sudo chmod 0440 /etc/sudoers.d/nodejs-freeradius-restart
sudo chown root:root /etc/sudoers.d/nodejs-freeradius-restart
Код: Выделить всё
sudo -l -U root
< /code>
output: < /p>
User root may run the following commands on radiusserve-v0:
(ALL : ALL) ALL
(ALL) NOPASSWD: /usr/bin/systemctl restart freeradius
запуск команды вручную
работает вручную:Код: Выделить всё
sudo -n /usr/bin/systemctl restart freeradius
< /code>
работает при явном запуске как root: < /p>
sudo -u root sudo -n /usr/bin/systemctl restart freeradius
Запуск команды в node.js
Вот функция node.js , что выполняет перезапуск: < /p>Код: Выделить всё
const { exec } = require('child_process');
const restartFreeRadius = (res) => {
console.log('🔄 Restarting FreeRADIUS...');
exec('/usr/bin/sudo -n /usr/bin/systemctl restart freeradius', (error, stdout, stderr) => {
if (error) {
console.error(`❌ Error restarting FreeRADIUS: ${stderr || error.message}`);
return res.status(500).json({ message: 'NAS created, but FreeRADIUS restart failed', error: stderr || error.message });
}
console.log(`✅ FreeRADIUS restarted successfully: ${stdout}`);
return res.status(200).json({ message: '✅ FreeRADIUS restarted successfully' });
});
};
module.exports = restartFreeRadius;
Код: Выделить всё
❌ Error restarting FreeRADIUS: Command failed: sudo -n systemctl restart freeradius
sudo: a password is required
🔍 STDERR: sudo: a password is required
< /code>
обеспечивает доступ к Node.js. -Bash PrettyPrint-Override ">which sudo
which systemctl
< /code>
output: < /p>
/usr/bin/sudo
/usr/bin/systemctl
Код: Выделить всё
ps aux | grep node
< /code>
output: < /p>
root 317532 0.0 0.1 6480 2236 pts/0 S+ 06:27 0:00 node server.js
Вопросы:
- Почему sudo -n/usr/bin/ SystemCtl перезапуск Freeradius работать вручную, но не в node.js ? не требуя пароля?
Подробнее здесь: https://stackoverflow.com/questions/794 ... ut-fails-i