Linux入门之用户管理
linux用户进行访问一般需要认证、授权、审计,其中linux提供了很多的相关命令和相关文件来供使用者分层管理。
用户分类 user
按权限划分:
管理员:root uid为0
普通用户:
系统用户:uid:1-499(centos6) uid:1-999(centos7)
特性:1、用来运行特定进程的一种身份
2、对守护进程获取资源进行分配
3、不需要登录
登录用户:uid:500+(centos6) uid:1000+(centos7)
用来登录系统的普通用户
注意:系统是用uid来区分用户的,如果root为500,tom用户uid为0,那么tom身份为超及管理员
用户组 group
按权限划分:
管理员组:root gid:0
普通组:
系统组:1-499(centos6) 1-999(centos7)
一般组:500+(centos6) 1000+(centos7)
按单个用户分配组划分:
用户组分类:
私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组
基本组:用户的默认组
附加组:默认组以外的其它的组
基本组和附加组区别:
primary group:主要组、基本组,一个用户只有一个
secondary group:辅助组、附加组,可以有多个,也可以没有
安全上下文
用来控制进程所能访问恩资源的权限取决于进程的发起者(执行者)的身份
用户及组相关的配置文件
/etc/passwd 用户及其属性信息(名称、UID、基本组GID等)
/etc/shadow 用户密码以及密码相关的属性
/etc/group 组的属性信息
/etc/gshadow 组的密码及相关属性
/etc/passwd 用户属性文件
account:登录名
password:密码token
UID:用户ID,唯一性
GID:基本组ID,只能有一个
CECOS:注解信息
HOME DIRECTORY:用户家目录,不指定默认为/home/[username]
SHELL:用户的默认shell类型,默认为/bin/bah
SHELL为/sbin/nologin时表示为无法登录
/etc/shadow 用户口令信息
用户名
加密的口令 !或*不能登录
最后一次修改口令的天数 为0表示登录时必须修改口令
口令最短使用期限
口令最长使用期限
警告天数
账号多少天后锁定
账号多少天后失效 从1970年计算
提示:如果最长使用期限小于最短使用期限,用户将不能修改密码
注意:date +%s 当前用户修改的秒数 / (24小时*60秒*60秒)=当前使用天数
/etc/group 用户组属性文件
组名
组口令:类似于/etc/passwd,口令信息被保存到影子文件(/etc/gshadow)中
gid : 类似入uid,于uid不冲突,但也是唯一性
以此为附加组的用户列表:如果为多个用户,中间用“,”隔开
注意:组文件关系修改后,必须重新登录才会重新读取组成员关系
/etc/gshadow 用户组密码及相关属性文件
组名
组密码:一般用于非组成员需要临时切换进入某组时需要输入密码
组成员列表:组管理员的列表,可以更改组成员变动和密码
以此为附加组的用户列表:如果为多个用户,中间用“,”隔开
用户及组相关文本操作工具
一般情况下,修改文本可能使用gedit、nano、vim等文本专用编辑工具,但是在某些情况下如果修改特殊格式的文本出现了内容或格式错误,一般难以检查,这时需要用到专用的用于修改特定文本的单一工具来检查格式
vipw 作用等价于 vi /etc/passwd
vigr 作用等价于 vi /etc/group
用于检查用户及组相关配置文件内容格式的命令
pwck 检查/etc/passwd中的用户及密码信息
grpck 检查/etc/group中的组及相关信息
注意:在/etc/paswd文件中,一般设定了密码的第二位(用:隔开的第二个字段)用x显示,这是说明把密码保存到了/etc/shadow中,但是可能在原来没有/etc/shadow文件,密码就是存在此文件中的第二字段,这时输入pwck命令将会把第二字段的密码移动到/etc/shadow中,添加一条信息,并将/etc/passwd文件第二字段设为x
关于口令加密的问题
加密方法:
对称加密:加密和解密使用同一个密码
公钥加密:每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)
单向加密,散列加密:提取数据特征码,常用于数据完整性校验,hash算法不可逆推
1、雪崩效应:初始微小的改变都会引起全局巨大改变
2、定长输出
MD5:Message Digest, 128位定长输出
SHA1:Secure Hash Algorithm, 160位定长输出
更改新创建用户的加密算法
authconfig --passalgo=[passtype] --uptdate (修改后只是再次新创建用户生效)
passtype(加密使用算法): md5、sha1、sha512等
使用openssl命令生成一个固定位数的复制口令
openssl rand --base64 # 生成base64算法的口令,#为位数
用户管理命令
useradd usermod userdel id su passwd
useradd 添加用户
useradd [option] [uname]
-u # :指定uid
-o:不检查uid唯一性,一般和-u配合使用
-g [gname|gid]:指定基本组
-G [gname|gid]:指定附加组,多个用“,”隔开
-c “comment” :注释信息
-d /path/to/dir :指定家目录,目录事先不能存在,因为要自动生成
-s [shelltype] :指定用户的默认shell类型
-N:表示创建用户时不创建私有组做基本组
-r:添加为系统用户,一般和 -s /sbin/nologin配合使用
-M:不自动创建家目录,系统用户默认不创建
-D [option] [arg]:显示或设置新建用户的默认设置
如果加了选项和表示设置,如useradd -D -s /bin/bash修改默认shell类型
提示:useradd -D显示的默认设置保存在/etc/default/useradd文件中,如果创建用户时使用了-N(及不创建同名私有组做基本组),那么就把此用户加入到文本中GROUP字段中字段指定GID的组作为基本组,一般默认GID为100,表示组名为USERS的组
userdel 删除用户命令
userdel [option] [uname]
-r :默认不加表示保存用户家目录,加此选项会彻底删除家目录
usermod 修改用户配置信息命令
usermod [option] [uname]
-u #:修改uid
-l [newname]:修改用户的账号名
-g #:修改所属基本组
-G [group1],..:修改附加组
-a:表示append(追加),一般和-G配合使用追加附加组
-c "COMMENT":修改注释信息
-s [SHELL]:修改默认shell类型
-d:修改家目录
-m:一般配合-d选项,表示迁移家目录数据
-L:表示锁定(lock)用户 在/etc/shadow第二字段(密码口令)中加入!
-U:表示解锁(unlock)用户 在/etc/shadow第二字段(密码口令)中拿掉!
-e [YYYY-MM-DD]:指定账号过期时间,-1表示不过期
-f [day]: 指定非活动期限
id 查看用户相关的id信息
id [option] [username]
-u: 显示uid
-g:显示gid
-n:显示名字
-G:显示GROUPS
su: 切换用户 switch username
su [option] [-] [uname] 不指定用户名默认表示切换至root
- [uname] 完全切换
-c '[command]’ 通过临时调用指定用户身份来执行命令
如:su - root -c “ls /etc/shadow” #以root身份查看密码配置文件
-l [uname]: 等价于 - [uname] 或 --login [uname]
提示:关于切换方式介绍
su uname:非登录式切换,既保留当前用户的配置,不改变当前工作目录
su - uname:登陆式切换,会读取自身的用户配置,并切换至家目录
root用户下切换到其它用户无需密码,非root切换时需要密码
passwd 用户密码信息设置命令
passwd [option] [uname] 只有root用户有权限设置指定用户信息
-l:lock表示锁定指定用户
-u:unlock表示解锁指定用户
-e:强制用户下次登陆时修改密码
-x maxday:密码最长使用期限
-n minday:密码最短使用期限
-w warndays:表示提前多少天发出警告
-i inactiveday:非活动期限
--stdin:从标准输入接收用户密码
例如: echo “PASSWORD” | passwd --stdin USERNAME
chage 修改密码及账户相关信息
chage [OPTION]... [USERNAME]
-d LAST_DAY 密码最后修改时间
-E, --expiredateEXPIRE_DATE 账户过期时间
-I, --inactive INACTIVE非活动期限
-m, --mindaysMIN_DAYS设置密码最短使用期限
-M, --maxdaysMAX_DAYS设置密码最长使用期限
-W, --warndaysWARN_DAYS密码警告期限
–l,显示密码策略
例子:
chage -d 0 tom #表示下次tom登录必须修改密码 chage -m 0 -M 42 -W 14 -I 7 tom #表示tom用户密码最短可以不使用,最长使用到42天,第14天开始警告,前一周用户为非活动状态 chage -E 2016-09-10 tom #设定用户到2016年9月10号不能再次登陆并使用
用户其它信息的相关命令
chfn 设置个人备注信息(如电话、姓名等)
chsh [shelltype] 设置当前默认shell类型
finger 查看备注信息
用户组管理命令
groupadd groupmod groupdel gpasswd newgrp groupmems groups
groupadd 添加组命令
groupadd [option] [gname]
-g #:指定gid
-r:创建为系统组
groupmod 修改或设定组属性信息
groupmod [option] [gname]
-g #:设置组的gid
-n newgname:修改组名字
groupdel 删除组
groupdel [gname]
gpasswd 设置组密码、组成员关系
gpasswd [option] GROUP
-a user:将指定用户添加至指定组中
-d user:将指定用户从指定组中删除关系
-A user1,user2... :设置指定用户对指定组有管理权限,既组管理者
newgrp 临时切换基本组
newgrp
如果用户不属于此组,则需要组密码
groupmems 组成员关系调整命令
groupmems [option] [action]
option:
-g
action:
-a ,--add username:指定用户加入组
-d ,--del username:从组删除指定用户
-l:列出组成员列表
-p ,--purge:清除所有成员
groups 根据用户查看组信息
groups [option] [uname] 不指定用户默认为查看当前登录用户的组
getent 查看指定配置文件信息
getent [cmd] [uname] 默认不指定用户为查看所有
cmd:
passwd 查看/etc/passwd下信息
group 查看/etc/group下信息
shadow 查看/etc/shadow下信息
gshadow 查看/etc/gshadow下信息
批量创建用户和设置用户密码
newusers [userfile]
chpasswd [passfile]
file:为特定格式
userfile: 用户名:x :uid :gid : 家目录 : 默认shell类型
passfile: 用户名:密码
案例:
1、创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"
useradd -G bin,root -s /bin/csh -c "Gentoo DIStribution" gentoo
2、创建下面的用户、组和组成员关系
名字为admins 的组
用户natasha,使用admins 作为附属组
用户harry,也使用admins 作为附属组
用户sarah,不可交互登录系统,且不是admins 的成员,natasha,harry,sarah密码都是centos
groupadd admins #添加admins组 useradd -G admins natasha #添加natasha用户附加组为admins useradd -G admins harry #添加harry用户附加组为admins useradd -s /sbin/nologin sarah #添加sarah并指定默认shell类型为不登陆
echo "centos" | passwd --stdin natasha #通过管道将输出传给标准输入修改密码 echo "centos" | passwd --stdin harry echo "centos" | passwd --stdin sarah
3、创建testuser uid 1234,主组:bin,辅助组:root,ftp,shell:/bin/csh home:/testdir/testuser
useradd -u 1234 -g bin -G root,ftp -s /bin/csh -d /testdir/testuser testuser id test #查看test用户id gid等信息
4、修改testuser uid:4321,主组:root,辅助组:nobody,loginname:test,home:/home/test 家数据迁移
usermod -u 4321 -g root -G nodody -l test -d /home/test -m testuser id user groups test groupmems -l -g root ls -a /home/test
5、批量创建帐号:user1...user10
uid:3000-3009,shell:/bin/csh,home:/testdir/username
passwd:usernamepass
注意家目录相关配置,使用户正常登录
第一步:
vim /testdir/adduser.txt#创建指定格式用户信息文本文件 [root@mzf ~]# cat /testdir/addusers.txt #要添加的内容 user1:x:3001:3001::/testdir/user1:/bin/csh user2:x:3002:3002::/testdir/user2:/bin/csh user3:x:3003:3003::/testdir/user3:/bin/csh user4:x:3004:3004::/testdir/user4:/bin/csh user5:x:3005:3005::/testdir/user5:/bin/csh user6:x:3006:3006::/testdir/user6:/bin/csh user7:x:3007:3007::/testdir/user7:/bin/csh user8:x:3008:3008::/testdir/user8:/bin/csh user9:x:3009:3009::/testdir/user9:/bin/csh
第二部:
newuser /testdir/adduser.txt #对刚才的文件做批量添加用户读取
第三部:
vim /testdir/addpasswd.txt #创建指定格式密码文本文件 [root@mzf ~]# cat /testdir/addpasswd.txt #内容入下 user1:user1pass user2:user2pass user3:user3pass user4:user4pass user5:user5pass user6:user6pass user7:user7pass user8:user8pass user9:user9pass
cat /testdir/addpasswd.txt | chpasswd #对密码文件做匹配设定密码操作
第五步:
tail -n 9 /etc/passwd #操作最近添加的9个用户信息 tail -n 9 /etc/shadow #查看最近添加的9个用户的密码信息 getent passwd | tail -n 9#作用同上面2条命令 getent shadow | tail -n 9
第六步:
cat /etc/default/adduser#查看默认配置信息 cp -r /etc/kel/.[^.]* /testdir/user1#将默认用户配置模板文件拷贝至家目录 cp -r /etc/kel/.[^.]* /testdir/user2 cp -r /etc/kel/.[^.]* /testdir/user3 cp -r /etc/kel/.[^.]* /testdir/user4 cp -r /etc/kel/.[^.]* /testdir/user5 cp -r /etc/kel/.[^.]* /testdir/user6 cp -r /etc/kel/.[^.]* /testdir/user7 cp -r /etc/kel/.[^.]* /testdir/user8 cp -r /etc/kel/.[^.]* /testdir/user9
总结:在调整用户组关系信息中有很多命令可以使用,usermod可以指定用户来设定,groups可以指定用户来查看,而指定组可以用gpasswd和groupmems,查看各种配置信息,可以用getent来安全查看