Linux用户与组管理

TOC

用户分为以下几类账号:

用户UID
定义用户的种类
0 超级管理员,最高权限,有着极强的权限能力
1 — 200 系统用户,用来运行系统自带的进程,默认已创建
200 — 999 系统用户,用来运行用户安装的程序,该用户无需登录
1000+ 普通用户,可以正常登录系统的用户,权限比较小,能进行的操作有限

一、用户管理

创建用户:useradd

语法:useradd【选项】【用户名】
-u:指定(修改)用户的UID号
-d:指定(修改)用户的宿主目录位置
-m:创建用户时自动建立用户主目录
-e:指定(修改)用户的账户失效时间,可以用YYYY-MM-DD的日期格式
-s:指定用户的登录shell
-l:更改用户的账户的登录名称
新建用户账号时,从模板目录etc/skel目录中复制而来
【示例1】创建一个用户jack并创建宿主目录

useradd -m jack

【示例2】创建一个用户test指定加入组jack,并加入到附加组root

useradd -m -g jack -G root test

设置/更改用户口令:passwd

语法:passwd【选项】【用户名】
-d:清空指定用户密码,仅使用用户名即可登陆
-f:强迫用户下次登录时修改口令
-l:锁定用户账户
-S:查看用户账户的状态(是否被锁定)
-u:解锁用户账户
【示例1】设置用户jack的密码

passwd jack

修改用户账号:usermod

语法:usermod【选项】【用户名】
-u:修改UID
-d:修改宿主目录
-e:修改失效时间
-s:指定用户的登录shell
-l:更改登录名(Login Name)
-L:锁定账户
-U:解锁账户

删除用户账号:userdel

语法:userdel【选项】【用户账号】
-r:同时删除宿主目录
【示例1】删除用户jack并删除宿主目录

userdel -r jack

新晋命令:adduser

属于高级命令(Perl/Python 脚本,调用 useradd 等低级命令实现)。
语法:adduser【选项】【用户账号】
【示例1】添加一个用户

$ adduser jack
Adding user `jack' ...
Adding new group `jack' (1001) ...
Adding new user `jack' (1001) with group `jack' ...
Creating home directory `/home/jack' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: ******
Retype new UNIX password: ******
Full Name []: 
Room Number []:
Work Phone []:
Home Phone []:
Other []:

二、组管理

创建组账号:groupadd

语法:groupadd 【组名】
-g:添加指定组账号

添加用户:gpasswd

语法:gpasswd【选项】【用户名】
-a:添加一个用户
-d:删除一个用户
-M:定义组员,可批量定义,但会删除原组员

删除组账号:groupdel

语法:groupdel【组账号名】
注意:groupdel需删除组内成员后才能删除组

三、用户和组记录文件

与用户账号有关的系统文件

Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
记录系统所有用户的文件:/etc/passwd

cat /etc/passwd
--------------------------------------------------------
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
admin:x:1000:1000:admin:/home/admin:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

从上面的格式来看以:为分隔符,分为7列,以root用户为例,如下

head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
第一列 第二列 第三列 第四 列 第五列 第六列 第七列
root:用户名称 x:密码占位符 0:用户UID 0:组GID root:注释信息 /root:用户家目录 /bin/bash:登录shell

拥有账户文件

/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。
记录系统所有用户密码以及创建和到期时间:/etc/shadow
跟passwd文件一样,以:为分隔符,分为7列,也以root用户为例,如下

head -20 /etc/shadow
root:*::0:99999:7:::
daemon:*::0:0::::
bin:*::0:0::::
sys:*::0:0::::
adm:*::0:0::::
uucp:*::0:0::::
nuucp:*::0:0::::
auth:*::0:0::::
cron:*::0:0::::
listen:*::0:0::::
lp:*::0:0::::
jack:EkdiSECLWPdSa:9740:0:0::::

对应信息:

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

第一列:用户名称
第二列:密码为长串字符串,!!为无密码
第三列:最近一次变更密码,从1970年开始,过了多少天
第四列:密码最少使用天数,0表示无限制
第五列:密码最长使用天数,99999表示不过期
第六列:密码过期后几天强制提示用户更改密码
第七列:账户失效时间,从1970年开始,可以用多少天,再这个日期前可以使用,到期失效

用户组的所有信息都存放在/etc/group文件中

root::0:root
bin::2:root,bin
sys::3:root,uucp
adm::4:root,adm
daemon::5:root,daemon
lp::7:root,lp
users::20:root,jack

对应信息:

组名:口令:组标识号:组内用户列表

第一列:用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
第二列:用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*
第三列:用户标识号类似,也是一个整数,被系统内部用来标识组。
第四列:属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。

利用pwunconv批量添加用户

1.编辑用户列表文件
每一列按照/etc/passwd密码文件的格式书写,要注意每个用户的用户名、UID、宿主目录都不可以相同

vim users.txt
--------------------------------------------
user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
user003::602:100:user:/home/user003:/bin/bash
user004::603:100:user:/home/user004:/bin/bash
user005::604:100:user:/home/user005:/bin/bash
user006::605:100:user:/home/user006:/bin/bash

2.执行newusers命令
从刚创建的用户文件users.txt中导入数据。

newusers < users.txt

3.执行pwunconv命令
/etc/shadow产生的shadow密码解码,然后回写到/etc/passwd中,并将/etc/shadow的shadow密码栏删掉。了方便下一步的密码转换工作,即先取消 shadow password 功能。

pwunconv

4.为用户们设置密码
编辑对应每个用户的密码文件。

vim passwd.txt
------------------
user001:123456
user002:123456
user003:123456
user004:123456
user005:123456
user006:123456

5.执行chpasswd命令
创建用户密码chpasswd会将经过passwd命令编码过的密码写入/etc/passwd的密码栏。

chpasswd < passwd.txt

6.执行pwconv命令
执行命令pwconv将密码编码为shadow password,并将结果写入/etc/shadow

pwconv

sudo提权配置

你可以根据实际需要在/etc/sudoers文件中按照下面四行格式中任意一条进行添加:

vim /etc/sudoers
-------------------------------------------
test   ALL=(ALL)   ALL
%test   ALL=(ALL)    ALL
test    ALL=(ALL)   NOPASSWD: ALL
%test   ALL=(ALL)    NOPASSWD: ALL

第一行:允许用户test执行sudo命令(需要输入密码)
第二行:允许用户组test里面的用户执行sudo命令(需要输入密码)
第三行:允许用户test执行sudo命令,并且在执行的时候不输入密码
第四行:允许用户组test里面的用户执行sudo命令,并且在执行的时候不输入密码

用户和组一些查询命令

id:查询用户账号的身份标识
groups:查询用户账号所属的组
finger:查询用户账号的登录属性
users:查询当前登录账号
w:查询当前主机的用户登录情况
who:查询当前主机登录用户
whoami:查询当前登录账号