TL;DR: If you want to run chmod on a file on GNU/Linux, you need to be root or the owner of the file.
From the chmod(2) (chmod system call) manual page:
  The effective UID of the calling process must match the owner of the
  file, or the process must be privileged (Linux: it must have the
  CAP_FOWNER capability).
From the capabilities(7) manual page:
  CAP_FOWNER
  
  
  - Bypass permission checks on operations that normally require the filesystem UID of the process to match the UID of the file (e.g.,
  chmod(2), utime(2)), excluding those operations covered by
  CAP_DAC_OVERRIDE and CAP_DAC_READ_SEARCH;
  [...]
From the setfacl(1) manual page:
  PERMISSIONS
  
  The file owner and processes capable of CAP_FOWNER are granted the
  right to modify ACLs of a file. This is analogous to the permissions
  required for accessing the file mode. (On current Linux systems,
  root is the only user with the CAP_FOWNER capability.)