Linux用户与组
Linux系统的用户账户:
超级用户root(0)
程序用户(1~499)
普通用户(500~65535)
/etc/passwd 存放用户的账号等相关信息(密码除外)
/etc/shadow 保存用户的密码
/etc/group:组及其属性信息
/etc/gshadow:组密码及其相关属性用户&用户组配置文件介绍
用户的配置文件 /etc/passwd
/etc/passwd文件中每行定义一个用户账号,有多少行就表示多少个账号,在一行中可以清晰的看出,各内容之间又通过”:”号划分了7个字段,这7个字段分别定义了账号的不同属性,passwd文件实际内容如下:
字段1:帐号名,这是用户登陆时使用的账户名称,在系统中是唯一的,不能重名
字段2:密码占位符x;早期的unix系统中,该字段是存放账户和密码的,由于安全原因,后来把这个密码字段内容移到/etc/shadow中了。
这里可以看到一个字母x,表示该用户的密码是/etc/shadow文件中保护的。
字段3:UID;范围是0-65535
字段4:GID;范围是0-65535;当添加用户时,默认情况下会同时建立一个与用户同名且UID和GID相同的组。
字段5:用户说明;这个字段是对这个账户的说明
字段6:宿主目录;用户登陆后首先进入的目录,一般与"/home/用户名"这样的目录
字段7:登录Shell 当前用户登陆后所使用的shell,在centos/rhel系统中,默认的shell是bash;
如果不希望用户登陆系统,可以通过usermod或者手动修改passwd设置,将该字段设置为/sbin/nologin 即可。
大多数内置系统账户都是/sbin/nologin,这表示禁止登陆系统。这是出于安全考虑的
登录shell和非登录shell的区别:
登录shell:登录shell是可以用户登录使用的,比如/bin/bash ,/bin/sh ,/bin/csh…一般Linux默认的用户shell都是bash ,也就是你可以登录进去写命令。
非登录shell:经典的/bin/nologin就是一个非登录shell,也就是说如果一个用户默认的是它,这个用户即使登录进Linux也无法使用Linux。
shell是用户和计算机交流的媒介,登录shell保证用户和计算机交流,非登录shell无法让计算机和用户交流。
关于用户的默认登录shell是在/etc/passwd文件中记录的。
非登录shell的用途,比如一个用Linux搭建的ftp服务器,并且创建了多个用户,那么就可以将这些用户默认shell改成nologin,这样一来,这些用户虽然是Linux上的用户却无法登录进Linux主机,只能进入ftp服务器,这样也保证了安全!
用户的密码文件 /etc/shadow

字段1:帐号名称
字段2:加密的密码(通常使用shad512加密),如果密码前存在!或!!则密码锁定。
字段3:最近更改密码的时间;从1970/1/1到上次修改密码的天数
字段4:禁止修改密码的天数;从1970/1/1开始,多少天之内不能修改密码,默认值为0
字段5:用户必须更改口令的天数;密码的最长有效天数,默认值为99999
字段6:警告更改密码的期限;密码过期之前警告天数,默认值为7;在用户密码过期前多少天提醒用户更改密码
字段7:不活动时间;密码过期之后账户宽限时间 3+5;在用户密码过期之后到禁用账户的天数
字段8:帐号失效时间,默认值为空;从1970/1/1日起,到用户被禁用的天数
字段9:保留字段(未使用),标志
用户组配置文件 /etc/group

字段1:组账户名称
字段2:密码占位符x;通常不需要设置该密码,由于安全原因,该密码被记在/etc/gshadow中,因此显示为'x'。这类似/etc/shadow。
字段3:组账户GID号,用户组ID
字段4:本组的成员用户列表;加入这个组的所有用户账号
组账号的密码信息 /etc/gshadow

