第三章:用户与权限管理
3.1 用户管理
输入用户名和密码后就可以登陆进系统,在登陆窗口的后面发生了什么?为什么就能够登陆系统呢?学习完本小节应该就可以回答此问题。
3.1.1账户信息管理
用户的帐号信息实际存放在/etc/passwd,每一个账户占用一行,每一列以冒号为间隔分为7个子段,下面详细介绍个字段含义:
字段一:帐号名称
如上图中最后以行第一个冒号前的值为tiger也就是登陆的帐号信息。
字段二:密码
即上图中第二个冒号前的x,由于/etc/passwd文件是大家都可以访问的,显然将密码放在这里不够安全,这里以x代替(实际的密码存放在/etc/shadow文件中)
字段三:UID
系统真正的识别用户其实就是通过UID,帐号名称只是方便用户记忆,系统会通过账户名词名称关联到UID。
字段四:GID
组ID,对应用户所在的组信息。
字段五:用户说明
用于解释用户,无重要通途。
字段六:主目录
说明用户的主目录。
字段七:shell
说明账户登陆后默认使用的shell。
了解了用户的登陆信息,那么怎么修改这些信息呢?
添加/删除用户
useradd username:添加用户名为username的账户
创建用户时可以指定UID和GID,这里需要注意GID必须已经存在否则会报错。
-u:用于制定UID;
-g:用于制定GID;
创建用户时可以标注用户说明、用户的主目录以及用户默认使用的shell
-c:用于创建用户说明;
-d:用于指定用户主目录;
-s:用于指定用户默认使用的shell
userdel删除账户信息
-r:同时删除用户的主目录信息
修改用户登陆信息
usermod用于修改用户登陆相关信息
-l:修改用户名;
-u:修改UID;
-g:修改GID;
-c:修改用户说明
-d:修改用户主目录;
-s:修改用户默认使用的shell;
添加/删除用户组
groupadd:用于添加用户组
-g:用于指定GID
groupmod:用于修改用户组信息
-g:修改用户GID;
-n:修改用户组名称;
groupdel:用于删除用户组
认证信息修改
用户的认证信息存放在/etc/shadow文件中,与/etc/passwd相同该文件以“:“为分隔符共分为9个字段:
字段一:账户名称;
字段二:用户密码
这里的密码是用户真正的密码,不过是经过加密的。
字段三:最近用户密码修改时间
该字段表示用户密码最近一次修改的时间,这里显示的值实际为1970年1月1日到修改密码当天间隔的天数。
字段四:密码最短有效期
表示用户密码在这段时间内无法被修改。
字段五:秘密最长有效期
表示设置密码的时间超过该值就需要修改密码。
字段六:警告期
表示在密码有效期快要达到字段五最长有效期时会提前给用户发出告警,提示密码即将过期。
字段七:活动期
表示密码有效期达到字段五最长有效期之后仍可以使用该密码进行登陆,如果这段时间过后仍然没有修改密码则不能登陆系统。
字段八:失效日期
表示密码在超过这个日期之后就不能再使用,使用的也是1970年1月1日到失效日期之间间隔的天数。
字段九:保留字段
可通过passwd或chage修改用户密码信息。第一章中已初步介绍过passwd用法,这里再巩固以下
passwd:用户修改用户密码。
-S:列出密码相关信息
-l:锁住密码信息,使用户密码失效,会在/etc/shadow的密码列前加上!!
-u:解锁密码信息
-n:修改第四个字段,密码多久不可被修改
-x:修改第五个字段,密码最长有效期
-w:修改第六个字段,密码失效前的警告期
chage:修改用户密码信息
-d:后面接日期,修改最近一次密码更改日期
-m:后面接天数,表示修改密码最短有效期
-M:后面接天数,表示修改密码最长有效期
-W:后面接天数,表示修改密码失效前的警告期
-I:后面接天数,表示修改密码活动期
-E:后接日期,表示修改密码失效日期
添加系统管理员
如果想要让普通用户能够具有root账户的部分或全部权限,可以通过修改/etc/sudoers再使用sudo执行命令。可以通过vim修改/etc/sudoers文件,但如果修改错误vim并不会提示,推荐使用visudo来修改。以使普通用户具有添加用户的权限为例来说明:
通过visudo打开/etc/sudoers后在100/101行添加如下描述,其中100行为注释,101行第一列tiger表示用户名称,bogon={root}表示来自主机bogon的用户具有root的权限,/usr/sbin/useradd表示具体可执行的root命令
3.2 权限管理
权限查看
ls -l file/directory:查看文件或目录的权限
第一列表示文件或目录的类型和权限信息,第一个字符表示文件类型,二到十个表示权限。权限字符中每三个为一组,第一组表示所有者的权限,第二组表示所在群组的权限,第三组表示其他用户的全新。每一组中的三个字符从左到右分表示可读/可写/可执行权限,r代表具有可读权限,w表示具有可写权限,x表示具有可执行权限,-表示不具有该字符对应的权限。
注意,同样的权限对于目录和文件却有不同的含义,对目录的权限就是对目录内容即所包含文件的权限,而不是对文件内容的权限;文件的权限才是只对文件内容的权限。
更改文件/目录权限:chmod
首先来看权限的表示方法,除了使用rwx表示外还可以通过数字表示:r=4,w=2,x=1,那么具有rwx权限就是4+2+1=7、具有rx权限就是4+1=5,以此类推。
使用数字改变权限:
使用字符更改权限:可使用+、-、=来设置权限
默认权限
当新建一个文件时的权限为755,目录的权限为644,那么这个权限时如何得到的呢?
首先来看下umask:用户指定文件或目录不具有的权限。对于目录而言满权限777-022就是755(也就是除去了可写权限,目录的写权限很重要,默认不开放),755-111=644(也就是除去了可执行权限)
umask的值可以直接修改,但只是在当前shell有效,shell关闭后再打开就又恢复的之前的值
若想永久修改umask的值可以通过修改配置文件/etc/profile、/etc/bashrc
/etc/profile:59行到63行即为umask设置
/etc/bashrc:70行到74行即为umask值
注意,两处的umask必须设置一致,设置完成后执行source /etc/profile、source /etc/bashrc来重新读取配置文件后才能生效。
特殊权限-t权限
t权限作用于目录,当用户对目录具有wx权限时只有自己和root用户能够对该目录下自己创建的文件进行删除、重命名、移动等操作。t权限对文件的其他所有者生效。
如下图root用户在test目录下建立了file1文件,test目录的权限为777,所以其他用户tiger是可以删除file1文件的;当root用户对test目录设置了t权限后其他用户tiger就无法再删除test目录下非自己创建的文件。
特殊权限-s权限
当s权限出现在用户所有者的x权限时,仅对可执行文件生效,在执行文件时会以文件所有者的身份运行。如下图,/bin/touch的所有者为root用户,其他用户tiger在执行touch命令时建立的文件file2的所有者为tiger;当root用户设置touch文件的s权限(所有者)后其他用户tiger再用touch创建文件file3时file3的所有者是root
当s权限出现在用户所属群组的x权限时,对可执行文件和目录生效,在执行文件时会以文件用户组的身份运行,在目录下创建的文件的用户组为目录的用户组。如下图,test目录的用户组为root,其他用户tiger建立的文件file1的用户组为tiger;当root用户设置test目录的s权限(用户组)后其他用户tiger创建的文件file2时用户组是test目录的用户组root
也可以通过数字的形式修改特殊权限。所有者的s权限为4,用户组的s权限为2,其他人的t权限为1
ACL权限
前面谈到的都是对一类用户的权限设置,是否可以对但用户进行权限设置呢?此时就需要ACL(Access Control List)。
setfacl -m:设置文件或目录的ACL权限
getfacl:查看文件或目录的ACL权限