mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	apparmor: allow receiving of signals from 'docker kill'
In newer kernels, AppArmor will reject attempts to send signals to a container because the signal originated from outside of that AppArmor profile. Correct this by allowing all unconfined signals to be received. Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Signed-off-by: Aleksa Sarai <asarai@suse.de>
This commit is contained in:
		
							parent
							
								
									9c2c887b12
								
							
						
					
					
						commit
						4822fb1e24
					
				
					 2 changed files with 27 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -23,6 +23,8 @@ var (
 | 
			
		|||
type profileData struct {
 | 
			
		||||
	// Name is profile name.
 | 
			
		||||
	Name string
 | 
			
		||||
	// DaemonProfile is the profile name of our daemon.
 | 
			
		||||
	DaemonProfile string
 | 
			
		||||
	// Imports defines the apparmor functions to import, before defining the profile.
 | 
			
		||||
	Imports []string
 | 
			
		||||
	// InnerImports defines the apparmor functions to import in the profile.
 | 
			
		||||
| 
						 | 
				
			
			@ -70,6 +72,25 @@ func InstallDefault(name string) error {
 | 
			
		|||
		Name: name,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Figure out the daemon profile.
 | 
			
		||||
	currentProfile, err := ioutil.ReadFile("/proc/self/attr/current")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		// If we couldn't get the daemon profile, assume we are running
 | 
			
		||||
		// unconfined which is generally the default.
 | 
			
		||||
		currentProfile = nil
 | 
			
		||||
	}
 | 
			
		||||
	daemonProfile := string(currentProfile)
 | 
			
		||||
	// Normally profiles are suffixed by " (enforcing)" or similar. AppArmor
 | 
			
		||||
	// profiles cannot contain spaces so this doesn't restrict daemon profile
 | 
			
		||||
	// names.
 | 
			
		||||
	if parts := strings.SplitN(daemonProfile, " ", 2); len(parts) >= 1 {
 | 
			
		||||
		daemonProfile = parts[0]
 | 
			
		||||
	}
 | 
			
		||||
	if daemonProfile == "" {
 | 
			
		||||
		daemonProfile = "unconfined"
 | 
			
		||||
	}
 | 
			
		||||
	p.DaemonProfile = daemonProfile
 | 
			
		||||
 | 
			
		||||
	// Install to a temporary directory.
 | 
			
		||||
	f, err := ioutil.TempFile("", name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,12 @@ profile {{.Name}} flags=(attach_disconnected,mediate_deleted) {
 | 
			
		|||
  capability,
 | 
			
		||||
  file,
 | 
			
		||||
  umount,
 | 
			
		||||
{{if ge .Version 208096}}
 | 
			
		||||
{{/* Allow 'docker kill' to actually send signals to container processes. */}}
 | 
			
		||||
  signal (receive) peer={{.DaemonProfile}},
 | 
			
		||||
{{/* Allow container processes to send signals amongst themselves. */}}
 | 
			
		||||
  signal (send,receive) peer={{.Name}},
 | 
			
		||||
{{end}}
 | 
			
		||||
 | 
			
		||||
  deny @{PROC}/* w,   # deny write for all files directly in /proc (not in a subdir)
 | 
			
		||||
  # deny write to files not in /proc/<number>/** or /proc/sys/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue