Re: [PATCH] policycoreutils: setfiles - Add option to stop setting the digest

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2016-09-30 at 10:53 -0400, Stephen Smalley wrote:
> On 09/30/2016 10:44 AM, Stephen Smalley wrote:
> > 
> > On 09/25/2016 10:49 AM, Richard Haines wrote:
> > > 
> > > Add -D option to setfiles and restorecon - Do not set or update
> > > directory SHA1 digests when relabeling files. This will allow
> > > users the option of not using the "security.restorecon_last"
> > > extended attribute feature.
> > > 
> > > Also review and update the man pages.
> > 
> > I think we need to flip the default here.  Rationale:
> > 1) Users often use restorecon to fix labels on files whose labels
> > are
> > wrong even through nothing has changed in file_contexts, e.g. after
> > copying/moving files to a different location.  They won't expect
> > restorecon to suddenly stop relabeling by default because the hash
> > of
> > file_contexts hasn't changed.
> > 
> > 2) Only processes running with CAP_SYS_ADMIN can set
> > security.restorecon_last, so this will fail for non-root users
> > anyway.
> > 
> > Any objection?

None - will you do the patch or shall I (would send sometime over
weekend)
> 
> I guess (2) means that (1) won't be a problem for non-root users,
> since
> the attribute won't ever be set. But typical instructions for fixing
> labels on files copied manually to /var/www are restorecon -R
> /var/www,
> and now we'll get this:
> # restorecon -R /var/www
> # restorecon -R /var/www
> Skipping restorecon as matching digest on: /var/www
> 
> With no hint to the user on how to force it to happen.
> 
> > 
> > 
> > > 
> > > 
> > > Signed-off-by: Richard Haines <richard_c_haines@xxxxxxxxxxxxxx>
> > > ---
> > >  policycoreutils/setfiles/restorecon.8 |  76 ++++++++++++++++--
> > > ---
> > >  policycoreutils/setfiles/setfiles.8   | 122
> > > +++++++++++++++++++++++++---------
> > >  policycoreutils/setfiles/setfiles.c   |  26 +++++---
> > >  3 files changed, 167 insertions(+), 57 deletions(-)
> > > 
> > > diff --git a/policycoreutils/setfiles/restorecon.8
> > > b/policycoreutils/setfiles/restorecon.8
> > > index 4851f0f..f996467 100644
> > > --- a/policycoreutils/setfiles/restorecon.8
> > > +++ b/policycoreutils/setfiles/restorecon.8
> > > @@ -4,10 +4,33 @@ restorecon \- restore file(s) default SELinux
> > > security contexts.
> > >  
> > >  .SH "SYNOPSIS"
> > >  .B restorecon
> > > -.I [\-R] [\-m] [\-n] [\-p] [\-v] [\-I] [\-e directory]
> > > pathname...
> > > +.RB [ \-r | \-R ]
> > > +.RB [ \-m ]
> > > +.RB [ \-n ]
> > > +.RB [ \-p ]
> > > +.RB [ \-v ]
> > > +.RB [ \-i ]
> > > +.RB [ \-F ]
> > > +.RB [ \-W ]
> > > +.RB [ \-I | \-D ]
> > > +.RB [ \-e
> > > +.IR directory ]
> > > +.IR pathname \ ...
> > >  .P
> > >  .B restorecon
> > > -.I \-f infilename [\-e directory] [\-R] [\-m] [\-n] [\-p] [\-v]
> > > [\-F] [\-I]
> > > +.RB [ \-f
> > > +.IR infilename ]
> > > +.RB [ \-e
> > > +.IR directory ]
> > > +.RB [ \-r | \-R ]
> > > +.RB [ \-m ]
> > > +.RB [ \-n ]
> > > +.RB [ \-p ]
> > > +.RB [ \-v ]
> > > +.RB [ \-i ]
> > > +.RB [ \-F ]
> > > +.RB [ \-W ]
> > > +.RB [ \-I | \-D ]
> > >  
> > >  .SH "DESCRIPTION"
> > >  This manual page describes the
> > > @@ -18,14 +41,22 @@ This program is primarily used to set the
> > > security context
> > >  (extended attributes) on one or more files.
> > >  .P
> > >  It can also be run at any other time to correct inconsistent
> > > labels, to add
> > > -support for newly-installed policy or, by using the \-n option,
> > > to passively
> > > +support for newly-installed policy or, by using the
> > > +.B \-n
> > > +option, to passively
> > >  check whether the file contexts are all set as specified by the
> > > active policy
> > >  (default behavior).
> > >  .P
> > > -If a file object does not have a context, restorecon will write
> > > the default
> > > +If a file object does not have a context,
> > > +.B restorecon
> > > +will write the default
> > >  context to the file object's extended attributes. If a file
> > > object has a
> > > -context, restorecon will only modify the type portion of the
> > > security context.
> > > -The \-F option will force a replacement of the entire context.
> > > +context,
> > > +.B restorecon
> > > +will only modify the type portion of the security context.
> > > +The
> > > +.B \-F
> > > +option will force a replacement of the entire context.
> > >  .P
> > >  It is the same executable as
> > >  .BR setfiles
> > > @@ -33,11 +64,15 @@ but operates in a slightly different manner
> > > depending on its argv[0].
> > >  
> > >  .SH "OPTIONS"
> > >  .TP
> > > -.B \-e directory
> > > +.BI \-e \ directory
> > >  exclude a directory (repeat the option to exclude more than one
> > > directory, Requires full path).
> > >  .TP
> > > -.B \-f infilename
> > > -infilename contains a list of files to be processed. Use \- for
> > > stdin.
> > > +.BI \-f \ infilename
> > > +.I infilename
> > > +contains a list of files to be processed. Use
> > > +.RB \*(lq \- \*(rq
> > > +for
> > > +.BR stdin .
> > >  .TP
> > >  .B \-F
> > >  Force reset of context to match file_context for customizable
> > > files, and the
> > > @@ -56,6 +91,14 @@ there are no errors. See the
> > >  .B NOTES
> > >  section for further details.
> > >  .TP
> > > +.B \-D
> > > +do not set or update any directory SHA1 digests. Use this option
> > > to
> > > +effectively disable usage of the
> > > +.IR security.restorecon_last
> > > +extended attribute. Note that using this option will override
> > > the
> > > +.B \-I
> > > +option.
> > > +.TP
> > >  .B \-m
> > >  do not read
> > >  .B /proc/mounts
> > > @@ -64,9 +107,10 @@ Setting this option is useful where there is
> > > a non-seclabel fs mounted with a
> > >  seclabel fs mounted on a directory below this.
> > >  .TP
> > >  .B \-n
> > > -don't change any file labels (passive check).  To display the
> > > files whose labels would be changed, add \-v.
> > > +don't change any file labels (passive check).  To display the
> > > files whose labels would be changed, add
> > > +.BR \-v .
> > >  .TP
> > > -.B \-o outfilename
> > > +.BI \-o \ outfilename
> > >  Deprecated, SELinux policy will probably block this access.  Use
> > > shell redirection to save list of files with incorrect context in
> > > filename.
> > >  .TP
> > >  .B \-p
> > > @@ -106,7 +150,7 @@ option of GNU
> > >  produces input suitable for this mode.
> > >  .TP
> > >  .SH "ARGUMENTS"
> > > -.B pathname...
> > > +.IR pathname \ ...
> > >  The pathname for the file(s) to be relabeled.
> > >  .SH "NOTES"
> > >  .IP "1." 4
> > > @@ -115,7 +159,7 @@ does not follow symbolic links and by default
> > > it does not
> > >  operate recursively on directories.
> > >  .IP "2." 4
> > >  If the
> > > -.B pathname
> > > +.I pathname
> > >  specifies the root directory and the
> > >  .B \-vR
> > >  or
> > > @@ -135,12 +179,12 @@ will write an SHA1 digest of the default
> > > specfiles set to an extended
> > >  attribute named
> > >  .IR security.restorecon_last
> > >  to the directory specified in each
> > > -.B pathname...
> > > +.IR pathname \ ...
> > >  once the relabeling has been completed successfully. This digest
> > > will be
> > >  checked should
> > >  .B restorecon
> > >  be rerun with the same
> > > -.B pathname
> > > +.I pathname
> > >  parameters. See
> > >  .BR selinux_restorecon (3)
> > >  for further details.
> > > @@ -148,7 +192,7 @@ for further details.
> > >  The
> > >  .B \-I
> > >  option will ignore the SHA1 digest from each directory specified
> > > in
> > > -.B pathname...
> > > +.IR pathname \ ...
> > >  and provided the
> > >  .B \-n
> > >  option is NOT set and recursive mode is set, files will be
> > > relabeled as
> > > diff --git a/policycoreutils/setfiles/setfiles.8
> > > b/policycoreutils/setfiles/setfiles.8
> > > index 35e38b2..11bc335 100644
> > > --- a/policycoreutils/setfiles/setfiles.8
> > > +++ b/policycoreutils/setfiles/setfiles.8
> > > @@ -4,7 +4,23 @@ setfiles \- set SELinux file security contexts.
> > >  
> > >  .SH "SYNOPSIS"
> > >  .B setfiles
> > > -.I [\-c policy] [\-d] [\-l] [\-m] [\-n] [\-e directory] [\-o
> > > filename] [\-p] [\-q] [\-s] [\-v] [\-W] [\-F] [\-I] spec_file
> > > pathname...
> > > +.RB [ \-c
> > > +.IR policy ]
> > > +.RB [ \-d ]
> > > +.RB [ \-l ]
> > > +.RB [ \-m ]
> > > +.RB [ \-n ]
> > > +.RB [ \-e
> > > +.IR directory ]
> > > +.RB [ \-p ]
> > > +.RB [ \-s ]
> > > +.RB [ \-v ]
> > > +.RB [ \-W ]
> > > +.RB [ \-F ]
> > > +.RB [ \-I | \-D ]
> > > +.I spec_file
> > > +.IR pathname \ ...
> > > +
> > >  .SH "DESCRIPTION"
> > >  This manual page describes the
> > >  .BR setfiles
> > > @@ -16,14 +32,24 @@ them).  Usually it is initially run as part
> > > of the SELinux installation
> > >  process (a step commonly known as labeling).
> > >  .P
> > >  It can also be run at any other time to correct inconsistent
> > > labels, to add
> > > -support for newly-installed policy or, by using the \-n option,
> > > to passively
> > > +support for newly-installed policy or, by using the
> > > +.B \-n
> > > +option, to passively
> > >  check whether the file contexts are all set as specified by the
> > > active policy
> > > -(default behavior) or by some other policy (see the \-c option).
> > > +(default behavior) or by some other policy (see the
> > > +.B \-c
> > > +option).
> > >  .P
> > > -If a file object does not have a context, setfiles will write
> > > the default
> > > +If a file object does not have a context,
> > > +.B setfiles
> > > +will write the default
> > >  context to the file object's extended attributes. If a file
> > > object has a
> > > -context, setfiles will only modify the type portion of the
> > > security context.
> > > -The \-F option will force a replacement of the entire context.
> > > +context,
> > > +.B setfiles
> > > +will only modify the type portion of the security context.
> > > +The
> > > +.B \-F
> > > +option will force a replacement of the entire context.
> > >  .SH "OPTIONS"
> > >  .TP
> > >  .B \-c
> > > @@ -33,11 +59,15 @@ check the validity of the contexts against
> > > the specified binary policy.
> > >  show what specification matched each file (do not abort
> > > validation
> > >  after ABORT_ON_ERRORS errors).
> > >  .TP
> > > -.B \-e directory
> > > +.BI \-e \ directory
> > >  directory to exclude (repeat option for more than one
> > > directory).
> > >  .TP
> > > -.B \-f
> > > -take a list of files to be processed from an input file.
> > > +.BI \-f \ infilename
> > > +.I infilename
> > > +contains a list of files to be processed. Use
> > > +.RB \*(lq \- \*(rq
> > > +for
> > > +.BR stdin .
> > >  .TP
> > >  .B \-F
> > >  Force reset of context to match file_context for customizable
> > > files, and the
> > > @@ -57,6 +87,14 @@ there are no errors. See the
> > >  .B NOTES
> > >  section for further details.
> > >  .TP
> > > +.B \-D
> > > +do not set or update any directory SHA1 digests. Use this option
> > > to
> > > +effectively disable usage of the
> > > +.IR security.restorecon_last
> > > +extended attribute. Note that using this option will override
> > > the
> > > +.B \-I
> > > +option.
> > > +.TP
> > >  .B \-l
> > >  log changes in file labels to syslog.
> > >  .TP
> > > @@ -70,7 +108,7 @@ seclabel fs mounted on a directory below this.
> > >  .B \-n
> > >  don't change any file labels (passive check).
> > >  .TP
> > > -.B \-o filename
> > > +.BI \-o \ filename
> > >  Deprecated, SELinux policy will probably block this access.  Use
> > > shell redirection to save list of files with incorrect context in
> > > filename.
> > >  .TP
> > >  .B \-p
> > > @@ -84,15 +122,18 @@ options are mutually exclusive.
> > >  .B \-q
> > >  Deprecated, was only used to stop printing inode association
> > > parameters.
> > >  .TP 
> > > -.B \-r rootpath
> > > +.BI \-r \ rootpath
> > >  use an alternate root path. Used in meta-selinux for
> > > OpenEmbedded/Yocto builds
> > >  to label files under
> > > -.B rootpath
> > > -as if they were at /
> > > +.I rootpath
> > > +as if they were at
> > > +.B /
> > >  .TP 
> > >  .B \-s
> > >  take a list of files from standard input instead of using a
> > > pathname from the
> > > -command line (equivalent to \-f \-).
> > > +command line (equivalent to
> > > +.RB \*(lq "\-f \-" \*(rq
> > > +).
> > >  .TP
> > >  .B \-v
> > >  show changes in file labels and output any inode association
> > > parameters.
> > > @@ -120,26 +161,43 @@ option of GNU
> > >  produces input suitable for this mode.
> > >  
> > >  .SH "ARGUMENTS"
> > > -.B spec_file
> > > -The specification file which contains lines of the following
> > > form
> > > -.br
> > > -.B regexp [ \-type ] ( context | <<none>> )
> > > -.br
> > > -The regular expression is anchored at both ends.  The optional
> > > type field 
> > > -specifies the file type as shown in the mode field by the
> > > -.B ls(1)
> > > -program, e.g. \-\- to match only regular files or \-d to match
> > > only
> > > -directories.  The context can be an ordinary security context or
> > > the
> > > -string <<none>> to specify that the file is not to have its
> > > context
> > > +.TP
> > > +.I spec_file
> > > +The specification file which contains lines of the following
> > > form:
> > > +.sp
> > > +.RS
> > > +.I regexp
> > > +.RI [ type ]
> > > +.IR context \ |
> > > +.B <<none>>
> > > +.RS
> > > +The regular expression is anchored at both ends.  The optional
> > > +.I type
> > > +field specifies the file type as shown in the mode field by the
> > > +.BR ls (1)
> > > +program, e.g.
> > > +.B \-\-
> > > +to match only regular files or
> > > +.B \-d
> > > +to match only
> > > +directories.  The
> > > +.I context
> > > +can be an ordinary security context or the
> > > +string
> > > +.B <<none>>
> > > +to specify that the file is not to have its context
> > >  changed.
> > >  .br
> > >  The last matching specification is used. If there are multiple
> > > hard
> > >  links to a file that match different specifications and those
> > >  specifications indicate different security contexts, then a
> > > warning is
> > >  displayed but the file is still labeled based on the last
> > > matching
> > > -specification other than <<none>>.
> > > +specification other than
> > > +.BR <<none>> \|.
> > > +.RE
> > > +.RE
> > >  .TP 
> > > -.B pathname...
> > > +.IR pathname \ ...
> > >  The pathname for the root directory of each file system to be
> > > relabeled
> > >  or a specific directory within a filesystem that should be
> > > recursively
> > >  descended and relabeled or the pathname of a file that should be
> > > @@ -156,7 +214,7 @@ option is used.
> > >  follows symbolic links and operates recursively on directories.
> > >  .IP "2." 4
> > >  If the
> > > -.B pathname
> > > +.I pathname
> > >  specifies the root directory and the
> > >  .B \-v
> > >  option is set and the audit system is running, then an audit
> > > event is
> > > @@ -171,15 +229,15 @@ will write an SHA1 digest of the
> > >  set to an extended attribute named
> > >  .IR security.restorecon_last
> > >  to the directory specified in each
> > > -.B pathname...
> > > +.IR pathname \ ...
> > >  once the relabeling has been completed successfully. This digest
> > > will be
> > >  checked should
> > >  .B setfiles
> > >  be rerun
> > >  with the same
> > > -.B spec_file
> > > +.I spec_file
> > >  and
> > > -.B pathname
> > > +.I pathname
> > >  parameters. See
> > >  .BR selinux_restorecon (3)
> > >  for further details.
> > > @@ -187,7 +245,7 @@ for further details.
> > >  The
> > >  .B \-I
> > >  option will ignore the SHA1 digest from each directory specified
> > > in
> > > -.B pathname...
> > > +.IR pathname \ ...
> > >  and provided the
> > >  .B \-n
> > >  option is NOT set, files will be relabeled as required with the
> > > digest then
> > > diff --git a/policycoreutils/setfiles/setfiles.c
> > > b/policycoreutils/setfiles/setfiles.c
> > > index b700228..520866e 100644
> > > --- a/policycoreutils/setfiles/setfiles.c
> > > +++ b/policycoreutils/setfiles/setfiles.c
> > > @@ -17,6 +17,7 @@
> > >  static char *policyfile;
> > >  static int warn_no_match;
> > >  static int null_terminated;
> > > +static int request_digest;
> > >  static struct restore_opts r_opts;
> > >  static int nerr;
> > >  
> > > @@ -42,14 +43,14 @@ void usage(const char *const name)
> > >  {
> > >  	if (iamrestorecon) {
> > >  		fprintf(stderr,
> > > -			"usage:  %s [-iIFmnprRv0] [-e
> > > excludedir] pathname...\n"
> > > -			"usage:  %s [-iIFmnprRv0] [-e
> > > excludedir] -f filename\n",
> > > +			"usage:  %s [-iIDFmnprRv0] [-e
> > > excludedir] pathname...\n"
> > > +			"usage:  %s [-iIDFmnprRv0] [-e
> > > excludedir] -f filename\n",
> > >  			name, name);
> > >  	} else {
> > >  		fprintf(stderr,
> > > -			"usage:  %s [-diIlmnpqvFW] [-e
> > > excludedir] [-r alt_root_path] spec_file pathname...\n"
> > > -			"usage:  %s [-diIlmnpqvFW] [-e
> > > excludedir] [-r alt_root_path] spec_file -f filename\n"
> > > -			"usage:  %s -s [-diIlmnpqvFW]
> > > spec_file\n"
> > > +			"usage:  %s [-diIDlmnpqvFW] [-e
> > > excludedir] [-r alt_root_path] spec_file pathname...\n"
> > > +			"usage:  %s [-diIDlmnpqvFW] [-e
> > > excludedir] [-r alt_root_path] spec_file -f filename\n"
> > > +			"usage:  %s -s [-diIDlmnpqvFW]
> > > spec_file\n"
> > >  			"usage:  %s -c policyfile spec_file\n",
> > >  			name, name, name, name);
> > >  	}
> > > @@ -147,8 +148,8 @@ int main(int argc, char **argv)
> > >  	size_t buf_len;
> > >  	const char *base;
> > >  	int mass_relabel = 0, errors = 0;
> > > -	const char *ropts = "e:f:hiIlmno:pqrsvFRW0";
> > > -	const char *sopts = "c:de:f:hiIlmno:pqr:svFR:W0";
> > > +	const char *ropts = "e:f:hiIDlmno:pqrsvFRW0";
> > > +	const char *sopts = "c:de:f:hiIDlmno:pqr:svFR:W0";
> > >  	const char *opts;
> > >  
> > >  	/* Initialize variables */
> > > @@ -156,6 +157,7 @@ int main(int argc, char **argv)
> > >  	altpath = NULL;
> > >  	null_terminated = 0;
> > >  	warn_no_match = 0;
> > > +	request_digest = 1;
> > >  	policyfile = NULL;
> > >  	nerr = 0;
> > >  
> > > @@ -278,6 +280,12 @@ int main(int argc, char **argv)
> > >  			r_opts.ignore_digest =
> > >  					   SELINUX_RESTORECON_IG
> > > NORE_DIGEST;
> > >  			break;
> > > +		case 'D': /*
> > > +			   * Don't request file_contexts digest
> > > in selabel_open
> > > +			   * This will effectively disable usage
> > > of the
> > > +			   * security.restorecon_last extended
> > > attribute.
> > > +			   */
> > > +			request_digest = 0;
> > >  		case 'l':
> > >  			r_opts.syslog_changes =
> > >  					   SELINUX_RESTORECON_SY
> > > SLOG_CHANGES;
> > > @@ -409,9 +417,9 @@ int main(int argc, char **argv)
> > >  	} else if (argc == 1)
> > >  		usage(argv[0]);
> > >  
> > > -	/* Set selabel_open options. Always request a digest. */
> > > +	/* Set selabel_open options. */
> > >  	r_opts.selabel_opt_validate = (ctx_validate ? (char *)1
> > > : NULL);
> > > -	r_opts.selabel_opt_digest = (char *)1;
> > > +	r_opts.selabel_opt_digest = (request_digest ? (char *)1
> > > : NULL);
> > >  	r_opts.selabel_opt_path = altpath;
> > >  
> > >  	if (nerr)
> > > 
> > 
> > _______________________________________________
> > Selinux mailing list
> > Selinux@xxxxxxxxxxxxx
> > To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
> > To get help, send an email containing "help" to Selinux-request@tyc
> > ho.nsa.gov.
> > 
> 

_______________________________________________
Selinux mailing list
Selinux@xxxxxxxxxxxxx
To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.




[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux