一、帐号与群组
关于使用者帐号:
用户的ID与帐号信息所在位置是 /etc/passwd,而管理密码的数据则是在 /etc/shadow
每个登陆的使用者至少都会取得两个 ID ,
一个是使用者 ID (UserID ,简称 UID)、
一个是群组 ID (Group ID ,简称 GID)。
之前提到的文件的所有者和所属组,Linux就是通过UID与GID赖进行判断的呢(它只认识0和1这样的,对字符型的帐号名称其实没什么概念!,所以说,当系统有需要的时候,其实是通过查找/etc/passwd 和 /etc/group来进行帐号的显示的!如果没有找到对应UID的帐号,则直接显示UID的数字了!)
1./etc/passwd文件
[root@localhost ~]# cat /etc/passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
格式
:用户名,用户登录系统时使用的用户名(账户名称)
:密码位
在早期的Linux系统中,密码是存放在/etc/passwd文件中的,但是每个用户对该文件都有读的权限,这是比较危险的,
后来就不存放在这个文件了。
——转移到/etc/shadow下,所以显示x
:UID,用户标识号
管理员标识(root):0 不会改变
普通用户: 1-65535
系统用户(伪用户):1-499, 1-999 (centos6 ,centos7)
登录用户:500-60000 , 1000-60000
:GID,缺省组标识号
:注释性描述
:宿主目录,用户登录系统后的缺省目录
:用户使用的shell,默认为bash
2./etc/shadow文件
[root@localhost ~]# ll /etc/shadow
----------. root root 12月 : /etc/shadow
// 这个权限表示:只有root可以读写!
想要查询加密方式,可以通过:
authconfig --test | grep hashing
[root@localhost ~]# authconfig --test | grep hashing
password hashing algorithm is sha512
shadow文件内容:
[root@localhost ~]# head -n /etc/shadow
root:$$lWdDY9NwZNDiRLx8$PxOrJJojIcT93j4q7SBqapAnkgLqS9AA6qCLMWkW5EF1P4zYGpDLGPSehUbVJInRmHpsXaQKW8J2fnVUvPfgz/:::::::
bin:*:::::::
daemon:*:::::::
adm:*:::::::
格式
:用户名
:加密密码,如果是 !则代表密码无法使用!
:最近一次修改时间,以天位单位,从1970年1月1日为参考点(两个时间点间累加的日期)
:最小时间间隔,两次修改密码之间的最小天数,为0表示不限制,如改为3,表示间隔3天以上才能修改密码
:最大时间间隔,密码保持有效的最多天数,超过天数不改密码,则用户无法登录
:警告时间:从系统开始警告到密码失效的天数
:账号闲置时间,密码过期后的帐号宽限时间
:失效时间,密码失效的绝对天数,就是账号的失效日期,到了此日期帐号强制失效,例如用于收费服务等!
:标志,一般不使用
3.口令管理
普通用户修改密码:直接运行passwd即可!passwd指令介绍,参考:http://man.linuxde.net/passwd
[linuxde@localhost ~]$ passwd Changing password for user linuxde. //更改linuxde用户的密码;
(current) UNIX password: //请输入当前密码;
New UNIX password: //请输入新密码;
Retype new UNIX password: //确认新密码;
passwd: all authentication tokens updated successfully. //更改成功; 来自: http://man.linuxde.net/passwd
普通用户忘记密码以及root用户修改自己密码:(root修改自己密码运行 passwd root即可!)
[root@localhost ~]# passwd linuxde //更改或创建linuxde用户的密码;
Changing password for user linuxde. New UNIX password: //请输入新密码;
Retype new UNIX password: //再输入一次;
passwd: all authentication tokens updated successfully. //成功; 来自: http://man.linuxde.net/passwd
口令密码详细的设置命令chage的参考:http://linux.51yip.com/search/chage
root用户忘记密码比较棘手,将在单人维护章节讲述!
关于群组
1./etc/group
[root@localhost ~]# head -n /etc/group
root:x::
bin:x::
daemon:x::
sys:x::
.组名称
.组密码,通常不用,同样类似有/etc/gshadow文件
.GID,群组ID
.组员列表,新版Linux对于初始群组已经不显示默认成员了!
一个用户可以加入多个群组(使用命令 groups 可以查看所有群组!),所以这里会有有效群组的概念(不然新建一个文件怎么确定是属于哪个群组呢)
[dmtsai@study ~]$ groups
dmtsai wheel users
其中,第一个群组就是有效群组,新建文件所属的群组就是这个群组!
切换有效群组可以使用 newgrp
[dmtsai@study ~]$ newgrp users
修改用户加入群组,可以通过usermod:http://man.linuxde.net/usermod
2./etc/gshadow
[root@localhost ~]# head -n /etc/gshadow
root:::
bin:::
daemon:::
sys:::
.组名称
.密码栏,空或者!表示无密码,表示无群组管理员
.群组管理员帐号
.加入群组的帐号列表,与/etc/group相似!
二、帐号管理
1.添加用户——useradd
[root@localhost ~]# useradd --help
用法:useradd [选项] 登录
useradd -D
useradd -D [选项] 选项:
-b, --base-dir BASE_DIR 新账户的主目录的基目录
-c, --comment COMMENT 新账户的 GECOS 字段
-d, --home-dir HOME_DIR 新账户的主目录
-D, --defaults 显示或更改默认的 useradd 配置
-e, --expiredate EXPIRE_DATE 新账户的过期日期
-f, --inactive INACTIVE 新账户的密码不活动期
-g, --gid GROUP 新账户主组的名称或 ID
-G, --groups GROUPS 新账户的附加组列表
-h, --help 显示此帮助信息并推出
-k, --skel SKEL_DIR 使用此目录作为骨架目录
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库
-m, --create-home 创建用户的主目录
-M, --no-create-home 不创建用户的主目录
-N, --no-user-group 不创建同名的组
-o, --non-unique 允许使用重复的 UID 创建用户
-p, --password PASSWORD 加密后的新账户密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-s, --shell SHELL 新账户的登录 shell
-u, --uid UID 新账户的用户 ID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER
创建一般用户示例:
useradd vbird1
CentOS 这些默认值主要会帮我们处理几个项目:
在 /etc/passwd 里面创建一行与帐号相关的数据,包括创建 UID/GID/主文件夹等;
在 /etc/shadow 里面将此帐号的密码相关参数填入,但是尚未有密码;
在 /etc/group 里面加入一个与帐号名称一模一样的群组名称;
在 /home 下面创建一个与帐号同名的目录作为使用者主文件夹,且权限为 700
[root@localhost ~]# useradd -u vbird2
[root@localhost ~]# ll -d /home/vbird2
drwx------. vbird2 vbird2 12月 : /home/vbird2
[root@localhost ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird2:x::::/home/vbird2:/bin/bash
/etc/shadow:vbird2:!!:::::::
/etc/group:vbird2:x::
更多实例,参考菜鸟教程:http://www.runoob.com/linux/linux-comm-useradd.html
创建系统用户示例:
[root@study ~]# useradd -r vbird3
[root@study ~]# ll -d /home/vbird3
ls: cannot access /home/vbird3: No such file or directorya <==不会主动创建主文件夹
[root@study ~]# grep vbird3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird3:x::::/home/vbird3:/bin/bash
/etc/shadow:vbird3:!!:::::::
/etc/group:vbird3:x::
useradd的默认配置可以通过 -D选项进行查看:
[root@localhost ~]# useradd -D
GROUP=
HOME=/home
INACTIVE=-
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
关于参考目录SKEL,参考鸟哥的介绍:
SKEL=/etc/skel:使用者主文件夹参考基准目录
这个咚咚就是指定使用者主文件夹的参考基准目录啰~举我们的范例一为例, vbird1 主文件
夹 /home/vbird1 内的各项数据,都是由 /etc/skel 所复制过去的~所以呢,未来如果我想要让
新增使用者时,该使用者的环境变量 ~/.bashrc 就设置妥当的话,您可以到 /etc/skel/.bashrc
去编辑一下,也可以创建 /etc/skel/www 这个目录,那么未来新增使用者后,在他的主文件夹
下就会有 www 那个目录了!这样瞭呼?
更多useradd默认配置可以参考:https://www.cnblogs.com/craftor/p/3811612.html
关于GID/UID以及密码的参考则是来自 /etc/login/defs,
MAIL_DIR /var/spool/mail <==使用者默认邮件信箱放置目录
PASS_MAX_DAYS <==/etc/shadow 内的第 栏,多久需变更密码日数
PASS_MIN_DAYS <==/etc/shadow 内的第 栏,多久不可重新设置密码日数
PASS_MIN_LEN <==密码最短的字符长度,已被 pam 模块取代,失去效用!
PASS_WARN_AGE <==/etc/shadow 内的第 栏,过期前会警告的日数
UID_MIN <==使用者最小的 UID,意即小于 的 UID 为系统保留
UID_MAX <==使用者能够用的最大 UID
SYS_UID_MIN <==保留给使用者自行设置的系统帐号最小值 UID
SYS_UID_MAX <==保留给使用者自行设置的系统帐号最大值 UID
GID_MIN <==使用者自订群组的最小 GID,小于 为系统保留
GID_MAX <==使用者自订群组的最大 GID
SYS_GID_MIN <==保留给使用者自行设置的系统帐号最小值 GID
SYS_GID_MAX <==保留给使用者自行设置的系统帐号最大值 GID
CREATE_HOME yes <==在不加 -M 及 -m 时,是否主动创建使用者主文件夹?
UMASK <==使用者主文件夹创建的 umask ,因此权限会是
USERGROUPS_ENAB yes <==使用 userdel 删除时,是否会删除初始群组
ENCRYPT_METHOD SHA512 <==密码加密的机制使用的是 sha512 这一个机制!
关于这里,可以参考:http://blog.csdn.net/u010181136/article/details/17436407
综上:useradd至少会参考以下3个文件:
/etc/default/useradd
/etc/login.defs
/etc/skel/*
2.修改用户——usermod
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L:锁定用户密码,使密码无效;
-s:修改用户登入后所使用的shell;
-u:修改用户ID;
-U:解除密码锁定。 来自: http://man.linuxde.net/usermod
示例:
[root@localhost ~]# usermod -c "test accout" vbird2
3.删除用户——userdel
确定了不使用此帐号再删除,否则只需要usermod -L 锁定即可!
[root@study ~]# userdel [-r] username
选项与参数:
-r :连同使用者的主文件夹也一起删除
以上3个都是管理员使用的指令,不过一般的使用者也是阔以有相关的命令的!
1.查看信息——id
id [-gGnru][--help][--version][用户名称] 来自: http://man.linuxde.net/id
详细选项这里不展开,反正直接使用id就列出所有洛!
[root@localhost ~]# id root
uid=(root) gid=(root) 组=(root)
[root@localhost ~]# id vbird2
uid=1500(vbird2) gid=1500(vbird2) 组=1500(vbird2)
像这样我们之前直接指定UID为1500,则中间的1000-1049就直接废弃了!
2.查看与修改指纹信息——finger与chfn,修改shell——chsh
暂略。
三、群组管理
与账户管理十分相似,也是增删改的相关操作!
1.群组新增——groupadd
groupadd [-g gid] [-r] 群组名称
选项与参数:
-g :后面接某个特定的 GID ,用来直接给予某个 GID ~
-r :创建系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。
更多groupadd参考:http://man.linuxde.net/groupadd
2.群组修改——groupmod
groupmod [-g gid] [-n group_name] 群组名
选项与参数:
-g :修改既有的 GID 数字;
-n :修改既有的群组名称
更多groupmod参考:http://man.linuxde.net/groupmod
3.群组删除——groupdel
groupdel [groupname]
不过,这个命令需要注意,如果这个群组是某个用户的默认群组,则无法删除!(不然使用者一登录,发现默认群组都没了。。)
所以,要么你把那用户删了,要么改他的默认群组。
更多groupdel参考:http://man.linuxde.net/groupdel
4.群组管理员设置——gpasswd
和我们的社交帐号的群是一样的,不用什么事都通过root来干,可以设置群管理员,让群管理员来管理群
[root@study ~]# gpasswd groupname
[root@study ~]# gpasswd [-A user1,...] [-M user3,...] groupname
[root@study ~]# gpasswd [-rR] groupname
选项与参数:
:若没有任何参数时,表示给予 groupname 一个密码(/etc/gshadow)
-A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
-M :将某些帐号加入这个群组当中!
-r :将 groupname 的密码移除
-R :让 groupname 的密码栏失效
# 关于群组管理员(Group administrator)做的动作:
[someone@study ~]$ gpasswd [-ad] user groupname
选项与参数:
-a :将某位使用者加入到 groupname 这个群组当中!
-d :将某位使用者移除出 groupname 这个群组当中。
关于gpasswd的用法参考:http://linux.51yip.com/search/gpasswd
ACL不再赘述,待补充...