首先我们来看一个小例子:a.txt属于redis组,因此redis组的用户对a.txt文件具有读写权限。如果我们想让用户mongodb 对文件a.txt具有读写权限,而mongodb并不在redis 组中,那么只能将a.txt的其他用户改为读写权限,但是这样一来不止mongodb,所有的其他用户都对a.txt具有读写权限了,因此这样的操作是非常危险的,通常不建议这么做。
# cd /tmp
# ll
# id mongodb
# chmod o=rw a.txt
# ll
那么安全的做法是什么呢?
a) 如果文件a.txt对redis用户仍有意义,那么我们可以将mongodb 用户加入到 redis组中,给redis组赋予读写权限;
b)如果文件a.txt 对redis用户已经没有意义了,那么我们可以将 a.txt的属主改为 mongodb用户,并且让a.txt的属主具有读写权限。
修改文件的属主命令格式为:
# chown [option] USERNAME FILE_NAME
其含义为将 FILE_NAME 这个文件的属主改为 USERNAME 这个用户
修改文件的属组命令格式为:
# chgrp [option] GROUP_NAME FILE_NAME
其含义为将 FILE_NAME 这个文件的属组改为 GROUP_NAME 这个用户
以上两个命令的选项和修改文件权限一样,有两个,分别是:
-R: 递归修改权限
--reference=[PATH]/FILE_NAME1 FILE_NAME2
例如,将文件 a.txt的属主改为mongodb用户:
# chown mongodb a.txt
# ll
将文件a.txt的属组改为testgrp:
# chgrp testgrp a.txt
# ll
事实上使用chown 命令可以同时修改文件的属主和属组,其格式如下:
# chown USERNAME:GROUP_NAME FILE_NAME
其含义为将 FILE_NAME这个文件的属主改为USERNAME,并将其属组设定为GROUP_NAME这个组
更简单的写法可以是:
# chown USERNAME.GROUP_NAME FILE_NAME
例如,将文件a.txt的属主和属组改为root用户的root组
# chown root:root a.txt
或者是
# chown root.root a.txt
# ll
命令chown 还可以只改属组而保留属主,其写法为:
# chown:GROUP_NAME FILE_NAME
例如,将文件a.txt的属组改为redis组,可以写成:
# chown :redis a.txt
# ll
如果想把a.txt的属主和属组改成b.txt的属主和属组,可以使用 --refernece 选项:
# chown --reference=b.txt a.txt
# ll
需要注意的是,chown和chgrp命令更改的权限都只针对文件本身,即如果文件是目录,则目录里的文件仍保持原来的权限。如果想同时修改目录和其中的文件权限,则需要使用 -R 来进行递归修改。
例如修改目录a的属组,不会影响目录a中文件的属组:
# ll
# chgrp redis a
# ll
# ll a
注意,chmod命令所有用户都能使用,但是改变文件的属主(chown)和属组(chgrp),只有管理员才有此权限。
转载于:https://blog.51cto.com/wuyelan/1404832