How to change ownership of symbolic links?
Solution 1
On a Linux system, when changing the ownership of a symbolic link using chown
, by default it changes the target of the symbolic link (ie, whatever the symbolic link is pointing to).
If you'd like to change ownership of the link itself, you need to use the -h
option to chown
:
-h, --no-dereference affect each symbolic link instead of any referenced file (useful only on systems that can change the ownership of a symlink)
For example:
$ touch test
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
$ sudo ln -s test test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
$ sudo chown root:root test1
$ ls -l test*
-rw-r--r-- 1 root root 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
Note that the target of the link is now owned by root.
$ sudo chown mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
And again, the link test1
is still owned by root, even though test
has changed.
$ sudo chown -h mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 mj mj 4 Jul 27 08:47 test1 -> test
And finally we change the ownership of the link using the -h
option.
Solution 2
When acting on symlinks, you must tell most of the tools (chown, chmod, ls...) not to dereference the link: you must add the -h
parameter, as stated in the manpage :
-h, --no-dereference
affect symbolic links instead of any referenced file (useful only on systems that can change the ownership of a symlink)
So try : sudo chown -h askar.admin /etc/init.d/jboss1
Solution 3
Also note that the error you gave above
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied
is not due to the owner of the symlink being somebody else than the owner of the original file. It is (most probably) caused by user askar not having write access to the directory /etc/init.d
.
Related videos on Youtube
user3744406
Updated on September 18, 2022Comments
-
user3744406 over 1 year
I am facing some issue with creating soft links. Following is the original file.
$ ls -l /etc/init.d/jboss -rwxr-xr-x 1 askar admin 4972 Mar 11 2014 /etc/init.d/jboss
Link creation is failing with a permission issue for the owner of the file:
ln -sv jboss /etc/init.d/jboss1 ln: creating symbolic link `/etc/init.d/jboss1': Permission denied $ id uid=689(askar) gid=500(admin) groups=500(admin)
So, I created the link with sudo privileges:
$ sudo ln -sv jboss /etc/init.d/jboss1 `/etc/init.d/jboss1' -> `jboss' $ ls -l /etc/init.d/jboss1 lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss
Next I tried to change the ownership of the soft link to the original user.
$ sudo chown askar.admin /etc/init.d/jboss1 $ ls -l /etc/init.d/jboss1 lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss
But the permission of the soft link is not getting changed.
What am I missing here to change the permission of the link?
-
user3744406 almost 9 years$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.6 (Santiago)
-
-
user3744406 almost 9 yearsI figured that . Adding write permission for group was missing
-
Ulrich Schwarz almost 6 yearsAs a disappointing tangential: neither
cp -as
norinstall
norln
can directly create symlinks with a specified user/group. -
itoctopus about 5 yearsThe most concise answer. Most people come here because chown by its own doesn't work - the "-h" fixes this.
-
Harry over 3 yearsAny option to change the permission of the link and target at the same time?
-
edwardsmarkf over 2 yearsTHANK YOU so much for including "--no-dereference" and not just assuming everybody knows what "-h" is. some of us are not born knowing what the cryptic switches mean!