Hello,

The manual page for chown(1) notes:

    The ownership of a file may only be altered by a super-user for
    obvious security reasons.

    Unless invoked by the super-user, chown clears the set-user-id and
    set-group-id bits on a file to prevent accidental or mischievous
    creation of set-user-id and set-group-id programs.

I observe:

$ ls -l a.out
-rwsr-xr-x  1 root  wheel  10468 Sep 18 16:59 a.out
$ sudo chown nobody a.out
$ ls -l a.out            
-rwxr-xr-x  1 nobody  wheel  10468 Sep 18 16:59 a.out

Two questions:

(1) If chowning files is only possible by the super-user ("for obvious
security reasons"), then why do we bother explicitly noting that "Unless
invoked by the super-user..." it clears the setuid bits?  Isn't the
"Unless" clause redundant if chown(1) cannot succeed without super-user
privs anyway?

(2) It looks to me that chown(1) clears the setuid bits even _if_
invoked by the super-user, and as described in chown(2).

(I note that on OS X, this is not the case, where chown(1) does indeed
retain setuid bits if invoked with super-user privs.)

Should the manual page read:

    The ownership of a file may only be altered by a super-user for
    obvious security reasons.

    Upon success, chown clears the set-user-id...

?

-Jan

Reply via email to