字段1:组账号的名称
字段2:加密后的密码字符串,这个字段可以空的或者!;如果是空的或有!,表示没有密码
字段3:本组的管理员列表;这个字段也可为空;如果有多个用户组管理员,用,号分隔
字段4:本组的成员列表;加入这个组的所有用户账户;列表中多个用户通过","分隔
Linux用户管理
新增用户&删除用户
useradd
useradd 参数:
useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-m 顺带创建家目录]
> [-c 说明栏] [-d 家目录绝对路径] [-s 指定shell] 账号名称
-u :后面接的是UID,是一组数字,直接指定一个特定的UID给这个账号
-g :后面接的用户组,该用户组的GID会被放到/etc/passwd的第四个字段
-G :后面接的用户组则是该账号可以加入的 用户组
-M :强制,不要建立使用者家目录(系统账号默认值)
-m :强制,要建立使用者家目录(一般账号默认值)
-c :/etc/passwd的第五字段的说明内容,可以随便我们设置
-d :指定某个目录成为家目录,而不要使用默认值
-r :建立系统的账号,这个账号的UID会有限制(参考/tec/login.defs)
-s :后面接shell,若没有指定则默认是/bin/bash(一些早些的linux默认的shell是/bin/sh)
-e :后面接个日期,格式为【YYYY-MM-DD】亦即账号失效日期
-f :后面接shadow的第七字段选项,指定密码是否会失效,0为立刻失效-1为用不失效
useradd 示例:
#完全参考默认值创建名为vbird的用户
useradd vbird
#创建一个默认为BASH的shell,且拥有家目录的名为vbird1的用户
useradd -s /bin/bash -m vbird1
#创建名为vbird2的用户且设置用户在2024年7月29日过期
useradd -e 2024-7-29 vbird2
#创建名为vbird3的用户且指定UID为1005
useradd -u 1005 vbird3
#创建名为vbird4的用户且指定家目录和组
mkdir -p /user/vbird4 \\如已有此目录则忽视否则输入此行创建
groupadd admins \\如已有此用户组则忽视否则输入此行
useradd -d /user/vbird4 -G admins vbird4 \\注:多个用户组用{,}符号分开即可
#利用多参数创建用有家目录、shell、过期时间、自定义说明内容、指定admins用户组并且名为perfect的用户
useradd -m -d /home/perfect -s /bin/zsh -G developers -e 2024-12-31 -c "New User perfect" perfect
注意:
- 在执行 useradd 命令之前,确保你有足够的权限,通常需要 root 权限。
userdel
userdel 参数:
userdel [选项] 账户名
-r :删除用户的同时,删除用户的家目录和邮件池。
-f :强制删除用户账户,即使用户当前登录或有打开的进程(在某些情况很有用比如账户被错误地锁定)
-h :显示帮助信息并退出
userdel 示例:
#删除user1用户但保留家目录和邮件池
userdel user1
#删除user1且不保留家目录和邮件池
userdel -r user1
#强制删除user2且不保留家目录邮件池
userdel -r -f user2
注意:
- 在执行 userdel 命令之前,确保你有足够的权限,通常需要 root 权限。
用户管理
usermod
usermod 参数:
usermod [选项] 用户名
-l :更改用户账号名称
-L :锁定用户账户,阻止用户登录
-U :解锁用户账户,允许用户登录
-e :设置账户的过期日期,格式为【YYYY-MM-DD】
-f :设置在账户过期后多少天内,账户禁用。如设为-1,则账户过期后立即禁用
-g :更改用户的初始登录到组名
-G :更改用户的附加组列表,用逗号分隔多个组名
-s :更改用户登录的shell
-d :更改用户的主目录到自定义主目录
-m :与 -d 选项一起使用时,如果目录已经存在,则将旧目录的内容迁移到新的主目录
-c :更改用户的注释信息
-p :更改用户的账户密码。通常不推荐使用此选项,因为密码应该通过passwd来设置
-a :与 -G 选项一起使用时添加用户到指定附加组,而不是替换现有的附加组列表
usermod 示例:
#更改admin用户名为user
usermod -l user admin
#锁定user用户
usermod -L user
#解锁user用户
usermod -U user
#设置user用户过期时间为2024-7-21
usermod -e 2024-7-21 user
#更改user的主目录到/user/home
usermod -d /user/home -m user
#更改user用户的登录shell为zsh
yum install zsh -y \\适用于centos安装zsh如已安装则忽略否则输入此行
apt install zsh -y \\适用于ubuntu安装zsh如已安装则忽略否则输入此行
pacman -Sy zsh \\适用于manjaro安装zsh如已安装则忽略否则输入此行
usermod -s /bin/zsh user
#将用户user添加到group1和group2组但不会移除用户当前所属的其他组。
usermod -a -G group1,group2 username
#将用户user的注释改为 "New User Comment"(没有则设定)
usermod -c "New User Comment" user
#更改用户登录名为admin、指定主目录、更改登录shell为sh、注释信息"New Admin Comment"、admin的过期日期2024-7-22
usermod -l admin -d /home/admin -s /bin/sh -c "New User Comment" -e 2024-7-22 user
注意:
- 在执行 usermod 命令之前,确保你有足够的权限,通常需要 root 权限。
passwd
passwd 参数:
passwd [选项] [用户名]
-l :锁定用户账户,使其无法登录
-u :解锁用户账户,允许用户登录
-d :删除用户密码,使得用户无需密码即可登录(不推荐使用)
-e :强制用户在下次登录时更改密码
-S :显示用户账户的密码状态
-x :设置密码的最大存活期,即密码在多少天后必须更改。
-i :设置密码过期后多少天账户将被禁用。
-w :设置密码过期前多少天开始警告用户。
passwd 示例:
#更改当前用户的密码
passwd
#更改其它用户密码(username)
passwd username
#锁定用户username
passwd -l username
#解锁用户username
passwd -u username
#显示用户username状态
passwd -S username
#强制用户username下次登录更改密码
passwd -e username
#设置用户username最大活期30天
passwd -x 30 username
注意:
- linux passwd命令的加密形式很特殊不会显示你输入的任何字符
Linux用户组管理
删除组&新增组
groupadd
groupadd 参数:
groupadd [选项] 组名
-g GID:指定新组的GID(组ID)。如果未指定,系统会自动分配一个唯一的GID。如果指定的GID已存在,系统会报错,除非使用 -o 选项允许使用已存在的GID。
-o:允许使用已存在的GID创建新组。通常,GID应该是唯一的,但使用 -o 选项可以创建一个具有重复GID的组。
-r:创建一个系统组,其GID通常在系统保留的范围内(通常是小于1000的GID)。这些组通常用于系统服务和守护进程。
-f:如果指定的组名已存在,此选项会强制创建该组,但不会显示错误信息。如果组名已存在,通常会显示错误信息。
-K:允许覆盖默认的 /etc/login.defs 文件中的某些配置项,如GID的范围等。
-p GECOS:设置组的GECOS字段,这个字段通常用于存储组的描述信息。
groupadd 示例:
#创建一个GID为1002组,并且名为groups
groupadd -g 1002 groups
#创建一个具有特定GID(1001)的组,并允许使用已存在的GID,名为group
groupadd -g 1001 -o group
#创建一个名为sgroup系统组,其GID在系统保留范围内
groupadd -r sgroup
注意:
- 在执行 groupadd 命令之前,确保你有足够的权限,通常需要 root 权限。
groupdel
groupdel 参数:
groupdel 组名
groupdel 示例:
#删除groups组
groupdel groups
注意:
- 在执行 groupdel 命令之前,确保你有足够的权限,通常需要 root 权限。
管理组
gpasswd
gpasswd 参数:
gpasswd [选项] 组名
-a :用户名:将指定的用户添加到组中。
-d :用户名:从组中删除指定的用户。
-A :用户名,用户名,...:设置组的管理员列表,只有这些用户可以管理组成员。
-M :用户名,用户名,...:设置组的成员列表,这些用户是组的成员。
-r :移除组的密码,使得不需要密码即可加入该组。
-R :限制组,使得只有组的成员可以使用 newgrp 命令切换到该组。
-h :显示帮助信息。
-s :密码:为组设置密码。
gpasswd 示例:
#给组mygroup设置密码
gpasswd mygroup
#将用户username添加到组mygroup
gpasswd -a username mygroup
#从组mygroup中删除用户username
gpasswd -d username mygroup
#设置组mygroup的管理员为adminuser
gpasswd -A adminuser mygroup
#设置组mygroup的成员为user1和user2
gpasswd -M user1,user2 mygroup
#移除组mygroup的密码,使不需要密码即可加入组
gpasswd -r mygroup
#限制组mygroup使得只有组成员可以使用newgrp命令切换到该组
gpasswd -R mygroup
groups
groups 参数:
groups 组名
groups 示例:
#查看当前用户属组
groups
#查看指定用户username属组
groups username
用户配置文件
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 NachoMao
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果