Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert additional whitelist flag #1009

Merged
merged 2 commits into from
Jan 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ _If you are interested in contributing to kaniko, see [DEVELOPMENT.md](DEVELOPME
- [--single-snapshot](#--single-snapshot)
- [--skip-tls-verify](#--skip-tls-verify)
- [--skip-tls-verify-pull](#--skip-tls-verify-pull)
- [--additional-whitelist](#--additional-whitelist)
- [--snapshotMode](#--snapshotmode)
- [--target](#--target)
- [--tarPath](#--tarpath)
Expand Down Expand Up @@ -494,9 +493,6 @@ Set this flag to skip TLS certificate validation when pushing to a registry. It

Set this flag to skip TLS certificate validation when pulling from a registry. It is supposed to be used for testing purposes only and should not be used in production!

#### --additional-whitelist
Set this flag with a list of filepaths and Kaniko will ignore these paths during the build. Useful for improving build performance on large filesystems.

#### --snapshotMode

You can set the `--snapshotMode=<full (default), time>` flag to set how kaniko will snapshot the filesystem.
Expand Down
15 changes: 3 additions & 12 deletions cmd/executor/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,9 @@ import (
)

var (
opts = &config.KanikoOptions{}
logLevel string
force bool
additionalWhitelist []string
opts = &config.KanikoOptions{}
logLevel string
force bool
)

func init() {
Expand Down Expand Up @@ -74,10 +73,6 @@ var RootCmd = &cobra.Command{
if len(opts.Destinations) == 0 && opts.ImageNameDigestFile != "" {
return errors.New("You must provide --destination if setting ImageNameDigestFile")
}

for _, path := range additionalWhitelist {
util.AddToWhitelist(path)
}
}
return nil
},
Expand Down Expand Up @@ -149,10 +144,6 @@ func addKanikoOptionsFlags() {
RootCmd.PersistentFlags().DurationVarP(&opts.CacheTTL, "cache-ttl", "", time.Hour*336, "Cache timeout in hours. Defaults to two weeks.")
RootCmd.PersistentFlags().VarP(&opts.InsecureRegistries, "insecure-registry", "", "Insecure registry using plain HTTP to push and pull. Set it repeatedly for multiple registries.")
RootCmd.PersistentFlags().VarP(&opts.SkipTLSVerifyRegistries, "skip-tls-verify-registry", "", "Insecure registry ignoring TLS verify to push and pull. Set it repeatedly for multiple registries.")

// We use nil as the default value so we can differentiate between the flag passed
// with an empty list and the flag not set
RootCmd.PersistentFlags().StringSliceVar(&additionalWhitelist, "additional-whitelist", []string{}, "Paths to whitelist. These will be ignored by kaniko to improve performance.")
}

// addHiddenFlags marks certain flags as hidden from the executor help text
Expand Down
11 changes: 7 additions & 4 deletions pkg/util/fs_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ var initialWhitelist = []WhitelistEntry{
Path: "/kaniko",
PrefixMatchOnly: false,
},
{
// /var/run is a special case. It's common to mount in /var/run/docker.sock or something similar
// which leads to a special mount on the /var/run/docker.sock file itself, but the directory to exist
// in the image with no way to tell if it came from the base image or not.
Path: "/var/run",
PrefixMatchOnly: false,
},
{
// similarly, we whitelist /etc/mtab, since there is no way to know if the file was mounted or came
// from the base image
Expand All @@ -64,10 +71,6 @@ var volumes = []string{}

var excluded []string

func AddToWhitelist(path string) {
initialWhitelist = append(initialWhitelist, WhitelistEntry{Path: path})
}

type ExtractFunction func(string, *tar.Header, io.Reader) error

type FSConfig struct {
Expand Down
107 changes: 27 additions & 80 deletions pkg/util/fs_util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,96 +38,43 @@ import (
)

func Test_DetectFilesystemWhitelist(t *testing.T) {
type testcase struct {
desc string
additionalWhitelist []string
expectedWhitelist []WhitelistEntry
testDir, err := ioutil.TempDir("", "")
if err != nil {
t.Fatalf("Error creating tempdir: %s", err)
}
fileContents := `
228 122 0:90 / / rw,relatime - aufs none rw,si=f8e2406af90782bc,dio,dirperm1
229 228 0:98 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw
230 228 0:99 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755
231 230 0:100 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666
232 228 0:101 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro`

path := filepath.Join(testDir, "mountinfo")
if err := os.MkdirAll(filepath.Dir(path), 0750); err != nil {
t.Fatalf("Error creating tempdir: %s", err)
}
if err := ioutil.WriteFile(path, []byte(fileContents), 0644); err != nil {
t.Fatalf("Error writing file contents to %s: %s", path, err)
}

err = DetectFilesystemWhitelist(path)
expectedWhitelist := []WhitelistEntry{
{"/kaniko", false},
{"/proc", false},
{"/dev", false},
{"/dev/pts", false},
{"/sys", false},
{"/var/run", false},
{"/etc/mtab", false},
}

testCases := []testcase{
{
desc: "no additional whitelist",
expectedWhitelist: expectedWhitelist,
},
{
desc: "one additional whitelist - /var/run",
additionalWhitelist: []string{"/var/run"},
expectedWhitelist: append(expectedWhitelist, WhitelistEntry{"/var/run", false}),
},
{
desc: "two additional whitelist - /var/run, /usr/bin",
additionalWhitelist: []string{"/var/run", "/usr/bin"},
expectedWhitelist: append(
expectedWhitelist,
WhitelistEntry{"/var/run", false},
WhitelistEntry{"/usr/bin", false},
),
},
}

for _, tc := range testCases {
t.Run(tc.desc, func(t *testing.T) {
expectedWhitelist := tc.expectedWhitelist
additionalWhitelist := tc.additionalWhitelist

tmpWhitelist := make([]WhitelistEntry, len(initialWhitelist))
copy(tmpWhitelist, initialWhitelist)

testDir, err := ioutil.TempDir("", "")
if err != nil {
t.Fatalf("Error creating tempdir: %s", err)
}
fileContents := `
228 122 0:90 / / rw,relatime - aufs none rw,si=f8e2406af90782bc,dio,dirperm1
229 228 0:98 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw
230 228 0:99 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755
231 230 0:100 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666
232 228 0:101 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro`

path := filepath.Join(testDir, "mountinfo")
if err := os.MkdirAll(filepath.Dir(path), 0750); err != nil {
t.Fatalf("Error creating tempdir: %s", err)
}
if err := ioutil.WriteFile(path, []byte(fileContents), 0644); err != nil {
t.Fatalf("Error writing file contents to %s: %s", path, err)
}

for _, wl := range additionalWhitelist {
AddToWhitelist(wl)
}

err = DetectFilesystemWhitelist(path)
actualWhitelist := whitelist

if len(actualWhitelist) != len(expectedWhitelist) {
t.Errorf(
"expected whitelist to have %d items but was %d",
len(expectedWhitelist),
len(actualWhitelist),
)
}

sort.Slice(actualWhitelist, func(i, j int) bool {
return actualWhitelist[i].Path < actualWhitelist[j].Path
})
sort.Slice(expectedWhitelist, func(i, j int) bool {
return expectedWhitelist[i].Path < expectedWhitelist[j].Path
})

testutil.CheckErrorAndDeepEqual(t, false, err, expectedWhitelist, actualWhitelist)

initialWhitelist = tmpWhitelist
})
}
actualWhitelist := whitelist
sort.Slice(actualWhitelist, func(i, j int) bool {
return actualWhitelist[i].Path < actualWhitelist[j].Path
})
sort.Slice(expectedWhitelist, func(i, j int) bool {
return expectedWhitelist[i].Path < expectedWhitelist[j].Path
})
testutil.CheckErrorAndDeepEqual(t, false, err, expectedWhitelist, actualWhitelist)
}

var tests = []struct {
Expand Down