1、什么是用户和组
每个用户都拥有一个唯一的用户名和一个与之相关联的数值型的用户标识UID,用户可以隶属于一个或多个组,而每个组也都拥有唯一的一个名称和一个组标识符GID,对于进程和内核来说,只识别UID和GID,用户名和组名最终都会通过/etc/passwd和/etc/group这俩个数据库转换为UID和GID来标识。这两个ID的主要用途如下:
● 确定各种系统资源的所有权
● 对赋予进程访问上述资源的权限加以控制
2、用户管理
<1>用户文件
文件 | 内容 |
/etc/passwd | 用户名,空密码,UID,GID,注释信息,家目录,登陆shell |
/etc/shadow | 用户名,加密密码,各密码时间设置 |
/etc/group | 组名,空组密码,GID,组中用户 |
/etc/gshadow | 组名,加密密码,组管理员列表,组中用户 |
注:可执行getent passwd USERNAME查看/etc/passwd的特定行,和cat /etc/passwd | grep USERNAME功能相同。
可执行pwunconv移动/etc/shadow中的加密密码至/etc/passwd中
可执行vipw直接打开/etc/passwd文件,vigr直接打开/etc/group文件
可执行pwck和grpck分别检查/etc/passwd文件和/etc/group文件
▲/etc/shadow中密码设置如下图
注:可使用usermod -L USERNAME锁定用户,此时用户将无法登陆,这也是空密码无法登陆用户的原因。但不允许无限解锁,否则用户无密码即可登陆。(centos6以后的版本已弥补次缺陷)
可使用chage -d0 USERNAME和passwd -e使得用户密码过期而无法登陆
注:chage USERNAME:可修改用户的/etc/shadow中的时间
chfn:交互式修改用户的注释信息
finger USER:查看用户的详细信息
可创建文件touch /etc/nologin使得用户下次无法登陆系统
<2>用户分类(CentOS 7)
UID | 用户 | 功能 |
0 | 超级管理员 | 管理计算机的全部权限 |
1-999 | 系统用户 | 执行某些服务,不用做登陆系统 |
1000-60000 | 普通用户 | 管理计算机的部分权限 |
<3>用户创建
▲语法格式
useradd [options] LOGIN
▲常用选项
1 | -u USERNAME:指定用户UID |
2 | -g GROUPNAME:指定用户主组(基本组),也可以是GID |
3 | -G GROUPNAME..:指定用户的附加组 |
4 | -c "COMMENT":指明用户的注释信息 |
5 | -d HOMEDIR:指明用户的家目录 |
6 | -s SHELL:指定用户的登陆shell |
7 | -r:添加系统用户 |
8 | -o: 忽略UID添加用户 |
注:系统用户默认无家目录和邮箱,登陆系统显示无环境变量。如果要让其拥有环境变量,可创建其家目录并复制/etc/skel/下文件到其家目录中。如果要求其不可登陆,可设置其shell为/bin/nologin
用户邮箱地址:/etc/spool/mail/USERNAME
[root@centos7/home/rr]#cp /etc/skel/.[^.]* /home/rr/ -rv
[root@centos7 ~]# useradd conver -r [root@centos7 ~]# su conver bash-4.2$ su Password: [root@centos7 ~]# cd /home/ [root@centos7 home]# mkdir conver [root@centos7 home]# cd conver/ [root@centos7 conver]# cp /etc/skel/.[^.]* ./ -r [root@centos7 conver]# su conver [conver@centos7 ~]$ su root Password: [root@centos7 conver]# [root@centos7 conver]# usermod conver -s /bin/nologin [root@centos7 conver]# su conver su: failed to execute /bin/nologin: No such file or directory
<4>用户属性修改
▲语法格式
usermod [options] LOGIN
▲常用选项(-u、-g、-s、-c与useradd相似,此处不予列出)
1 | -aG GROUPNAME:为用户添加附加组 |
2 | -md HOMEDIR:移动家目录 |
3 | -l NEWNAME:指定新名字 |
4 | -L,--lock:锁定用户 |
5 | -U,--ulock:解锁用户 |
6 | -e YYYY-MM-DD USERNAME:指定用户密码过期日期 |
7 | -f INACTIVE USERNAME: 设定非活动期限 |
[root@centos7 ~]# getent shadow user user:$6$1pOy1/nZEpZrwMwa$IBG2aqz0RvHyWuIcOJ62cPWP9eRJga4CHFrbu/MQTHdlWNmw9TTfq673vDdq3XgV2TSNO.l88vjhDumU8aSoE0:17014:0:99999:7::: [root@centos7 ~]# usermod -L user [root@centos7 ~]# getent shadow user user:!$6$1pOy1/nZEpZrwMwa$IBG2aqz0RvHyWuIcOJ62cPWP9eRJga4CHFrbu/MQTHdlWNmw9TTfq673vDdq3XgV2TSNO.l88vjhDumU8aSoE0:17014:0:99999:7:::
注:也可使用chsh -s SHELLTYPE USERNME指定用户shell类型
[root@centos7 ~]# chsh -s /bin/bash user Changing shell for user. Shell changed.
*用户配置文件属性修改,用户的默认属性保存在2个文件中
文件 | 内容 |
/etc/login.defs | 用户范围,密码期限设、加密算法等 |
/etc/default/useradd | 用户登陆默认shell、默认家目录等 |
useradd -D:查看/etc/default/useradd信息
useradd -D -s SHELLTYPE:修改默认shell
useradd -D -d HOMEDIR:修改默认家目录
[root@centos7 ~]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/csh SKEL=/etc/skel CREATE_MAIL_SPOOL=yes [root@centos7 ~]# useradd -D -s /bin/bash [root@centos7 ~]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
注:可使用authconfig --passalgo=ALGORITHM --update更改系统的加密机制
[root@centos7 ~]# getent shadow user user:$6$FTA6U0nc$BGoO2MC7ziXOG871bsp.jbbg25lEtcF0BWt8sRNY66n.P9npsvvIOp1L1Vx9poVuWdPJaR.7/0RyvZxmwn8EB0:17015:0:99999:7::: [root@centos7 ~]# authconfig --passalgo=sha256 --update [root@centos7 ~]# passwd user Changing password for user user. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@centos7 ~]# getent shadow user user:$5$3sxrgtHo$fD3Kiyus2N2NOQMijCdV6f6kII1bWbis4evht71ISOA:17015:0:99999:7:::
<5>用户删除
语法格式
userdel [options] LOGIN
-r USERNAME:删除用户及其家目录 |
<6>用户查看
▲语法格式
id [OPTION]... [USER]
▲常用选项
1 | -u USERNAME:显示用户的UID |
2 | -g USERNAME:显示用户的GID |
3 | -G USERNAME:显示用户所属组的所有ID |
*也可以使用finger命令查看
[root@centos7 ~]# id -u user 1000 [root@centos7 ~]# is -G user bash: is: command not found... [root@centos7 ~]# id -u user 1000 [root@centos7 ~]# id -G user 1000 4325 [root@centos7 ~]# id user uid=1000(user) gid=1000(user) groups=1000(user),4325(admins) [root@centos7 ~]# finger user Login: user Name: user Directory: /home/user Shell: /bin/bash On since Thu Jul 21 14:55 (CST) on :0 from :0 (messages off) On since Fri Jul 29 10:32 (CST) on pts/0 from :0 20 hours 26 minutes idle Last login Mon Aug 1 17:56 (CST) on pts/2 Mail last read Mon Aug 1 14:02 2016 (CST)
3、组管理
<1>创建组
▲语法格式
groupadd [options] group
▲常用选项
-g GID GROUPNAME:创建指定组号的组
<2>删除组
▲语法格式
groupdel group
<3>改变组属性
▲语法格式
groupmod [options] GROUP
▲常用选项
1 | -n NEW_GROUPNAME:修改组名 |
2 | -g GID GROUPNAME:新的组ID |
3 | -A USERNAME.. GROUPNAME:设置组的的管理权限列表 |
[root@centos7 zhao]# groupadd team [root@centos7 zhao]# getent group team team:x:4451: [root@centos7 zhao]# groupmod -g 4452 team [root@centos7 zhao]# getent group team team:x:4452: [root@centos7 zhao]# groupmod -n team1 team [root@centos7 zhao]# getent group team1 team1:x:4452:
<4>更改和查看组成员
语法格式
groupmems [options] [-g GROUPNAME]
命令功能:查看组内成员
1 | -a,--add USERNAME:指定用户加入组 |
2 | -g,--group groupname:更改为指定GID |
2 | -d,--delete USERNAME:从组中删除用户 |
3 | -l,--list:显示组成员列表 |
[root@centos7 ~]# groupmems -a conver -g user [root@centos7 ~]# groupadd -g 4444 content [root@centos7 ~]# getent group content content:x:4444: [root@centos7 ~]# groupmod -n context -g 4445 content [root@centos7 ~]# groupmems -a aa -g context [root@centos7 ~]# groupmems -l -g context aa [root@centos7 ~]# groupmems -d aa -g context [root@centos7 ~]# groupmems -l -g context [root@centos7 ~]#
语法格式
groups [OPTION]... [USERNAME]..
命令功能:查看成员所属组
[root@centos7 ~]# getent group admins admins:x:4325:natasha,harry,user [root@centos7 ~]# groups user user : user admins [root@centos7 ~]#
<5>组切换
语法格式
newgrp [GROUPNAME]
命令功能:切换当前用户的属组,只对当前shell有效
[user@centos7 ~]$ newgrp aa Password: [user@centos7 ~]$ touch 1 [user@centos7 ~]$ ll 1 -rw-r--r--. 1 user aa 0 Aug 2 21:12 1
<6>组密码管理
● 更改用户密码:passwd GROOUPNAM
可执行echo USERNAME:PASSWORD | chpasswd 更换用户密码
● gpasswd [OPTION] GROUP
1 | -a USERNAME:将用户添加至组中 |
2 | -d USERNAME:将用户从组中删除 |
3 | -A USER... :设置管理组的用户列表 |
4、用户切换
su USERNAME | su - USERNAME | |
切换类型 | 非登陆式切换 | 登陆式切换 |
是否重读配置文件 | 否 | 是 |
是否改变当前目录 | 否 | 是 |
注:root su至其他用户无须密码,非root用户切换时需要密码
只执行su表示切换root用户
强化练习
1、创建testuser uid:1234 主组:bin 辅助组:root,ftp shell:/bin/csh home:/testdir/testuser
[root@centos7 ~]# useradd testuser -u 1234 -g bin -G root,ftp -s /bin/csh -d /testdir/testuser [root@centos7 ~]# getent passwd testuser testuser:x:1234:1::/testdir/testuser:/bin/csh [root@centos7 ~]# groups testuser testuser : bin root ftp [root@centos7 ~]# id testuser uid=1234(testuser) gid=1(bin) groups=1(bin),0(root),50(ftp)
2、修改testuser uid:4321 主组:root 辅助组:nobody loginname:test home:/home/test
要求:家数据迁移
[root@centos7 ~]# usermod -u 4321 -g root -G nobody -l test -md /home/test testuser [root@centos7 ~]# getent passwd test test:x:4321:0::/home/test:/bin/csh [root@centos7 ~]# groups test test : root nobody [root@centos7 ~]# id test uid=4321(test) gid=0(root) groups=0(root),99(nobody)
3、批量创建帐号:user1...user10
要求:passwd:usernamepass uid:3001-3010 home:/testdir/username shell:/bin/csh
注意家目录相关配置,使用户正常登录
<1>创建俩个文件 [root@centos7 ~]# cat user 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 user10:x:3010:3010::/testdir/user10:/bin/csh [root@centos7 ~]# cat passwd user1:user1pass user2:user2pass user3:user3pass user4:user4pass user5:user5pass user6:user6pass user7:user7pass user8:user8pass user9:user9pass user10:user10pass <2>读取这俩个文件 [root@centos7 ~]# newusers user [root@centos7 ~]# cat passwd | chpasswd <3>查看用户是否添加 [root@centos7 ~]# tail /etc/passwd test:x:4321:0::/home/test:/bin/csh 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 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 user10:x:3010:3010::/testdir/user10:/bin/csh <4>复制家目录文件 [root@centos7 ~]# cp -r /etc/skel/.[^.]* /testdir/user1 [root@centos7 ~]# ls -a /testdir/user1 . .. .bash_logout .bash_profile .bashrc .mozilla 注:因为用户的shell是csh,此步骤省略也可正常登陆 <5>用户登陆 [user1@centos7 ~]$ ls
4、创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"
[root@centos7 ~]# useradd -G bin,root -s /bin/csh -c "Gentoo Distribution" gentoo [root@centos7 ~]# getent passwd gentoo gentoo:x:4324:4324:Gentoo Distribution:/home/gentoo:/bin/csh
5、创建下面的用户、组和组成员关系
名字为admins的组
用户natasha,使用admins作为附属组
用户harry,也使用admins作为附属组
用户sarah,不可交互登录系统,且不是admins 的成员
natasha,harry,sarah密码都是centos
[root@centos7 ~]# groupadd admins [root@centos7 ~]# useradd natasha -G admins [root@centos7 ~]# useradd harry -G admins [root@centos7 ~]# useradd sarah -s /bin/nologin [root@centos7 ~]# id natasha uid=4325(natasha) gid=4326(natasha) groups=4326(natasha),4325(admins) [root@centos7 ~]# id harry uid=4326(harry) gid=4327(harry) groups=4327(harry),4325(admins) [root@centos7 ~]# getent passwd sarah sarah:x:4327:4328::/home/sarah:/bin/nologin [root@centos7 ~]# echo centos | passwd --stdin natasha Changing password for user natasha. passwd: all authentication tokens updated successfully. [root@centos7 ~]# echo centos | passwd --stdin harry Changing password for user harry. passwd: all authentication tokens updated successfully. [root@centos7 ~]# echo centos | passwd --stdin sarah Changing password for user sarah. passwd: all authentication tokens updated successfully.