У меня есть тестовое приложение на уровне пользователя, работающее на мобильном устройстве Linux. Один из тестов включает включение/отключение датчика бумаги принтера, который требует прав root, записывающих файл устройства. Есть ли способ предоставить мое приложение такую привилегию? Если нет, есть ли обходной путь для этого?Как предоставить root-доступ к пользовательскому приложению?
ответ
Это будет делать,
в root
выполнения:
chown -v root:root /path/to/yourapp
chmod -v 4755 /path/to/yourapp
или альтернативно
chmod -v u+s /path/to/yourapp
или альтернативно
man chmod
Это будет не работает со сценариями. И да, вы должны серьезно относиться к тому, что jdizzle сказал о снижении ненужных привилегий.
Другой способ решить эту задачу - сделать пользователя, который запускает приложение, членом группы, которая владеет файлом устройства. Например,
ls -la /dev/devicefile
crw-rw---- 1 root printer 4, 0 may 6 10:56 /dev/devicefile
члены printer
групп могут читать и писать на устройство, так что вам просто нужно добавить joe
к printer
группе (и перезапустить сеанс).
gpasswd -a joe printer
Если вам нужно отрегулировать разрешения на устройство, вам, вероятно, потребуется отредактировать правила udev, чтобы сделать его постоянным. Но chmod
тоже должен работать.
Другие варианты: setcap(8)
(хороший путеводитель here) и sudo(8)
.
Вы можете установить корень программы setuid, что означает, что он всегда будет выполняться как root, даже если пользователь запускает его. Это обычно требует особой осторожности, чтобы отбрасывать привилегии внутри программы после завершения необходимых действий, требующих доступа root.
У вас также может быть вспомогательная программа, сама по себе установив root -или с соответствующими возможностями или запущенная через sudo
- которые общаются с принтером. В вашем основном приложении будет fork & выполнить эту программу и обмениваться ею через трубы, поэтому она не должна запускаться как root.
Вспомогательная программа будет простой исполняемый файл (с соответствующими возможностями), который будет запущен только вашим основным приложением (не непосредственно пользователем) и общаться с ним через трубы или аргументы программы и т.д.
много графических административных программ выполняются аналогично: графическая часть - это программа, отделенная от административной части, и они общаются соответствующим образом. Только административная программа (обычно существующие программы командной строки, такие как adduser
) нуждаются в особой привилегии.
Вы должны определенно стараться избегать запуска своей программы как «root», поскольку это не только позволит вашей программе читать/писать/dev/sensordevice, но и предоставляет доступ практически к любой вашей системе (включая возможность полностью кирпично)
Вы должны поэтому попытаться добавить мелкозернистый доступ только к нужному вам ресурсу, используя надлежащие группы и удостоверившись, что ваш файл устройства предоставляет доступ к вашей группе. см. (Например) udev о том, как написать правильное правило udev, которое предоставляет доступ для записи определенного устройства к данной группе.
- 1. Предоставить доступ к правильному пользовательскому агенту
- 2. Как я могу предоставить доступ к этому пользовательскому DAL?
- 3. Запрос пользователя к пользовательскому приложению не отображается в уведомлениях
- 4. можно ли предоставить доступ только определенным папкам к приложению?
- 5. Предоставить данные пользователей от Salesforce стороннему приложению
- 6. Как предоставить дополнительные аргументы пользовательскому средству отображения символов в Highcharts?
- 7. Доступ к пользовательскому каналу
- 8. Пояснения к пользовательскому интерфейсу
- 9. Можно ли разрешить конкретному пользовательскому приложению запускаться в режиме ядра?
- 10. Требования к пользовательскому API
- 11. Перейти к пользовательскому пространству
- 12. Как пользователи могут предоставить моему приложению разрешение users_posts?
- 13. Добавление поддержки REST к приложению
- 14. Как проверить запросы к моему приложению Parse.com?
- 15. как пригласить друга к приложению
- 16. Как подключиться к веб-приложению
- 17. Как применить NSApplicationPresentationOptions к приложению?
- 18. Доступ к одному приложению OpenShift?
- 19. Функция привязки к пользовательскому состоянию
- 20. Применить datatemplate к пользовательскому объекту?
- 21. Доступ к пользовательскому элементу ListView
- 22. Сохранить скриншот к пользовательскому фотоальбому
- 23. Как мы можем предоставить нашему AWS-приложению доступ к ресурсам клиентов, не требуя их секретного ключа?
- 24. Как предоставить ограниченный доступ к приложению GWT среди нескольких компьютеров из разных регионов
- 25. Google Cloud Storage: как я могу предоставить доступ установленному приложению только к одному ведру?
- 26. Как предоставить root-доступ к определенному приложению из исходного кода вместо укоренения ROM?
- 27. Как я могу предоставить свои права доступа к системному приложению для привязки привилегированных портов?
- 28. Как мне предоставить суперпользователю доступ к моему приложению на устройстве, которое я владею и управляю?
- 29. Привязать сетку к пользовательскому управлению
- 30. привязка данных к пользовательскому UserControl
Что вы подразумеваете под хелпер-программой? Можете ли вы дать мне простой пример? : D – Owen
объяснено в моем отредактированном ответе –