опция sudo -u не работает

У меня есть программа, которая читает устройство из /dev/i2c-1. Это программное обеспечение называется pa_access, и вот пример запуска:

ubuntu@arm:~$ sudo ./pa_access

Input [0]: 0
Input [1]: 0
Input [2]: 0
Input [3]: 0
Input [4]: 0
Input [5]: 0
Input [6]: 0
Input [7]: 0
Input [8]: 0
Input [9]: 0
Input [10]: 0
Input [11]: 0
Input [12]: 0
Input [13]: 0
Input [14]: 0
Input [15]: 0
Input [16]: 0
Input [17]: 0
Input [18]: 0
Input [19]: 0
Input [20]: 0
Input [21]: 0
Input [22]: 0
Input [23]: 0
Input [24]: 0
Input [25]: 0
Input [26]: 1
Input [27]: 0
Input [28]: 0
Input [29]: 0

Как видите, это программное обеспечение считывает набор аппаратных входов, а затем распечатывает состояния входов. По этой причине программа должна выполняться с использованием sudo.
Проблема возникает, когда пользователь указан параметром "-u", например:

ubuntu@arm:~$ sudo -u www-data ./pa_access

Error setting comunication with PA board on /dev/i2c-1.
Input [0]: 0
Input [1]: 224
Input [2]: 252
Input [3]: 182
Input [4]: 169
Input [5]: 138
Input [6]: 0
Input [7]: 0
Input [8]: 79
Input [9]: 146
Input [10]: 0
Input [11]: 0
Input [12]: 188
Input [13]: 187
Input [14]: 246
Input [15]: 182
Input [16]: 33
Input [17]: 146
Input [18]: 0
Input [19]: 0
Input [20]: 0
Input [21]: 0
Input [22]: 0
Input [23]: 0
Input [24]: 0
Input [25]: 160
Input [26]: 246
Input [27]: 182
Input [28]: 0
Input [29]: 0

Программа выводит сообщение об ошибке, потому что у нее нет разрешения на доступ к файлу устройства (такая же ошибка возникает при запуске без sudo).
Та же ошибка появляется, если попробовать с зарегистрированным пользователем:

ubuntu@arm:~$ sudo -u ubuntu ./pa_access

Error setting comunication with PA board on /dev/i2c-1.
Input [0]: 0
Input [1]: 224
Input [2]: 252
...
...
Input [26]: 246
Input [27]: 182
Input [28]: 0
Input [29]: 0

Но передача root в качестве параметра для -u работает нормально.
Нужно указать пользователя, так как я хочу запустить программу из PHP-скрипта.

Что не так? Любые идеи? Заранее спасибо.


person Martin Petrei    schedule 07.02.2014    source источник


Ответы (2)


Когда вы запускаете команду с sudo, вы фактически меняете пользователя на root. Вам должно быть root, чтобы получить доступ к оборудованию.

Из Википедии:

sudo... позволяет пользователям запускать программы с правами безопасности другого пользователя (обычно это суперпользователь или root).

Редактировать: вам следует рассмотреть решение этого вопроса . Он предлагает создать бинарную оболочку, которую можно выполнить на PHP, и запустить программу с привилегией root.

person bblincoe    schedule 07.02.2014

Очевидно, что программа может быть запущена только с правами root. www-data во многом не является корневым, что в некотором роде важно. То, что вы, вероятно, захотите прочитать, это setuid.

person Andrejovich    schedule 07.02.2014