Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Startup Init Lite
提交
82a23350
S
Startup Init Lite
项目概览
OpenHarmony
/
Startup Init Lite
接近 2 年 前同步成功
通知
3
Star
37
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Startup Init Lite
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
82a23350
编写于
3月 07, 2022
作者:
O
openharmony_ci
提交者:
Gitee
3月 07, 2022
浏览文件
操作
浏览文件
下载
差异文件
!369 Add:针对读取param进行权限管控
Merge pull request !369 from 熊磊/CJ_0303
上级
fbed4b59
9ab3e1f8
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
105 addition
and
3 deletion
+105
-3
services/begetctl/BUILD.gn
services/begetctl/BUILD.gn
+11
-0
services/begetctl/param_cmd.c
services/begetctl/param_cmd.c
+7
-0
services/loopevent/include/loop_event.h
services/loopevent/include/loop_event.h
+1
-0
services/loopevent/task/le_streamtask.c
services/loopevent/task/le_streamtask.c
+6
-0
services/param/BUILD.gn
services/param/BUILD.gn
+9
-1
services/param/adapter/param_dac.c
services/param/adapter/param_dac.c
+3
-0
services/param/manager/param_manager.c
services/param/manager/param_manager.c
+51
-0
services/param/manager/param_message.c
services/param/manager/param_message.c
+3
-1
services/param/service/param_service.c
services/param/service/param_service.c
+14
-1
未找到文件。
services/begetctl/BUILD.gn
浏览文件 @
82a23350
...
...
@@ -55,6 +55,7 @@ ohos_executable("begetctl") {
"//base/startup/init_lite/interfaces/innerkits:libbeget_proxy",
"//base/startup/init_lite/services/loopevent:loopevent",
"//base/startup/init_lite/services/param/watcher:param_watcheragent",
"//base/startup/syspara_lite/interfaces/innerkits/native/syspara:syspara",
]
defines += [
"OHOS_SERVICE_DUMP",
...
...
@@ -62,6 +63,15 @@ ohos_executable("begetctl") {
]
}
if (build_selinux) {
include_dirs += [
"//third_party/selinux/libselinux/include/",
"//base/security/selinux/interfaces/policycoreutils/include/",
]
deps += [ "//third_party/selinux:libselinux" ]
defines += [ "WITH_SELINUX" ]
}
symlink_target_name = [
"misc_daemon",
"reboot",
...
...
@@ -113,6 +123,7 @@ ohos_executable("paramshell") {
"//base/startup/init_lite/interfaces/innerkits:libbeget_proxy",
"//base/startup/init_lite/services/loopevent:loopevent",
"//base/startup/init_lite/services/param/watcher:param_watcheragent",
"//base/startup/syspara_lite/interfaces/innerkits/native/syspara:syspara",
]
defines += [
"OHOS_SERVICE_DUMP",
...
...
services/begetctl/param_cmd.c
浏览文件 @
82a23350
...
...
@@ -28,6 +28,10 @@
#include "param_utils.h"
#include "shell_utils.h"
#include "sys_param.h"
#ifdef WITH_SELINUX
#include <policycoreutils.h>
#include <selinux/selinux.h>
#endif // WITH_SELINUX
#define MASK_LENGTH_MAX 4
pid_t
g_shellPid
=
0
;
...
...
@@ -389,6 +393,9 @@ static int32_t BShellParamCmdShell(BShellHandle shell, int32_t argc, char *argv[
if
(
pid
==
0
)
{
setuid
(
2000
);
// 2000 shell group
setgid
(
2000
);
// 2000 shell group
#ifdef WITH_SELINUX
setcon
(
"u:r:normal_hap_domain:s0"
);
#endif
if
(
argc
>=
2
)
{
// 2 min argc
char
*
args
[]
=
{
SHELL_NAME
,
argv
[
1
],
NULL
};
ret
=
execv
(
CMD_PATH
,
args
);
...
...
services/loopevent/include/loop_event.h
浏览文件 @
82a23350
...
...
@@ -124,6 +124,7 @@ LE_STATUS LE_AcceptStreamClient(const LoopHandle loopHandle,
LE_STATUS
LE_Send
(
const
LoopHandle
loopHandle
,
const
TaskHandle
taskHandle
,
const
BufferHandle
handle
,
uint32_t
buffLen
);
void
LE_CloseStreamTask
(
const
LoopHandle
loopHandle
,
const
TaskHandle
taskHandle
);
int
LE_GetSocketFd
(
const
TaskHandle
taskHandle
);
/**
* 异步事件服务
...
...
services/loopevent/task/le_streamtask.c
浏览文件 @
82a23350
...
...
@@ -244,4 +244,10 @@ void LE_CloseStreamTask(const LoopHandle loopHandle, const TaskHandle taskHandle
{
LE_CHECK
(
loopHandle
!=
NULL
&&
taskHandle
!=
NULL
,
return
,
"Invalid parameters"
);
LE_CloseTask
(
loopHandle
,
taskHandle
);
}
int
LE_GetSocketFd
(
const
TaskHandle
taskHandle
)
{
LE_CHECK
(
taskHandle
!=
NULL
,
return
-
1
,
"Invalid parameters"
);
return
GetSocketFd
(
taskHandle
);
}
\ No newline at end of file
services/param/BUILD.gn
浏览文件 @
82a23350
...
...
@@ -41,11 +41,15 @@ ohos_static_library("param_service") {
"//base/startup/init_lite/services/log",
"//base/startup/init_lite/interfaces/innerkits/include",
"//base/startup/init_lite/services/loopevent/include",
"//base/security/selinux/interfaces/policycoreutils/include",
"//third_party/libuv/include",
"//third_party/cJSON",
]
defines = [ "PARAM_SUPPORT_SAVE_PERSIST" ]
if (build_selinux) {
defines += [ "WITH_SELINUX" ]
}
if (defined(boot_kernel_extended_cmdline)) {
defines += [ "BOOT_EXTENDED_CMDLINE=\"${boot_kernel_extended_cmdline}\"" ]
...
...
@@ -90,13 +94,17 @@ ohos_shared_library("param_client") {
"//base/startup/init_lite/services/log",
"//base/startup/init_lite/interfaces/innerkits/include",
"//base/hiviewdfx/hilog/interfaces/native/innerkits/include",
"//base/security/selinux/interfaces/policycoreutils/include",
"//base/startup/init_lite/services/loopevent/include",
]
defines = [ "INIT_AGENT" ]
defines += [ "_GNU_SOURCE" ]
if (build_selinux) {
defines += [ "WITH_SELINUX" ]
}
if (param_security == "selinux") {
sources += [ "adapter/param_selinux.c" ]
defines += [ "PARAM_SUPPORT_SELINUX" ]
...
...
services/param/adapter/param_dac.c
浏览文件 @
82a23350
...
...
@@ -85,6 +85,9 @@ static int InitLocalSecurityLabel(ParamSecurityLabel **security, int isInit)
*
security
=
&
g_localSecurityLabel
;
// support check write permission in client
(
*
security
)
->
flags
|=
LABEL_CHECK_FOR_ALL_PROCESS
;
#ifdef WITH_SELINUX
(
*
security
)
->
flags
=
0
;
#endif
return
0
;
}
...
...
services/param/manager/param_manager.c
浏览文件 @
82a23350
...
...
@@ -16,6 +16,10 @@
#include "param_manager.h"
#include <ctype.h>
#include <dlfcn.h>
#ifdef WITH_SELINUX
#include "selinux_parameter.h"
#endif
#if !defined PARAM_SUPPORT_SELINUX && !defined PARAM_SUPPORT_DAC
static
ParamSecurityLabel
g_defaultSecurityLabel
;
...
...
@@ -231,6 +235,45 @@ int TraversalParam(const ParamWorkSpace *workSpace,
return
TraversalTrieNode
(
&
workSpace
->
paramSpace
,
root
,
ProcessParamTraversal
,
&
context
);
}
#ifdef WITH_SELINUX
static
void
*
g_selinuxHandle
=
NULL
;
static
int
CheckParamPermissionWithSelinux
(
const
ParamSecurityLabel
*
srcLabel
,
const
char
*
name
,
uint32_t
mode
)
{
static
void
(
*
setSelinuxLogCallback
)();
static
int
(
*
setParamCheck
)(
const
char
*
paraName
,
struct
ucred
*
uc
);
g_selinuxHandle
=
dlopen
(
"/system/lib/libparaperm_checker.z.so"
,
RTLD_LAZY
);
if
(
g_selinuxHandle
==
NULL
)
{
PARAM_LOGE
(
"Failed to dlopen libparaperm_checker.z.so, %s
\n
"
,
dlerror
());
return
DAC_RESULT_FORBIDED
;
}
if
(
setSelinuxLogCallback
==
NULL
)
{
setSelinuxLogCallback
=
(
void
(
*
)())
dlsym
(
g_selinuxHandle
,
"SetSelinuxLogCallback"
);
if
(
setSelinuxLogCallback
==
NULL
)
{
PARAM_LOGE
(
"Failed to dlsym setSelinuxLogCallback, %s
\n
"
,
dlerror
());
return
DAC_RESULT_FORBIDED
;
}
}
(
*
setSelinuxLogCallback
)();
if
(
setParamCheck
==
NULL
)
{
setParamCheck
=
(
int
(
*
)(
const
char
*
paraName
,
struct
ucred
*
uc
))
dlsym
(
g_selinuxHandle
,
"SetParamCheck"
);
if
(
setParamCheck
==
NULL
)
{
PARAM_LOGE
(
"Failed to dlsym setParamCheck, %s
\n
"
,
dlerror
());
return
DAC_RESULT_FORBIDED
;
}
}
struct
ucred
uc
;
uc
.
pid
=
srcLabel
->
cred
.
pid
;
uc
.
uid
=
srcLabel
->
cred
.
uid
;
uc
.
gid
=
srcLabel
->
cred
.
gid
;
int
ret
=
setParamCheck
(
name
,
&
uc
);
if
(
ret
!=
0
)
{
PARAM_LOGI
(
"Selinux check name %s pid %d uid %d %d result %d"
,
name
,
uc
.
pid
,
uc
.
uid
,
uc
.
gid
,
ret
);
}
return
ret
;
}
#endif
int
CheckParamPermission
(
const
ParamWorkSpace
*
workSpace
,
const
ParamSecurityLabel
*
srcLabel
,
const
char
*
name
,
uint32_t
mode
)
{
...
...
@@ -240,6 +283,14 @@ int CheckParamPermission(const ParamWorkSpace *workSpace,
return
0
;
}
PARAM_CHECK
(
name
!=
NULL
&&
srcLabel
!=
NULL
,
return
-
1
,
"Invalid param"
);
#ifdef WITH_SELINUX
if
(
mode
==
DAC_WRITE
)
{
int
ret
=
CheckParamPermissionWithSelinux
(
srcLabel
,
name
,
mode
);
if
(
ret
==
DAC_RESULT_PERMISSION
)
{
return
DAC_RESULT_PERMISSION
;
}
}
#endif
if
(
workSpace
->
paramSecurityOps
.
securityCheckParamPermission
==
NULL
)
{
return
DAC_RESULT_FORBIDED
;
}
...
...
services/param/manager/param_message.c
浏览文件 @
82a23350
...
...
@@ -25,10 +25,12 @@
int
ConntectServer
(
int
fd
,
const
char
*
servername
)
{
PARAM_CHECK
(
fd
>=
0
,
return
-
1
,
"Invalid fd %d"
,
fd
);
int
opt
=
1
;
int
ret
=
setsockopt
(
fd
,
SOL_SOCKET
,
SO_PASSCRED
,
&
opt
,
sizeof
(
opt
));
PARAM_CHECK
(
servername
!=
NULL
,
return
-
1
,
"Invalid servername"
);
struct
sockaddr_un
addr
;
/* fill socket address structure with server's address */
int
ret
=
memset_s
(
&
addr
,
sizeof
(
addr
),
0
,
sizeof
(
addr
));
ret
=
memset_s
(
&
addr
,
sizeof
(
addr
),
0
,
sizeof
(
addr
));
PARAM_CHECK
(
ret
==
0
,
return
-
1
,
"Failed to memset server address"
);
addr
.
sun_family
=
AF_UNIX
;
ret
=
sprintf_s
(
addr
.
sun_path
,
sizeof
(
addr
.
sun_path
)
-
1
,
"%s"
,
servername
);
...
...
services/param/service/param_service.c
浏览文件 @
82a23350
...
...
@@ -24,9 +24,12 @@
#include <sys/msg.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include "init_param.h"
#include "init_utils.h"
#include "loop_event.h"
#include "param_message.h"
#include "param_manager.h"
#include "param_request.h"
...
...
@@ -339,7 +342,17 @@ static int HandleParamSet(const ParamTaskPtr worker, const ParamMessage *msg)
PARAM_CHECK
(
ret
==
0
,
return
ret
,
"Failed to decode param %d name %s %s"
,
ret
,
msg
->
key
,
valueContent
->
content
);
}
if
(
srcLabel
!=
NULL
)
{
struct
ucred
cr
=
{
-
1
,
-
1
,
-
1
};
socklen_t
crSize
=
sizeof
(
cr
);
if
(
getsockopt
(
LE_GetSocketFd
(
worker
),
SOL_SOCKET
,
SO_PEERCRED
,
&
cr
,
&
crSize
)
<
0
)
{
PARAM_LOGE
(
"Failed to get opt %d"
,
errno
);
return
SendResponseMsg
(
worker
,
msg
,
-
1
);
}
srcLabel
->
cred
.
uid
=
cr
.
uid
;
srcLabel
->
cred
.
pid
=
cr
.
pid
;
srcLabel
->
cred
.
gid
=
cr
.
gid
;
}
ret
=
SystemSetParam
(
msg
->
key
,
valueContent
->
content
,
srcLabel
);
if
(
srcLabel
!=
NULL
&&
g_paramWorkSpace
.
paramSecurityOps
.
securityFreeLabel
!=
NULL
)
{
g_paramWorkSpace
.
paramSecurityOps
.
securityFreeLabel
(
srcLabel
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录