相关命令
getent
用来察看系统的数据库中的相关记录,系统数据库包括:ahosts、ahostsv4、ahostsv6、aliases、ethers、group、gshadow、hosts、initgroups、netgroup、networks、passwd、protocols、rpc、services、shadow
getent 通过 key 查询整条数据,当然,一条数据并非只能对应一个 key,例如 passwd,一条数据的 key 可以是用户名, 也可以是 UID
1 | getent database [key ...] |
1 | # 查询passwd |
vipw \ vigr \ pwck \ grpck
尽量不要直接修改/etc/passwd
、/etc/group
、/etc/shadow
、/etc/gshadow
这四个文件
vipw
可以用来编辑/etc/passwd
,vigr
可以用来编辑/etc/group
,它俩都有语法检查功能
pwck
用来验证/etc/passwd
和/etc/shadow
的内容和格式的完整性,grpck
用于验证组文件的完整性
虽然用这四个命令会比直接使用 vim 修改这四个文件更安全,但是也不推荐使用,了解即可
推荐使用:useradd、groupadd、chage 等命令,当然本质还是修改这四个文件
useradd
用户创建,useradd
等于 adduser
1 | useradd [options] LOGIN |
1 | -u, --uid UID # 指定uid, 不过不加-o参数, 指定的uid必须是唯一非负整数 |
创建用户相关文件
1 | /etc/default/useradd |
useradd 命令默认值设置在 /etc/default/useradd
1 | # useradd defaults file |
/etc/skel/
是模板目录,骨架目录。每新建一个用户的家目录,就会把/etc/skel/
下的文件拷贝一份到家目录下。
1 | [root@centos7 skel]# ls -lia /etc/skel/ |
/etc/login.defs
配合 /etc/passwd
和 /etc/shadow
来对用户进行一些限制 但是优先级低于 /etc/passwd
和 /etc/shadow
如果有冲突的地方,系统会以 /etc/passwd
和 /etc/shadow
为准
1 | [root@centos7 skel]# egrep -v '^[ ]*$|^#' /etc/login.defs |
newusers
批量创建用户
1 | newusers passwd 用户文件 |
用户文件:指定包含用户信息的文本文件,文件格式要与 /etc/passwd
相同
chpasswd
批量修改用户密码
1 | echo username:passwd | chpasswd |
生成密码:
CentOS 6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# grub-crypt 是centos6中的命令, 可以对口令进行加密, 默认加密方式是 sha-512
[root@centos6 ~]# grub-crypt --help
Usage: grub-crypt [OPTION]...
Encrypt a password.
-h, --help Print this message and exit
-v, --version Print the version information and exit
--md5 Use MD5 to encrypt the password
--sha-256 Use SHA-256 to encrypt the password
--sha-512 Use SHA-512 to encrypt the password (default)
Report bugs to <bug-grub@gnu.org>.
EOF
[root@centos6 ~]# grub-crypt
Password:
Retype password:
$6$O4ufCj1vTKW/7Ko7$p9rV3m0dsEsr0ebCyOVN.togh1fVhQCCDBsoc.RkelfWnRrIm3W5vVPuB86oOKo1Yei0QKxO2MRMoX2qzHV7M1
[root@centos6 ~]# useradd -p '$6$O4ufCj1vTKW/7Ko7$p9rV3m0dsEsr0ebCyOVN.togh1fVhQCCDBsoc.RkelfWnRrIm3W5vVPuB86oOKo1Yei0QKxO2MRMoX2qzHV7M1' test
[root@centos6 ~]# getent shadow test
test:$6$O4ufCj1vTKW/7Ko7$p9rV3m0dsEsr0ebCyOVN.togh1fVhQCCDBsoc.RkelfWnRrIm3W5vVPuB86oOKo1Yei0QKxO2MRMoX2qzHV7M1:18475:0:99999:7:::CentOS 7
1
2
3
4
5# CentOS 7中没有直接命令能加密sha-512口令, 可以使用python
[root@centos7 ~]#python -c 'import
crypt,getpass;pw="magedu";print(crypt.crypt(pw))'
$6$pt0SFMf6YqKea3mh$.7Hkslg17uI.Wu7BcMJStVVtkzrwktXrOC8DxcMFC4JO1igrqR7VAi87H5PH
OuLTUEjl7eJqKUhMT1e9ixojn1CentOS 8
1
2
3
4
5
6
7
8# -6 表示sha-512加密方式, CentOS7中只有-1(md5)加密方式
[root@centos8 ~]# whatis passwd
openssl-passwd (1ssl) - compute password hashes
passwd (1) - update user's authentication tokens
passwd (5) - password file
[root@centos8 ~]# man openssl-passwd
[root@centos8 ~]# openssl passwd -6 123456
$6$vQQo/2Ie/NqmeTqp$o6kCsDtZwNtW7rLh/LEk8yA26sYW4Kmja7uk/pLp..cNe77btZf3tRxeqtSwgoGKzc5GgXJT9NIpXNShQ9L7r0Ubuntu
1
2
3
4
5
6
7
8
9
10[root@ubuntu1804 ~]#echo wang:centos |chpasswd
[root@ubuntu1804 ~]#passwd wang <<EOF
> centos
> centos
> EOF
Enter new UNIX password: Retype new UNIX password: passwd: password updated
successfully
[root@ubuntu1804 ~]#echo -e 'magedu\nmagedu' | passwd wang
Enter new UNIX password: Retype new UNIX password: passwd: password updated
successfully
usermod
修改用户属性,不过用户一旦创建完了,很少会再修改,所以这个命令几乎不用
1 | usermod [OPTION] login |
userdel
删除用户
1 | userdel [OPTIONS]... Login |
id
查看用户相关 ID 信息
1 | id [OPTION]... [USER] |
su
su:switch user,切换用户
两种切换的方式:
- su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
- su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
注意:su 切换新用户后,使用 exit 退回至旧的用户,而不要再用 su 切换至旧用户,否则会生成很多的 bash 子进程,环境可能会混乱
passwd
修改用户密码
1 | passwd [OPTIONS] UserName |
1 | -d:删除指定用户密码 |
chage
修改用户密码策略
1 | chage [OPTION]... LOGIN |
1 | -d LAST_DAY #更改密码的时间 |
其他命令
chfn
指定个人信息,这个命令修改的是/etc/passwd 的第 5 个字段chsh
指定 shell,相当于 usermod -sflnger
可以查看用户个人信息
这几个命令用的不多,了解即可,flnger 命令在 CentOS8 中已经没有了
groupadd
创建组,groupadd
等于 addgroup
1 | groupadd [OPTIONS]... group_name |
- -g GID : 指明 GID
- -r : 创建系统组, CentOS 6 之前: ID<500,CentOS 7 以后: ID<1000
范例: groupadd -g 48 -r apache
groupmod
修改组
groupmod 修改组的属性, 用的不多
1 | groupmod [OPTIONS]... group |
- -n group_name : 新名字
- -g GID : 新 GID
groupdel
删除组
1 | groupdel [options] GROUP |
只有当组下没有用户后, 才能删除成功
gpasswd
gpasswd 命令,可以更改组密码,也可以添加删除附加组成员
1 | gpasswd [OPTIONS] GROUP |
1 | -a user # 将user添加到指定组中 |
newgrp
临时切换主组,把用户的主组临时切换到附加组
这个命令用的不多,了解一下就行
groupmems
更改和查看组成员,管理附加组的成员关系(只有 root 用户可以执行这个命令)
1 | groupmems [options] [action] |
示例:
1 | [root@centos7 ~]# getent group lujinkai |
groups
查看用户所属组的列表
1 | # test用户所属的组有两个 test 和 lujinkai, test是主组 lujinkai是附加组 |
练习
1.创建用户 gentoo,附加组为 bin 和 root,默认 shell 为/bin/csh,注释信息为”Gentoo Distribution”
1 | [root@centos7 ~]# useradd gentoo -G bin,root -s /bin/csh -c "Gentoo Distribution" |
2.创建下面的用户、组和组成员关系:
名字为 webs 的组
用户 nginx,使用 webs 作为附加组
用户 varnish,使用 webs 作为附加组
用户 mysql,不可交互登录系统,且不是 webs 的成员,nginx,varnish,mysql 密码都是 magedu