mirror of https://github.com/shunfei/cronsun
node: 增加 job 安全性检查
parent
aedb0f6d10
commit
2718dd22e0
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"Open": true,
|
"Open": false,
|
||||||
"Users": [
|
"Users": [
|
||||||
"www", "db"
|
"www", "db"
|
||||||
],
|
],
|
||||||
"Ext": [
|
"Ext": [
|
||||||
"sh", "py"
|
".sh", ".py"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -13,4 +13,6 @@ var (
|
||||||
|
|
||||||
ErrEmptyNodeGroupName = errors.New("Name of node group is empty.")
|
ErrEmptyNodeGroupName = errors.New("Name of node group is empty.")
|
||||||
ErrIllegalNodeGroupId = errors.New("Invalid node group id that includes illegal characters such as '/'.")
|
ErrIllegalNodeGroupId = errors.New("Invalid node group id that includes illegal characters such as '/'.")
|
||||||
|
|
||||||
|
InvalidJobErr = errors.New("invalid job")
|
||||||
)
|
)
|
||||||
|
|
|
@ -120,7 +120,11 @@ func GetJobs() (jobs map[string]*Job, err error) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
job.splitCmd()
|
if !job.Valid() {
|
||||||
|
log.Warnf("job[%s] is invalid", string(j.Key))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
jobs[job.ID] = job
|
jobs[job.ID] = job
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
@ -137,7 +141,9 @@ func GetJobFromKv(kv *mvccpb.KeyValue) (job *Job, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
job.splitCmd()
|
if !job.Valid() {
|
||||||
|
err = InvalidJobErr
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,3 +288,43 @@ func (j *Job) Cmds(nid string, gs map[string]*Group) (cmds map[string]*Cmd) {
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 安全选项验证
|
||||||
|
func (j *Job) Valid() bool {
|
||||||
|
if len(j.cmd) == 0 {
|
||||||
|
j.splitCmd()
|
||||||
|
}
|
||||||
|
|
||||||
|
security := conf.Config.Security
|
||||||
|
if !security.Open {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return j.validUser() && j.validCmd()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *Job) validUser() bool {
|
||||||
|
if len(conf.Config.Security.Users) == 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, u := range conf.Config.Security.Users {
|
||||||
|
if j.User == u {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *Job) validCmd() bool {
|
||||||
|
if len(conf.Config.Security.Ext) == 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, ext := range conf.Config.Security.Ext {
|
||||||
|
if strings.HasSuffix(j.cmd[0], ext) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -335,7 +335,7 @@ func (n *Node) watchJobs() {
|
||||||
case ev.IsCreate():
|
case ev.IsCreate():
|
||||||
job, err := models.GetJobFromKv(ev.Kv)
|
job, err := models.GetJobFromKv(ev.Kv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf(err.Error())
|
log.Warnf("err: %s, kv: %s", err.Error(), ev.Kv.String())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,7 +344,7 @@ func (n *Node) watchJobs() {
|
||||||
case ev.IsModify():
|
case ev.IsModify():
|
||||||
job, err := models.GetJobFromKv(ev.Kv)
|
job, err := models.GetJobFromKv(ev.Kv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf(err.Error())
|
log.Warnf("err: %s, kv: %s", err.Error(), ev.Kv.String())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -367,7 +367,7 @@ func (n *Node) watchGroups() {
|
||||||
case ev.IsCreate():
|
case ev.IsCreate():
|
||||||
g, err := models.GetGroupFromKv(ev.Kv)
|
g, err := models.GetGroupFromKv(ev.Kv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf(err.Error())
|
log.Warnf("err: %s, kv: %s", err.Error(), ev.Kv.String())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -375,7 +375,7 @@ func (n *Node) watchGroups() {
|
||||||
case ev.IsModify():
|
case ev.IsModify():
|
||||||
g, err := models.GetGroupFromKv(ev.Kv)
|
g, err := models.GetGroupFromKv(ev.Kv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf(err.Error())
|
log.Warnf("err: %s, kv: %s", err.Error(), ev.Kv.String())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue