详解 Linux 用户与用户组关系及 useradd 等用户、用户组命令详解

文章
林里克斯

在 Linux 系统里面,用户信息,用户组信息,用户账号,用户密码,用户组密码等都是放在不同配置文件当中。本文就带你熟悉这些配置文件。

详解 Linux 用户与用户组关系及 useradd 等用户、用户组命令详解


实验平台:CentOS 7.7.1908



一、存放文件介绍


1./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
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
zabbix:x:997:995:Zabbix Monitoring System:/usr/local/zabbix-agent/:/sbin/nologin
mysql:x:1001:1001::/home/mysql:/sbin/nologin
nginx:x:1002:1002:Nginx Users:/home/nginx:/sbin/nologin
#虽是 passwd 文件,但是这里面没有存放用户的任何密码信息。一行代表一个用户,各字段间用 ":"分割

/etc/passwd 内容详解

nginx:x:1002:1002::/home/nginx:/sbin/nologin
nginx   #用户账号
x       #用户密码,由于不保存密码信息,所以使用 x 占位
1002    #用户ID,使用 -u 指定
1002    #用户组ID,使用 -g 指定
Nginx Users #用户信息,使用 -c 指定
/home/nginx #用户家目录,使用 -d 指定
/sbin/nologin   #用户所使用的 shell ,使用 -s 指定,nologin 代表不允许登录系统。
可配置选项:
/bin/true 允许登录
/bin/sh
/bin/bash
/bin/flase      #false 什么也不做只是返回一个错误状态,然后立即退出
/sbin/nologin   #nologin 会礼貌的向用户显示一条信息,并拒绝用户登录

2./etc/shadow 用户密码存放文件

$ cat /etc/shadow
root:$6$hm7GL3Lh$Vsav5f0671/4bLoItibzv7Dpj7gj6L5LOOWm4VrB1v4Ab.Kmeg7qu4YN/0areWRvEaLZaMfCC5.4ezZ9krlZj1:18494:0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
sync:*:18353:0:99999:7:::
shutdown:*:18353:0:99999:7:::
halt:*:18353:0:99999:7:::
mail:*:18353:0:99999:7:::
operator:*:18353:0:99999:7:::
games:*:18353:0:99999:7:::
ftp:*:18353:0:99999:7:::
nobody:*:18353:0:99999:7:::
systemd-network:!!:18373::::::
dbus:!!:18373::::::
polkitd:!!:18373::::::
sshd:!!:18373::::::
postfix:!!:18373::::::
chrony:!!:18373::::::
ntp:!!:18489::::::
zabbix:!!:18489::::::
mysql:!!:18490:0:99999:7:::
nginx:!!:18495:0:99999:7:::
#全使用 MD5 加密算法加密,只允许 root 账号读取。

/etc/shadow 内容详解

root:$6$hm7GL3Lh$Vsav5f0671/4bLoItibzv7Dpj7gj6L5LOOWm4VrB1v4Ab.Kmeg7qu4YN/0areWRvEaLZaMfCC5.4ezZ9krlZj1:18494:0:99999:7:::
root    #用户名
$6$hm7GL3Lh$Vsav5f0671/4bLoItibzv7Dpj7gj6L5LOOWm4VrB1v4Ab.Kmeg7qu4YN/0areWRvEaLZaMfCC5.4ezZ9krlZj1  #加密后的密码
18494   #密码最后一次修改日期
0       #两次密码的修改时间间隔
99999   #密码有效期
7       #密码修改到期到的警告天数
密码过期之后的宽限天数:账号失效时间:保留

3./etc/group 用户组信息存放文件

$ cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:998:
ssh_keys:x:997:
sshd:x:74:
postdrop:x:90:
postfix:x:89:
chrony:x:996:
ntp:x:38:
zabbix:x:995:
mysql:x:1001:mysql
nginx:x:1002:nginx
cgred:x:994:
docker:x:993:
screen:x:84:
#和 /etc/passwd 文件一致,没有存放用户组密码信息

/etc/group 内容详解

nginx:x:1002:
nginx   #用户组名称
x       #用户组密码,由于不保存密码信息,所以使用 x 占位
1002    #用户组 ID 号
nginx   #该用户组的用户成员列表,各用户名间用逗号分隔

4./etc/gshadow 用户密码存放文件,与 /etc/shadow 一致


二、用法示例


1.useradd 命令详解

useradd -h
  -c    #指定注释
  -d    #指定家目录
  -D    #打印或更改默认用户添加配置
  -e    #指定账户过期的日期。日期格式为 MM/DD/YY; eg: useradd -e 2020-10-14 user
  -f    #指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1
  -g    #指定用户组 id
  -G    #指定用户所属的附加群组
  -h    #打印 help 信息
  -m    #若主目录不存在,则创建它; 指定 -r -m 可以为系统用户创建家目录
  -M    #不为用户创建家目录
  -N    #不创建与用户同名的用户组
  -o    #允许创建具有重复(非唯一)UID的用户; eg:useradd -u 0 -o user
  -p    #指定登陆密码
  -r    #创建一个用户 ID 小于 500 的系统账户,默认不创建对应的主目录
  -s    #指定用户登录时使用的 shell,默认为 /bin/bash
  -u    #指定用户 ID
  -U    #创建与用户同名的组

1.1 创建一个 zabbix 用户

$ useradd -g zabbix -G zabbix -d /usr/local/zabbix-agent/ -s /sbin/nologin -c "Zabbix Monitoring System" -p zabbix123 zabbix
#需要先用 groupadd zabbix 创建用户组

1.2 查看 useradd 创建用户的默认参数

/etc/default/useradd
#文件存放路径

$ cat /etc/default/useradd
# useradd defaults file
GROUP=100
#默认组 ID 为100,在 CentOS 中不生效,CentOS 添加用户时会自动建立和用户名相同的组作为此用户的初始组
HOME=/home
#家目录
INACTIVE=-1
#密码过期后的宽限天数,默认为 -1 代表永远不失效
EXPIRE=
#密码失效时间
SHELL=/bin/bash
#指定用户登录 shell
SKEL=/etc/skel
#在创建一个新用户后,你会发现,该用户主目录并不是空目录,而是有 .bash_profile、.bashrc 等文件,这些文件都是从 /etc/skel 目录中自动复制过来的。因此,更改 /etc/skel 目录下的内容就可以改变新建用户默认主目录中的配置文件信息。
CREATE_MAIL_SPOOL=yes
#指的是给新建用户建立邮箱,默认是创建。也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同

也可以使用 useradd -D 来打印

$ useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

2.删除用户命令 userdel 详解

$ userdel -h
  -f    #强制删除
  -h    #打印帮助信息
  -r    #删除主目录和邮件信息

2.1 删除 zabbix 用户

$ userdel -r zabbix

3.修改用户命令 usermod 详解

$ usermod -h
  -c    #修改注释
  -d    #修改家目录
  -e    #修改账户过期的日期
  -f    #修改密码过期后多少天即关闭该账号
  -g    #修改用户组 id
  -G    #修改用户所属的附加群组
  -h    #打印 help 信息
  -l    #修改用户帐号名称
  -L    #锁定用户密码,使密码无效
  -m    #将主目录的内容移动到新位置(仅与-d一起使用)
  -o    #允许创建具有重复(非唯一)UID的用户
  -s    #修改用户登录时使用的 shell
  -u    #修改用户 ID
  -U    #解除密码锁定

3.1 修改 zabbixzabbixs

$ usermod -l zabbix zabbixs

4.passwd 命令详解

$ passwd --help

  -k, --keep-tokens       #保留未过期的密码,更新只能在过期之后
  -d, --delete            #删除指定用户的密码,(仅 root 用户可用)
  -l, --lock              #锁定指定用户,(仅 root 用户可用)
  -u, --unlock            #解锁指定用户,(仅 root 用户可用))
  -e, --expire            #指定用户密码过期,(仅 root 用户可用)
  -f, --force             #强制指定用户下次登录时必须修改密码
  -x, --maximum=DAYS      #指定用户密码最长可用时间,(仅 root 用户可用)
  -n, --minimum=DAYS      #指定用户密码最小可用时间,(仅 root 用户可用)
  -w, --warning=DAYS      #密码到期前警告用户的天数,(仅 root 用户可用)
  -i, --inactive=DAYS     #密码过期后帐号被禁用的天数,(仅 root 用户可用)
  -S, --status            #报告指定帐户的密码状态信息,(仅 root 用户可用)
  --stdin                 #从指定的 stdin 中读取新的密码,(仅 root 用户可用)

Help options:
  -?, --help              #打印帮助信息
  --usage                 #打印常用的参数

5.gpasswd 命令详解

$ gpasswd -h

Options:
  -a, --add USER                #将用户添加到一个组(gpasswd -a user1 user 将 user1 添加至 user 组)
  -d, --delete USER             #将用户从一个组中删除(gpasswd -a user user1 将 user1 从 user 组)删除
  -h, --help                    #打印帮助信息
  -Q, --root CHROOT_DIR         #从 chroot 目录进入
  -r, --delete-password         #删除一个组的密码
  -R, --restrict                #限制成员对组的访问
  -M, --members USER,...        #设置群组成员列表
  -A, --administrators ADMIN,...#设置组的管理员列表
#除-A和-M选项外,其他选项不能组合

5.1 添加组员

$ cat /etc/group
···
jarbo:x:1000:
nginx:x:996:

$ sudo gpasswd -a jarbo nginx
Adding user jarbo to group nginx
#将 jarbo 用户加入到 nginx 组中

$ cat /etc/group
···
jarbo:x:1000:
nginx:x:996:jarbo

5.2 删除组员

$ cat /etc/group
···
jarbo:x:1000:
nginx:x:996:jarbo

$ sudo gpasswd -d jarbo nginx
Removing user jarbo from group nginx

$ cat /etc/group
···
jarbo:x:1000:
nginx:x:996:

Over~

版权协议须知!

本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意

1419 0 2020-10-06


分享:
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif
博主卡片
林里克斯 博主大人
一个致力于Linux的运维平台
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。

现在时间 2024-12-28

今日天气
站点统计
  • 文章总数:241篇
  • 分类总数:29个
  • 评论总数:12条
  • 本站总访问量 353816 次

@奥奥

@Wong arrhenius 牛比

@MakerFace 厉害了!