Changing Symlink Ownership
I just encountered the Curious Case of changing the ownership of a symbolic link. I used chown and then…what happened is…well nothing. Or least that’s how it looked. There was no error message and the symlink’s ownership was unchanged.
This seemed sub-optimal so I asked Google and a few colleagues and I got the answer, more than once, that you can’t change the ownership of a symlink. I accepted this and so I deleted the symlink and then I su’ed to the account I wanted to give ownership to and recreated the symlink as that acccount. Not a Bad Thing, but not a Good Thing either.
A few minutes later I couldn’t stop thinking about how little sense this made. So I went back to Google and sweet talked her into giving over the goods. It turns out that what happened the first time I tried to chown the symlink is that chown respected the symlink and I changed the ownership of the referent directory, not the link to it. That was a Bad Thing. Especially since I didn’t see that it happened.
Luckily, there is a Good Thing as well, and it’s chown. Chown has an option (-h) to reference a symlink itself and not its referenced file:
chown --no-dereference user:group symlink
From the Good Thing comes a Happy Ending: I have restored the ownership of the referent directory and successfully changed the ownership of the symlink. Not to mentioned learned a cool bit of linux trivia. This would be a terribe(ly awesome) interview questions >:).
Many thanks to the Edmonds Commerce Blog, a Freelance PHP Ecommerce and SEO Developer in the UK for their post explaining this. Although, if I had just man’ed chown, I would have been able to figure this out on my own <grin>.
update: The man page for chown has a comment that makes it sound like some OS really can’t change the ownership of a symlink.
“-h, –no-dereference
affect each symbolic link instead of any referenced file (useful only on systems that can change the ownership of a symlink)”
Just thought I’d mention that as well.