Почему sudo -n/usr/bin/systemctl перезагрузит Freeradius вручную, но терпит неудачу в node.js с «sudo: пароль требуется»Linux

Ответить Пред. темаСлед. тема
Anonymous
 Почему sudo -n/usr/bin/systemctl перезагрузит Freeradius вручную, но терпит неудачу в node.js с «sudo: пароль требуется»

Сообщение Anonymous »

Сводка задач:
Я пытаюсь разрешить мое node.js применение для перезапуска freeradius (

Код: Выделить всё

freeradius.service
), не требуя пароля.
Когда я запускаю команду вручную из терминала как root [/b], он работает нормально:

Код: Выделить всё

sudo -n /usr/bin/systemctl restart freeradius
Пароль не требуется, и Freeradius успешно запускается. пытается выполнить одну и ту же команду, используя child_process.exec , это не удалось с этой ошибкой:

Код: Выделить всё

❌ 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:

Код: Выделить всё

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;
не удастся в node.js с:

Код: Выделить всё

❌ 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
проверил, какой пользователь node.js работает как:

Код: Выделить всё

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
(узел работает как root , так что он должен работать!) Служба:
Вопросы:
  • Почему sudo -n/usr/bin/ SystemCtl перезапуск Freeradius работать вручную, но не в node.js ? не требуя пароля?


Подробнее здесь: https://stackoverflow.com/questions/794 ... ut-fails-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»