Linux菜鸟起飞之路【五】权限管理(一)
一、与用户相关的几个文件
1./etc/passwd
储存用户名,格式为 用户名:密码(用密码代位符X代替):UID:GID:用户描述信息:家目录:shell
-
用户名(login_name):是代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。
-
密码(passwd):一些系统中,存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
-
用户标识号(UID):是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。取值范围是0-65535。0是超级用户root的标识号,1-99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。
-
组标识号(GID):字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。
-
注释性描述(users):字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。
-
家目录(home_directory):也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
-
Shell:用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。
注意:
a)用户自己建立的账户的UID和GID都是从500开始的,500之前为系统的保留账户。
b)Root用户的UID是0,将UID改为0就是登陆的Root账户
c)Root账户的标识符为#,其他账户都为$
2./etc/shadow
密码文件,格式为 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
-
“登录名”是与/etc/passwd文件中的登录名相一致的用户账号
- “口令”字段存放的是加密后的用户口令字:
-
如果为空,则对应用户没有口令,登录时不需要口令;
-
星号代表帐号被锁定;
-
双叹号表示这个密码已经过期了;
-
$6$
开头的,表明是用SHA-512加密; -
$1$
表明是用MD5加密; -
$2$
是用Blowfish加密; -
$5$
是用 SHA-256加密;
-
-
“最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCOLinux中,这个时间起点是1970年1月1日。
-
“最小时间间隔”指的是两次修改口令之间所需的最小天数。
-
“最大时间间隔”指的是口令保持有效的最大天数。
-
“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
-
“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。
-
“失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
3./etc/group
用户组的所有信息都存放在/etc/group文件中,格式为 组名:密码:组标识号:组内用户列表
a)组名:组名是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
b)密码:密码字段存放的是用户组加密后的密码,与用户文件中一样一般用密码代位符X代替。
c)组标识号:组标识号与用户标识号类似,也是一个整数,被系统内部用来标识组。别称GID.
d)组内用户列表:是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
4./etc/gshadow
组密码文件,格式为 组名:口令:组管理者:组内用户列表
a) 组名: 是用户组的名称,由字母或数字构成。
b) 口令:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码。
c) 组管理者:这个字段也可为空,如果有多个用户组管理者,用,号分割。
d) 组内用户列表:如果有多个成员,用,号分割。
思考:创建一个系统用户需要涉及多少文件?
已知:1./etc/passwd 2./etc/shadow 3./etc/group
4./etc/gshadow 5./home
扩展:
6./var/spool/mail
用户邮件目录,每创建一个用户就会在该目录下以用户名新建一个邮箱。
、
二、用户相关命令重认识
1.id查看用户
选项: -g或--group 显示用户所属群组的ID。
-G或--groups 显示用户所属附加群组的ID。
-n或--name 显示用户,所属群组或附加群组的名称。
-r或--real 显示实际ID。
-u或--user 显示用户ID。
-help 显示帮助。
-version 显示版本信息。
在实际使用中一般是直接使用。
例子:
1 id Xs
2.useradd添加用户
选项: -u 指定用户的UID
-g 指定用户的所属群组
-G 将用户加入指定群组中,方式为覆盖
-d 指定用户的家目录
-c 指定用户的描述信息
-s 指定用户所使用的shell
例子:
1 useradd -u 1314 -g Xs -d /home/ljq -c ABeautifulGirl -s /bin/bash MQ
3.userdel删除用户
选项: -f:强制删除用户,即使用户当前已登录。
-r:删除用户的同时,删除与用户相关的所有文件。
直接使用userdel只删除用户但是不删除其家目录和其他文件,使用userdel -r删除用户及其一切文件。
例子:
1 userdel cnblogs 2 userdel -r MQ
4.usermod修改用户基本信息
选项:-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组,方式为覆盖;
-aG<群组>;修改用户所属的附加群组,方式为覆盖;
-l<帐号名称>:修改用户帐号名称;
-L:锁定用户密码,使密码无效;
-s<shell>:修改用户登入后所使用的shell;
-u<uid>:修改用户ID;
-U:解除密码锁定。
例子:
1 useradd -s /sbin/nologin -c test ljq 2 passwd ljq 3 tail -1 /etc/passwd 4 usermod -u 1314 -aG Xs -c ABeautifulGirl -s /bin/bash -l MQ ljq
注意:
在使用-d修改用户家目录时,直接修改是没有作用的而且会造成用户无法登录。
如下图:
图一可以正常登录
图二更改用户家目录操作
图三再次登录提示找不到家目录
因为在/home下没有/lv目录,那么我尝试创建一个/lv目录,尝试在有/home/lv目录时能否登录
图四为创建/home/lv操作
图五提示信息变为找不到"/home/lv/.local"文件
原来在家目录里还有一些看不见的隐藏配置文件,如果不将它们拷贝过去同样无法登录。
图六为MQ账户家目录下的隐藏配置文件(之前MQ账户叫做ljq,因此家目录为/home/ljq,我们利用usermod改变账户名称时,其他文件名称不变)
我们尝试将/home/ljq完整拷贝到/home/lv,再看看能否登陆
图七为拷贝操作
图八可登录
5.groupadd添加组
选项: -g:指定新建工作组的id;
-r:创建系统工作组,系统工作组的组ID小于500;
-K:覆盖配置文件“/ect/login.defs”;
-o:允许添加组ID号不唯一的工作组。
例子:
1 groupadd -g 521 mm
6.groupmod修改组基本信息
选项: -g<群组识别码>:设置欲使用的GID;
-o:重复使用GID;
-n<新群组名称>:设置欲使用的群组名称。
例子:
1 groupmod -g 1314 -n xq mm
7.groupdel删除组
例子:
1 groupdel xq