在生活中,不同身份有不同权限,在Linux中亦是如此。使用不同身份登录系统,则对文件拥有不同限制的操作。而组,相当于用户的容器,类似于某某部门,某某部门有何权限,Linux系统对应的组就有这么一类权限。现在,我们先从用户与组谈起。
用户类别:
每个人都有唯一的***号,便于查找某人。而用户也有唯一的标识,称为UID(UserId),范围是0-65535。名字与UID之间需要进行名称转换,方便使用者与计算机来读取。而把用户名与ID对照表存储在一个库里:/etc/passwd。
人有千千万,有人高高在上,有人垂首寒酸,在Linux中就有这么一个“独裁者”:管理员,我们用0标识,拥有最高权限,可指点江山。而最多的“平民”,分两种:系统用户与登录用户。在CentOS6中,系统用户ID为1-499,登录用户为500-60000。而在CcentOS7中,系统用户ID为1-999,登录用户为1000-60000。
组类别:
与用户类别类似,组也可以分为管理员组,与普通用户组,而普通用户组又分为,系统组与登录组。他们对于的GID(GroupId)与用户类别相同。而组的解析库在/etc/group中存放。
不同的是组还有其他两种类别。在用户的角度,可以有主组(基本组),和附加组。而在组的角度,如果一个组只有一个用户,且与这个用户名相同,那么这个组就称为这个用户的私有组。相反,如果组内包含多个用户,那么称为公共组。
下面列举几个用户与组的操作命令:
组操作:
添加组:groupadd命令
格式:groupadd [选项] group
选项:-g GID:指定GID,默认是上一个组的GID+1;
-r:创建系统组;
例:groupadd -g 1024 mageedu
创建GID为1024,组名为mageedu
修改组属性:groupmod命令
格式:groupmod [选项] GROUP
选项: -g GID:修改GID
-n new_name:修改组名
例:groupmod -g 1124 -n mage mageedu
修改mageedu的GID为1124,组名为mage
删除组:groupdel命令
格式:groupdel [选项] GPOUP
例:groupdel mage
删除组mage
用户操作:
添加用户:useradd命令
格式:useradd [选项] 登录名
选项:-u,--uid UID:指定UID;
-g,--gid GROUP:指定基本组ID,此组得事先存在;
-G,--groups :指明用户所属的附加组,多个组之间用逗号分隔
-c,--comment:指明注释信息
-d,--home:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;
-s,--shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shell文件中
-r,--system:创建系统用户
-M:不为用户创建主目录
-D:显示创建用户的默认配置;
-D 选项:修改默认选项的值;
注:修改的结果保存于/etc/default/useradd文件中
例:useradd -u 1024 -g1024 -G zhou -s /etc/tcsh -r -M mage
新建系统用户mage,UID为1024,GID为1024,附加组为zhou,指定shell为tcsh,不创建家目录。
修改用户:usermod命令
格式: usermod [选项] 登录名
选项:-u,--uid UID:修改用户的新ID
-g,--gid GROUP:修改用户所属的基本组;
-G,--groups :修改用户所属的附加组;原来的附加组会被覆盖
-a,--append:与-G一同使用,用于为用户追加新的附加组;
-c,--comment COMMENT:修改注释信息;
-d,--home HOME_DIR:修改用户的家目录,用户原有的文件不会转移至新位置;
-m,--move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;
-l,--login NEW_LOGIN:修改用户名;
-s,--shell SHELL:修改用户的默认shell;
-L,--lock:锁定用户密码,即在用户原来的密码字符串之前添加一个“!”;
-U,--unlock:解锁用户密码;
删除用户:userdel命令
格式:userdel [选项] 登录名
选项:-r:删除用户时一并删除家目录。
现在我们有了用户和组,就来说一下他们的权限。在Linux文件系统中,共有三类权限,分别为:读,写,执行,用字母r(read),w(write),x(excute)表示。每个文件共有三组,分别对应属主的权限u(user),属组的选项g(group),其他用户的权限o(others)。而一个用户执行一个进程,那么这个进程所拥有的权限取决于这个用户,而不是进程自身。
在Linux中找出一个文件为例:
-rw-r--r--. 1 root root 1973 12月 12 15:45 /etc/passwd
自第二位起至第九位,是对应的权限位。每三位为一组,分别为用户的权限,组的权限,与其他权限。“-”表示无权限,因此可以看出,此文件,用户有读写权限,组与其他用户只有读权限。那么,不同用户对于文件与目录的限制又是什么呢?
对于文件来说,读权限,可以获得文件的数据;写权限,可以修改文件的数据;执行权限,可以将这个文件运行为进程,这里是特别说明,一般的文件是没有执行权限的,所以要慎重操作!而对于目录来说,读权限,可以使用ls等命令获取所有的文件列表;写权限,可以在这个目录中创建或者删除文件;执行权限,则可以使用ls -l来获取所用文件的详细属性信息。
现在我们知道了“rwx”的属性。那么试想一下,是不是可以用对应的二进制数字来标识他们。例如,一个文件的用户权限为rw-,那把有权限的位置用1标识,无权限的位置用0标识,就变成了110。然后把这个数字转换为八进制,变成了6。那么,每个文件的三组权限,可以换成三个八进制数标识,这就叫做权限的组合机制。例如,某文件的权限是rw-r--r--,对应的二进制标识为110 100 100,再转换为八进制是644。
下面就来设置一下权限,使用chmod命令。
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
首先可以根据八进制数字标识来修改:
例如想修改/tmp/test.txt/文件的权限为rw-r--r--,可以直接按照八进制标识修改。
chmod 664 /tmp/test.txt。
也可以直接操作一类用户的所有权限位:
如果修改test.txt的权限依旧为rw-r--r--。
chmod u=rw,g=r,o=r /etc/test.txt,还可以单独指定用户类别来赋予权限,所以这种方法非常灵活多用。
对单个权限位进行设置:
chmod u+w,g+w,o-r /etc/test/txt,逐位操作,大大提高了便利性!
可以参考某个文件的权限,然后设置自己的权限。
chmod --reference=/etc/test /etc/test.txt这条命令就是参照test的权限,把test.txt的权限设置与test相同。
chmod命令有一个重要选项-R,--recursive,表示递归修改,能把目录内所有文件的权限同时更新。
怎么修改一个文件的属主与属组,需要用到chown,chgrp命令。
chown命令:修改属主(也可修改属组);
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
例如:chown mageedu /tmp/test.txt,把test.txt的属主设置为mageedu
chown magedu:magedu /tmp/test.txt
把test.txt的属主设为magedu,属组为magedu
chgrp命令:修改属组
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
chown与chgrp命令也有-R选项,表示递归修改。
特别说明:只有管理员才能修改用户的属主和属组。
如果新建一个目录,或者文件,默认的权限是什么呢?当然不应该为777,这时候需要定义一个默认的权限。需要用到,umask,它的作用是设置一个遮掩码,用新建文件时的权限减去这个遮罩码,得到的就是默认权限。例如遮罩码为002,那么新建一个文件默认的权限就为777-002:775。特别说明,文件的默认权限是666,目录为777,因为文件默认不能够拥有执行权限。而一个文件默认权限减去遮罩码正好有执行的话,会加1。例如设置的遮罩码为033,而666-033=633,组和其他用户有执行权限,它会把有执行权限的位加1,变成644。
直接使用umask命令,能够查看当前的umask。而使用umask MASK命令,可以设置。例如,umask 022,就把当前shell的遮罩码设置为022。
原文地址:http://zhouyuanhang.blog.51cto.com/10907853/1725384