2012-05-07 5 views
2

У меня есть тестовое приложение на уровне пользователя, работающее на мобильном устройстве Linux. Один из тестов включает включение/отключение датчика бумаги принтера, который требует прав root, записывающих файл устройства. Есть ли способ предоставить мое приложение такую ​​привилегию? Если нет, есть ли обходной путь для этого?Как предоставить root-доступ к пользовательскому приложению?

ответ

3

Это будет делать,

в 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).

2

Вы можете установить корень программы setuid, что означает, что он всегда будет выполняться как root, даже если пользователь запускает его. Это обычно требует особой осторожности, чтобы отбрасывать привилегии внутри программы после завершения необходимых действий, требующих доступа root.

1

У вас также может быть вспомогательная программа, сама по себе установив root -или с соответствующими возможностями или запущенная через sudo - которые общаются с принтером. В вашем основном приложении будет fork & выполнить эту программу и обмениваться ею через трубы, поэтому она не должна запускаться как root.

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

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

+0

Что вы подразумеваете под хелпер-программой? Можете ли вы дать мне простой пример? : D – Owen

+0

объяснено в моем отредактированном ответе –

-2

Вы должны определенно стараться избегать запуска своей программы как «root», поскольку это не только позволит вашей программе читать/писать/dev/sensordevice, но и предоставляет доступ практически к любой вашей системе (включая возможность полностью кирпично)

Вы должны поэтому попытаться добавить мелкозернистый доступ только к нужному вам ресурсу, используя надлежащие группы и удостоверившись, что ваш файл устройства предоставляет доступ к вашей группе. см. (Например) udev о том, как написать правильное правило udev, которое предоставляет доступ для записи определенного устройства к данной группе.

Смежные вопросы