Skip to content

Commit 9f6de4d

Browse files
author
Zhou Hao
committed
generate: add process-cap-drop option
Add process-cap-drop option to drop Linux capabilities to all 5 capability sets. ``` oci-runtime-tool generate --process-cap-drop CAP_FOWNER,CAP_FSETID ``` Signed-off-by: Zhou Hao <[email protected]>
1 parent 192a8eb commit 9f6de4d

File tree

4 files changed

+53
-0
lines changed

4 files changed

+53
-0
lines changed

cmd/oci-runtime-tool/generate.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ var generateFlags = []cli.Flag{
100100
cli.StringFlag{Name: "process-cap-add-effective", Usage: "add Linux effective capabilities"},
101101
cli.StringFlag{Name: "process-cap-add-inheritable", Usage: "add Linux inheritable capabilities"},
102102
cli.StringFlag{Name: "process-cap-add-permitted", Usage: "add Linux permitted capabilities"},
103+
cli.StringFlag{Name: "process-cap-drop", Usage: "drop Linux capabilities to all 5 capability sets"},
103104
cli.BoolFlag{Name: "process-cap-drop-all", Usage: "drop all Linux capabilities"},
104105
cli.StringFlag{Name: "process-cap-drop-ambient", Usage: "drop Linux ambient capabilities"},
105106
cli.StringFlag{Name: "process-cap-drop-bounding", Usage: "drop Linux bounding capabilities"},
@@ -400,6 +401,16 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
400401
}
401402
}
402403

404+
if context.IsSet("process-cap-drop") {
405+
addCaps := context.String("process-cap-drop")
406+
parts := strings.Split(addCaps, ",")
407+
for _, part := range parts {
408+
if err := g.DropProcessCapability(part); err != nil {
409+
return err
410+
}
411+
}
412+
}
413+
403414
if context.IsSet("process-cap-drop-ambient") {
404415
dropCaps := context.String("process-cap-drop-ambient")
405416
parts := strings.Split(dropCaps, ",")

completions/bash/oci-runtime-tool

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,7 @@ _oci-runtime-tool_generate() {
377377
--process-cap-add-effective
378378
--process-cap-add-inheritable
379379
--process-cap-add-permitted
380+
--process-cap-drop
380381
--process-cap-drop-ambient
381382
--process-cap-drop-bounding
382383
--process-cap-drop-effective

generate/generate.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,6 +1253,42 @@ func (g *Generator) AddProcessCapabilityPermitted(c string) error {
12531253
return nil
12541254
}
12551255

1256+
// DropProcessCapability drops a process capability from all 5 capability sets.
1257+
func (g *Generator) DropProcessCapability(c string) error {
1258+
if g.Config == nil || g.Config.Process == nil || g.Config.Process.Capabilities == nil {
1259+
return nil
1260+
}
1261+
1262+
cp := strings.ToUpper(c)
1263+
for i, cap := range g.Config.Process.Capabilities.Ambient {
1264+
if strings.ToUpper(cap) == cp {
1265+
g.Config.Process.Capabilities.Ambient = removeFunc(g.Config.Process.Capabilities.Ambient, i)
1266+
}
1267+
}
1268+
for i, cap := range g.Config.Process.Capabilities.Bounding {
1269+
if strings.ToUpper(cap) == cp {
1270+
g.Config.Process.Capabilities.Bounding = removeFunc(g.Config.Process.Capabilities.Bounding, i)
1271+
}
1272+
}
1273+
for i, cap := range g.Config.Process.Capabilities.Effective {
1274+
if strings.ToUpper(cap) == cp {
1275+
g.Config.Process.Capabilities.Effective = removeFunc(g.Config.Process.Capabilities.Effective, i)
1276+
}
1277+
}
1278+
for i, cap := range g.Config.Process.Capabilities.Inheritable {
1279+
if strings.ToUpper(cap) == cp {
1280+
g.Config.Process.Capabilities.Inheritable = removeFunc(g.Config.Process.Capabilities.Inheritable, i)
1281+
}
1282+
}
1283+
for i, cap := range g.Config.Process.Capabilities.Permitted {
1284+
if strings.ToUpper(cap) == cp {
1285+
g.Config.Process.Capabilities.Permitted = removeFunc(g.Config.Process.Capabilities.Permitted, i)
1286+
}
1287+
}
1288+
1289+
return validate.CapValid(cp, false)
1290+
}
1291+
12561292
// DropProcessCapabilityAmbient drops a process capability from g.Config.Process.Capabilities.Ambient.
12571293
func (g *Generator) DropProcessCapabilityAmbient(c string) error {
12581294
if g.Config == nil || g.Config.Process == nil || g.Config.Process.Capabilities == nil {

man/oci-runtime-tool-generate.1.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,11 @@ read the configuration from `config.json`.
402402
You can use this command to add multiple capabilities. Each value should be used ',' separated.
403403
e.g. --process-cap-add-permitted CAP_FOWNER,CAP_FSETID
404404

405+
**--process-cap-drop**=[]
406+
Drop Linux capabilities to all 5 capability sets.
407+
You can use this command to drop multiple capabilities. Each value should be used ',' separated.
408+
e.g. --process-cap-drop CAP_FOWNER,CAP_FSETID
409+
405410
**--process-cap-drop-all**=true|false
406411
Drop all Linux capabilities
407412
This option conflicts with other cap options, as --process-cap-*.

0 commit comments

Comments
 (0)