用户管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户管理相关的知识,希望对你有一定的参考价值。
参考技术A Linux是个多用户多任务操作系统,所有要使用系统资源的用户都必须向管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面能帮助管理员对使用系统 的用户 进行跟踪,并控制他们对系统资源的访问;另一方面也能帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个惟一 的用户 名和用户口令。用户在登录时输入正确 的用户 名和口令后,才能进入系统和自己的主目录。实现用户的管理,要完成的工作主要有如下几个方面:
1、用户账号的添加、删除和修改。
2、用户口令的管理。
3、用户组的管理。
首先Linux用户类别有:
管理员,UID:root,0
系统用户,UID:1-499(CentOS 6),1-999(CentOS 7)
登陆用户,UID:>500(CentOS 6),>1000(CentOS 7)
用户组类别:
管理员组,GID:root,0
系统组,GID:1-499(CentOS 6),1-1000(CentOS 7)
普通组,GID:>500(CentOS 6),>1000(CentOS 7)
Linux组的类别:
用户的主要组(主组):每个有且仅有一个主要组,当用户创建时,自动创建一个与用户同名的组作为主要组。
用户的附加组(辅助组):一个用户可以属于零个或多个辅助组。
CentOS6和7的默认UID和GID不同,这个是由于/etc/login.defs文件里面的默认值所决定的
Linux用户和组的主要配置文件
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
该文件里面一共有7项,包括
# [root@centos ~]# cat /etc/passwd
# root(用户名):x(密码):0(UID):0(GID):root(注释):/root(家目录):/bin/bash(默认SHELL)
假如把普通用户的UID更改成0,该普通用户会变成管理员账号,因为在Linux系统里面,识别管理员是否为管理员,就是查看用户的UID号码,为0则为管理员,在生产环境中,可能会把管理员root的账号改成其他名字,这样做是以防止黑客攻击root账号来进行破解。
/etc/group:组及其属性信息
getent group [groupname]
# [root@centos7 ~]# cat /etc/group
# root(主组):x(组密码):0(GID):gentoo(附加组的用户列表)
组成员:将该组作为辅助组的成员列表。当成员先把该组当作辅助组,再转成主要组时,不改变。当成员离开该组时,被删除。
/etc/shadow:用户密码及其相关属性
# [root@centos 7~]# cat /etc/shadow
# root(用户名):$6$(加密方式为sha512加密)5wrv8BV(随机数,俗称盐)$n3wljU/4.OUa/X.RYOGbE3SX72vay1Qo1ZXiUNZhuQJIB7fdzE87gaCQiuiOZbin(用户密码):17110(从1970-1-1到最近一次修改的时间经过了多少天来表示):0(最小存活期,密码再过几天可以被更改):99999(最大存活期,密码过期时间):7(在正确登录时,密码过期前提醒时间):(在正确登录时,密码过期后几天账号会被锁定):(从1970年1月1日算起,多少天后帐号失效):(保留)
上面这个设置了密码显示的用户。
现在我们再新建一个用户看看
[root@centos6 ~]# useradd wang
[root@centos6 ~]# tail -1 /etc/shadow
wang:!!:17015:0:99999:7:::
我们会看见账号密码那里有两个!!,这表示账号被锁定,没有密码的话不允许该用户去登陆,假如有密码,但是那里还是有一个叹号的话,也表示账号被锁定,不对用户进行解锁的话该用户将无法登陆。假如没有叹号的话,该用户可以没有密码的情况下面直接登陆。不过该功能只能在CentOS 5版本和更老的版本可以实现,为了安全起见,从CentOS 6以后已经修正此问题。
/etc/gshadow:组密码及其相关属性
getent gshadow [groupname]
# cat /etc/gshadow
# root/(主组):(组密码):(组管理员列表):gentoo(附加组的用户列表)
当用户不是该groupname的辅助组成员时,则需要输入密码,成功后临时以主要组的身份加入该组。
当用户是该groupname的辅助组成员时,无需输入密码,将临时以主要组的身份加入该组,而其原有的主要组,临时变为辅助组。
注意:为安全起见,现在一般都没有组密码,直接管理员指派,因为当其他用户知道了组密码,可以随意加入该组,这样的话就显得不安全。
用户和组管理命令
用户管理命令: useradd usermod userdel
组的管理命令: groupadd groupmod groupdel
用户管理命令
useradd [options] username增加用户
-u UID username 创建用户时指定UID,(如不指定则Centos:500-60000, Centos7: 1000-60000)
-o 配合-u选项使用,不检查UID的唯一性,可以与已存在的用户的uid相同
-g groupname username 创建用户时,指定主组为某个已存在的组(将不会再创建与用户同名的组)
-G group1[,group2] username 指定用户的辅助组,但GID要事先存在
-N username 不创建私用组做主组,使用用户的主要组做主组
-d 目录: 指定家目录(确保指定的家目录所在的上级目录要存在,且家目录本身不能存在)
-c 备注 创建用户时指定描述信息
-s shell:指定默认shell,应该指定使用/etc/shells文件中出现的shell
-r 创建系统用户 特点:CentOS 6: ID<500,CentOS 7: ID<1000 默认shell为/sbin/nologin
-D 显示或更改默认设置 (默认值设定:/etc/default/useradd或/etc/login.defs文件中)(此命令相当于cat / etc/default/useradd)
注:创建用户时的诸多默认设定配置文件为/etc/login.defs
useradd –D -s SHELL -d是指定用户的家目录和登录shell
注意:创建用户不加-d和-s是是系统默认的家目录(/home/qqq)和登录shell(/bin/bash)。
useradd –D –b BASE_DIR
useradd –D –g GROUP
[root@centos6 ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
该命令,可以查看到创建用户时候的各项默认值
例如更改其他用户默认的家目录和默认SHELL之类等等的参数就在这里面
/etc/skel 家目录文件的来源,在此文件夹里面新建文件的话,创建新用户的时候会连指定的新文件一并创建
/etc/login.defs 一些用户和组等创建的默认设置的文件
usermod [options] username 修改指定用户(跟useradd命令使用方法类似)
-u UID 更改用户的UID
-g 组名 用户名 更改用户的主组
-G "" username 或 usermod -G primarygroup username 清空用户所有的辅助组
-aG 组名,可以追加辅助组而不用覆盖之前的组
-s SHELL 更改用户的默认SHELL
-c 注释
-d home,跟-m同时用移动家目录数据,并将家目录移动到目的目录并改名 (不会创建,只修改/etc/passwd当中的家目录信息)
-m 移动家目录数据,跟-d同时用
-l 新的名字,把用户改名
-e 指定过期日期yyyy-mm-dd
-f days 指定密码过期之后多少天帐户过期
-L 锁定指定用户,在/etc/shadow 里面加! (同以上/etc/shadow的解释)
-U 解锁用户,将/etc/shadow 里面的!号拿掉 (同以上/etc/shadow的解释)
userdel [options] LOGIN 删除指定用户
-r 连同家目录和邮箱一起删除
组的管理命令
groupadd [options] groupname 添加指定组
-g:指定用户的GID
-r groupname: 创建系统组 CentOS 6: ID<500 CentOS 7: ID<1000
groupmod [options] GROUP 修改指定组
-g newgid groupid: 修改组的GID
-n newgrpname oldgrpname: 修改组的组名
groupdel [options] GROUP 删除指定组
groupmems [options] [action] 更改和查看组成员
groupmems -a user_name | -d user_name | [-g group_name] | -l | -p (CentOS 7才有此命令)
options:
-g, --group groupname 更改为指定组 (只有root)(查看组里有哪些用户)
-l -g 用户名: 查看指定用户名组下面还有哪些用户属于此组
-a 要增加的组
切换用户或以其他用户身份执行命令
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su – UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
root su至其他用户无须密码;非root用户切换时需要密码
换个身份执行命令:
su [-] UserName-c 'COMMAND'
选项:-l –login:
su -l UserName相当于su-UserName
查看用户相关的ID信息
id [OPTION]… [USER]
-u: 查看用户的UID
-g: 查看用户的GID
-G: 查看用户的Groups
-n: 查看用户的Name
修改用户密码策略
chage -l username 显示帐户的密码信息
-d 指定密码的上次修改时间(yyyy-mm-dd)
-d 0 则强制用户下次登录时必须修改密码
-E 指定账户的过期时间
-I 密码过期之后多少天帐户过期
-m 设置最小存活时间
-M 设置最大存活时间
-W 设置密码过期前的提醒时间
chage username 交互式修改用户的密码策略
示例:
chage -d 0 tom 下一次登录时强制重设密码
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom
getent passwd,shadow,gourp,gshadow USERNAME/GROUPNAME
直接查看指定用户/组里面的passwd,shadow,gourp,gshadow文件里面的内容
其他命令总结:
chsh:修改默认的shell
chfn:修改用户注释
finger:查看个人信息
vipw:使用vim来编辑passwd文件
vigr:使用vim来编辑group文件
pwconv:pwconv命令用来开启用户的投影密码
pwunconv:pwconv命令用来关闭用户的投影密码
Linux系统里的用户和群组密码,分别存放在名称为passwd和group的文件中, 这两个文件位于/etc目录下。因系统运作所需,任何人都得以读取它们,造成安全上的破绽。投影密码将文件内的密码改存在/etc目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符,有效的强化了系统的安全性。
批量增加用户和改密码
newusers FILE(有格式的文件) 批量加用户 文件格式 /etc/passwd 文件的格式 root:x:0:0::/root:/bin/bash
ex. newusers user.txt
chpasswd FILE (有格式的文件) 批量改密码 USERNAME:PASSWORD
ex. cat p.txt |chpasswd
注意,按照以上步骤的方法批量添加完用户和密码以后,这些用户的家目录里面并没有配置,此时需要我们手动把这里面的配置复制到它们的家目录里面
/etc/skel 这个文件甲下面的文件是关于用户初始配置里面的变量文件之类
cp -r /etc/skel/.[^.]* /home/USERNAME
练习:
创建下面的用户、组和组成员关系
名字为admins 的组
用户natasha,使用admins 作为附属组
用户harry,也使用admins 作为附属组
用户sarah,不可交互登录系统,且不是admins 的成员,
natasha,harry,sarah密码都是centos
groupadd admins
useradd -G admins natasha
useradd -G admins harry
useradd -s /sbin/nologin sarah
echo centos |passwd --stdin natasha > /dev/null
echo centos |passwd --stdin harry > /dev/null
echo centos |passwd --stdin sarah > /dev/null
/dev/null是一个特殊的设备,就是一个数据黑洞,吞噬送往该设备的所有数据,以后如果不想让屏幕有显示可以,会经常用到这个/dev/unll 的数据吞噬设备
以上是关于用户管理的主要内容,如果未能解决你的问题,请参考以下文章