Ticket #7667: image.mk-normalize_permissions.patch

File image.mk-normalize_permissions.patch, 1.8 KB (added by ermo <rune.morling+openwrt@…>, 5 years ago)

Make image.mk be a little smarter about permissions during its normalization pass

  • include/image.mk

    old new  
    125125  endef 
    126126endif 
    127127 
     128# Make the normalization pass a little smarter 
     129# Only normalize stuff which is either a file or a directory 
     130# AND either of the following: 
     131# * lives in /etc/config/ OR 
     132# * is world readable AND does NOT have its SUID/SGID bit set AND 
     133#   is NOT in the list of protected files 
     134# 
     135# NOTE: we need to explicitly keep stuff under /etc/config world readable 
     136#       because parts of luci run with no root privileges 
     137 
     138IS_FILE_OR_DIR :=  '(' -type f -o -type d ')' 
     139IS_ETC_CONFIG :=  -path '*/etc/config/*'  
     140IS_WORLD_READABLE_NOT_SUGID :=  '(' -perm /0004 -a ! -perm /6000 ')' 
     141IS_PROTECTED := '(' \ 
     142                  -path '*ssh_host*' -o \ 
     143                  -path '*_host_key*' -o \ 
     144                  -path '*/etc/passwd*' -o \ 
     145                  -path '*/etc/shadow*' \ 
     146                ')' 
     147 
     148IS_MATCH := '(' $(IS_ETC_CONFIG) -o \ 
     149               '(' $(IS_WORLD_READABLE_NOT_SUGID) -a \ 
     150                 ! $(IS_PROTECTED) \ 
     151               ')' \ 
     152            ')' 
    128153 
    129154define Image/mkfs/prepare/default 
    130         # Use symbolic permissions to avoid clobbering SUID/SGID/sticky bits 
    131         - $(FIND) $(TARGET_DIR) -type f -not -perm +0100 -not -name 'ssh_host*' -print0 | $(XARGS) -0 chmod u+rw,g+r,o+r 
    132         - $(FIND) $(TARGET_DIR) -type f -perm +0100 -print0 | $(XARGS) -0 chmod u+rwx,g+rx,o+rx 
    133         - $(FIND) $(TARGET_DIR) -type d -print0 | $(XARGS) -0 chmod u+rwx,g+rx,o+rx 
     155        # Note that a=rX,u+w is equal to 0644 or 0755 
     156 
     157        - $(FIND) $(TARGET_DIR) $(IS_FILE_OR_DIR) -a $(IS_MATCH) -print0 \ 
     158        | $(XARGS) -0 chmod -vv a=rX,u+w | grep -v retained 
     159 
     160        # Explicitly print out the stuff we didn't touch (notice the '!') 
     161 
     162        - $(FIND) $(TARGET_DIR) $(IS_FILE_OR_DIR) -a ! $(IS_MATCH) -ls 
     163 
     164        # *phew* 
     165 
    134166        $(INSTALL_DIR) $(TARGET_DIR)/tmp 
    135167        chmod 0777 $(TARGET_DIR)/tmp 
    136168endef