Android initrc中執行shell指令碼

2021-10-25 06:59:50 字數 1521 閱讀 5205

由於initrc中支援的命令有限(不能支援system/bin下所有命令),而且不適合寫比較複雜的邏輯(如傳參、函式塊 ),通常把這些功能放在shell指令碼裡來執行,但是shell指令碼又需要放在initrc中來呼叫執行。因為隨著android版本更新,selinux的限制越來越多,在initrc中執行shell指令碼肯能會遇到很多問題,即使設定selinux 為permissive 也可能會遇到selinux問題。下面提供兩個參考示例供參考

service test_shell /system/etc/test.sh

user root

disabled

oneshot

seclabel u:r:init:s0

這種是以service的形式執行shell指令碼,在需要執行的地方寫start test_shell即可。

注意:必須配置seclabel ,比較方便的辦法就是在service中加seclabel u:r:init:s0 借助init的se標籤

也可以在原始碼中定義。

另外這種寫法需要保證指令碼具有可執行許可權,如果沒有可以參考下面的

service test_shell system/bin/sh /system/etc/test.sh

user root

disabled

oneshot

seclabel u:r:init:s0

上面的寫法有時可能遇到在initrc執行中被殺的可能,而且無法保證執行時間順序,下面推薦一種更好的寫法

exec - root root -- /system/etc/test.sh

這種是借用initrc的command exec 來執行,這種寫法也必須配置selinux許可權

修改file_contexts,新增/system/etc/test.sh u:object_r:test_sh_exec:s0

test_sh 的selinux的定義參考

type test_sh, domain, coredomain, mlstrustedsubject;

type test_sh_exec, exec_type, vendor_file_type, file_type;

init_daemon_domain(test_sh)

allow test_sh self:tcp_socket create_stream_socket_perms;

allow test_sh self:tcp_socket rw_socket_perms;

allow test_sh self:capability ;

allow test_sh port:tcp_socket ;

allow test_sh node:tcp_socket ;

allow test_sh fwmarkd_socket:sock_file ;

allow test_sh shell_exec:file ;

allow test_sh netd:unix_stream_socket ;

it運維中faq IT運維解決方案

藍快為企業提供桌面運維 系統運維 應用系統運維 儲存與備份運維 網路運維 資訊保安運維等服務,降低企業裝置的故障率,提公升裝置的執行能力,推動企業商業價值的實現 藍快it運維服務 桌面運維服務 對終端使用者及相關辦公裝置等問題,進行響應支援,保障使用者的日常辦公 系統運維服務 對各類伺服器進行日常維...

電路中反饋及運放

反饋 可描述為將放大電路的輸出量 電壓或電流 的一部分或全部,通過一定的方式送回放大電路的輸入端。我們有時把引入反饋的放大電路稱為閉環放大器,沒有引入的稱為開環放大器。按正負反饋分 反饋輸入訊號能使原來的輸入訊號減小即為負反饋,反之則為正反饋。怎麼判斷電路是正反饋還是負反饋呢?這裡採用的方法是瞬時極...

SprngMVC中request請求的執行流程

前面我們已經進行過springmvc的原始碼分析 詳見 spring原始碼debug指南 3 springmvc執行原理 本篇主要以兩段 為切入點,梳理一下request請求在springmvc中的執行流程。第一段 servlet的入口配置,它主要負責將request請求轉交給springmvc c...