前言:此次验证操作环境为CentOS7.3,及CentOS6.9。
人员账号的管理是身为运维人员必要掌握的技能之一。其工作中的用途甚至比文件安全、软件配置更为广泛。对用户组及其相关权限有个清晰的认识,有利于我们工作学习的开展。下面就我个人理解,在此斗胆做个总结。
我们知道,当用ll或ls –l去查看目录下文件时,往往会得到如下的结果。
drwxrwxr-x. 2 magedu magedu 6 Jul 21 21:03 magedu
-rw-r--r--. 1 root root 0 Jul 22 09:26 test
以文件test为例,我们将其对应表示内容整理如下:
-:文件类型,-为普通文件,d为目录,如文件magedu,b为装置文件里面的可供存储的接口设备,c为字符设备(键盘、鼠标),l为软链接文件,s为套接字文件socket,p为管道文件pipe
rw-:文件属主的权限;r--:文件属组的权限;
r--:其他用户(非属主、属组)的权限。
.:文件有隐藏属性(可隐藏,不表示已隐藏)
1:数字表示文件被硬链接的次数
root:文件的所有者(属主)
root:文件的属组
0:文件的大小,单位是字节(bytes);
Jul 22 09:26:文件最近一次被修改的时间
test:文件名注意:r表示可读,w为可写,x为可执行,-则无权限。rwx所在的位置是固定的,若没有该项权限,则以-表示。如文件test拥有者的权限为可读可写不可执行,其同组用户权限为可读不可写不可执行,非同组的其他用户权限为可读不可写不可执行。
Linux中,/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow四个文件与用户组的关系密切相关。从四个文件入手,是系统了解用户及组、权限管理的有效方法。
由于我们的主题是用户及组的权限管理,这里相关文件就不详细说了。但这几个文件又是学习用户和组管理的关键,所以了解又是很必要的。
我们新建一个用户saber,并以此为例进行操作。在此之前,本机仅有root用户和magedu用户。
1.新建saber,用ll查询家目录,果然,/home/下多了一个saber的文件夹。
用finger和id命令查看,我们会得到这样的结果:
用cat浏览/etc/passwd,在/etc/passwd的结尾我们看到了这样的信息。
saber:x:1001:1001::/home/saber:/bin/bash
由finger和id所得的信息,我们很容易理解。其内容以:为间隔对应位如下:
login name:登录用名(saber)
passwd:密码(x),真实密码加密后放在/etc/shadow
UID:用户身份编号 (1001)
GID:登录默认所在组编号 (1001)
GECOS:用户全名或注释(这里为空)
home directory:用户主目录 (/home/saber)
shell:用户默认使用shell (/bin/bash)
我们已经知道用useradd可以创建用户,那么想要自定义创建用户相关信息由如何实现呢?我们先来看看useradd可以实现的功能
useradd
-u uid username 创建用户时指定uid(如不指定则Centos:500-60000, Centos7: 1000-60000)
-o -u uid username 创建用户时指定uid(可以与已存在用户的uid相同)
-g groupname username 创建用户时指定主组为某个已存在的组。(将不会再创建与用户同名的组)
-c "描述" username 创建用户时指定描述信息。
chfn ... username
-d path username 指定用户的家目录(确保指定的家目录所在的上级目录要存在,且家目录本身不能存在)
-s /sbin/nologin username 指定用户的默认shell
-G group1[,group2] username 指定用户的辅助组
-N username 设置用户的主要组为默认组(users,uid=100)
-r username 创建系统用户
/etc/default/useradd
/etc/login.defs
-D -s /sbin/nologin 修改默认设置(以上两文件)
创建用户使用useradd,修改用户信息我们可以使用usermod
usermod 修改用户信息
-u newuid username 修改用户的UID
-o -u newuid username 修改用户的uid(可以与已存在用户的uid相同)
-aG 加组名,可以追加辅助组而不用覆盖之前的组
-G "" username 或 usermod -G primarygroup username 清空用户所有的辅助组
-g groupname username 修改用户的主组
-s /sbin/nologin username 修改用户的默认shell
-c ... username 修改用户时指定描述信息。
chfn ... username
-d /.../path username 修改用户的家目录(不会创建,只修改/etc/passwd当中的家目录信息)
-m -d /.../path username 修改用户的家目录信息,并将家目录移动到目的目录并改名。
-l newname oldname 修改用户名
-L 给用户/etc/shadow中的密码位加!使用户被锁定
-U 把!拿掉。
-e yyyy-mm-dd 设置一个帐户过期时间
f days 指定密码过期之后多少天帐户过期
删除用户一般使用userdel
userdel [-r] username
删除用户时,加上-r连同其家目录,mail一同删除
啊,我们差点忘了一个很重要的命令。用户创建好了,我们怎样切换呢?root想要以普通用户身份执行命令又要如何实现呢?su就可以哦。
su:switch user
su username 非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su - username 登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
-c 'command' 以用户的身份执行命令而不登录(仅root)
2.使用chage –l ,我们可以查看到一串关于saber的信息。这些信息对应的文件是/etc/shadow
用cat浏览/etc/shadow,其结尾如下:
saber:!!:17369:0:99999:7:::
其内容以:为间隔对应位如下:
登录用户名:(saber)
用户密码:一般用sha512加密(!与!!表示用户被锁定)
authconfig --passalgo=sha256 --update 修改密码加密方式
从1970年1月1日起到密码最近一次被更改的时间
密码再过几天可以被变更(0表示随时可被变更)
密码再过几天必须被变更(99999表示永不过期)
密码过期前几天系统提醒用户(默认为一周)
密码过期几天后帐号会被锁定
从1970年1月1日算起,多少天后帐号失效
我们知道chage –l可以查看用户帐户日期信息,那修改这些信息的可不可以呢?其实,chage的用途还有很多。
chage -l username 显示帐户的密码信息
-d 指定密码的上次修改时间(yyyy-mm-dd)
-d 0 强制用户下次登录时必须修改密码
-E 指定账户的过期时间
-I 密码过期之后多少天帐户过期
-m 设置最小存活时间
-M 设置最大存活时间
-W 设置密码过期前的提醒时间
-L 多少天帐户过期
chage username 交互式修改用户的密码策略
chage多用于修改密码帐户存活期,那么又怎样设置修改用户的密码呢?既然建立了用户账号,不可能一直都是锁定状态吧。这里,passwd命令就派上用场了。
passwd [OPTIONS] UserName: 修改指定用户的密码,仅 root用户权限(普通用户可以 passwd:修改自己的密码)
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码
echo "PASSWORD" | passwd --stdin USERNAME从标准输入接收用户密码
3.使用cat查看/etc/group,结尾如下:
saber:x:1001:
组名:saber
密码位:x
GID:
CentOS6 1-499为系统用户,预留
CentOS7 1-999为系统组,预留
组成员:讲该组作为辅助组的成员列表,当成员先把该组当作辅助组,再转成主要组时,不改变。当成员离开该组时,被删除。
下面是组相关的常用命令:
getent group groupname查看某组/etc/group内信息
groups username 查看用户所属组
id username查看用户uid,gid
groupadd
-g gid groupname 创建指定gid的组
-r groupname 创建系统组(小于1000)
groupmod
-n newgrpname oldgrpname 修改组名
-g newgid groupname 修改gid
groupdel groupname 删除组
groupmems -g admin -a libai (仅能一次加一个用户到组中)
groupmems -g admin -d libai 将指定成员从组中删除
groupmems -g admin -l 列出指定组的成员列表(辅助组)
groupmems -p admin 消除指定组的所有成员。
4.使用cat查看/etc/gshadow,结尾如下:
saber:!::
组名:groupname
密码位:
gpasswd groupname 设置组密码
newgrp groupname(普通用户)
当用户不是该组的辅助组成员时,则需要输入密码,成功后可临时获得主要组成员身份加入该组
当用户是该组的辅助组成员时,无需输入密码,讲临时以主要组的身份加入该组,而其原有的主要组,则临时变为辅助组
管理员位:只能由root任命或撤销,可以同时由多名。以,为间隔。
权利:可以修改组密码,可以将用户从该组(辅助组)内添加或删除
组成员位:将该组作为辅助组的成员列表,当成员先把该组当作辅助组,再转成主要组时,不改变。当成员离开该组时,被删除。
组密码与管理的相关命令;
getent gshadow [groupname]查看某组的gshadow信息
gpasswd -A username groupname任命用户为组管理员
撤消所有管理员:gpasswd -A "" admin
gpasswd -a libai admin 往组内添加用户
gpasswd -d libai admin 将用户从组中删除
gpasswd -r admin 删除组密码
gpasswd -R admin 用!覆盖密码 ,限制非辅助组组成员进入
gpasswd -M libai,luren admin 指定辅助组成员
5.linux的哲学思想之一——一切皆文件。所以以上的一切命令其实我们都可以通过修改最初的几个文件实现。诸如:
vipw = vim /etc/passwd
vipw -s = vim /etc/shadow
vigr = vim /etc/group
vigr -s = vim /etc/gshadow
pwck 检查/etc/passwd /etc/shadow
grpck 检查/etc/group /etc/gshadow
再者诸如,getent还可以又如下用法:
getent passwd username 查看用户的/etc/passwd信息
getent shadow username 查看用户的/etc/shadow信息
此外还有:
chfn username修改用户描述信息
chsh 指定shell
newusers passwd格式文件 批量创建用户
chpasswd 批量修改用户口令
相关文档:/etc/default/useradd新建用户的默认信息文件
/etc/skel/.*新建用户家目录内默认文件(别名等)
/etc/login.defs