1.用户账号有三种类别
超级,普通,程序
root,chen,bin
2.组账号
给用户之间建立联系,便于管理
3.UID和GID
用户的编码,用于区分用户,GID也是身份标记
用户账号属性
head -2 /etc/passwd
tail -2 /etc/passwd
passwd是专门用于存储用户属性的文件
在CentOS 7中,/etc/passwd
文件是用于存储用户账户信息的文本文件,每行代表一个用户,每行中的字段以冒号“::
”分隔,通常包含7个字段,各字段的含义如下:
-
用户名
-
这是用户在系统中登录时使用的名称,是用户的唯一标识,例如
root
、testuser
等。它在系统中必须是独一无二的,且长度有限制,一般不超过32个字符。
-
-
密码占位符
-
在早期的系统中,这里存储的是用户的加密密码。但现在,为了安全起见,真正的加密密码通常存储在
/etc/shadow
文件中,这里一般显示为x
或*
。x
表示密码已经被影子化,即密码存储在/etc/shadow
文件中;*
表示该用户账号被锁定,无法使用密码登录。
-
-
用户UID
系统通过UID来识别用户的身份,而不是用户名。在CentOS 7中,
root
用户的UID为0,普通用户的UID一般从1000开始分配。 -
用户GID
用于标识用户所属的主要用户组。它对应着
/etc/group
文件中的一条记录,用于确定用户在系统中的基本权限和访问控制。 -
用户信息描述
额外信息也被称为GECOS(General Electric Comprehensive Operating System)字段。这些信息并非必需的,可根据实际情况填写,多个信息之间一般用逗号分隔。
-
用户家目录
当用户登录后,系统会自动将用户的工作目录切换到该目录下。例如,普通用户的家目录通常在
/home
目录下,如/home/testuser
;root
用户的家目录为/root
。 -
用户登录Shell
用户登录系统后使用的命令解释器(Shell)翻译器。常见的Shell有
/bin/bash
、/bin/sh
、/bin/zsh
等。/bin/bash
是CentOS 7系统中大多数用户默认使用的Shell,它提供了丰富的功能和命令行编辑能力。如果该字段设置为/sbin/nologin
,则表示用户无法登录系统,只能用于系统管理等特殊用途。
下面是一个/etc/passwd
文件的示例行及各字段解析:
testuser:x:1001:1001:Test User:/home/testuser:/bin/bash
在这个示例中,testuser
是用户名,x
是密码占位符,1001
是UID,1001
是GID,Test User
是用户信息描述,/home/testuser
是家目录,/bin/bash
是登录Shell。
shadow文件被称为影子文件,保存了用户的密码信息,通过算法加密
head -2 /etc/shadow
tail -2 /etc/shadow
在CentOS 7中,/etc/shadow
文件用于存储用户的密码和相关信息,每行代表一个用户,由9个字段组成,各个字段之间用冒号(:
)分隔。以下是每个字段的含义:
-
用户名
与
/etc/passwd
文件中的用户名相对应,是用户登录系统时使用的名称。 -
加密密码
存储用户密码的加密形式。如果显示为
x
或*
等,通常表示密码信息存储在其他地方或该用户无法直接登录。如果是!!
或*LK*
等,则表示该用户账号被锁定。 -
最后一次修改密码的日期
从1970年1月1日开始计算到最后一次修改密码的天数。例如,17526表示从1970年1月1日到最后一次修改密码时经过了17526天。
-
最小密码修改间隔
表示用户必须经过多少天才能再次修改密码。为0表示可以随时修改密码。
-
最大密码修改间隔
表示用户密码的有效期限,即从上次修改密码后,经过多少天必须再次修改密码。
-
密码过期警告天数
在密码过期前多少天开始向用户发出警告,提醒用户密码即将过期。
-
密码过期后账号锁定天数
密码过期后,再过多少天用户账号将被锁定。
-
账号失效日期
从1970年1月1日开始计算的到账号失效的天数。到达这个日期后,无论密码是否过期,该账号都将无法使用。
-
保留字段
目前未使用,通常为空或默认值,为将来可能的扩展功能预留。
以下是一个/etc/shadow
文件的示例行及其各字段的解释:
chen:$6$rounds=656000$83zP2jQm9TqgZQcX$W5R0g2cVv44838957346476348726746743849843:17526:0:90:7:14:17800:
-
user1
:用户名。 -
$6$rounds=656000$83zP2jQm9TqgZQcX$W5R0g2cVv44838957346476348726746743849843
:加密后的用户密码。 -
17526
:表示最后一次修改密码的日期是从1970年1月1日起的第17526天。 -
0
:用户可以随时修改密码。 -
90
:密码的最大有效期为90天,即用户必须在90天内修改密码。 -
7
:在密码过期前7天开始向用户发出警告。 -
14
:密码过期后14天,如果用户仍未修改密码,账号将被锁定。 -
17800
:表示到1970年1月1日起的第17800天账号失效。 -
空
添加,修改,删除用户账号
在CentOS 7系统中,可以使用不同的命令来添加、修改和删除用户账号,以下是详细介绍:
添加用户账号
在CentOS 7中,可以使用useradd
或adduser
命令来创建新用户账号,这两个命令功能基本相同,通常使用useradd
更为常见。
基本语法
useradd [选项] 用户名
常用选项
-d:指定用户的主目录。
-m:如果主目录不存在,则创建主目录。
-s
:指定用户的登录shell。
-g:指定用户的初始组。
-G:指定用户的附加组。
示例
# 创建一个名为testuser的用户,并为其创建主目录 useradd -m testuser # 创建一个名为newuser的用户,指定主目录为/home/newuser_dir,登录shell为/bin/bash useradd -m -d /home/newuser_dir -s /bin/bash newuser
设置用户密码
创建用户后,需要为用户设置密码,可以使用passwd
命令:
passwd 用户名
执行该命令后,系统会提示你输入新密码并确认,输入的密码不会显示在屏幕上。
在CentOS 7中,passwd
命令用于设置或更改用户密码,它有许多常用选项,以下是一些主要的选项及其用法:
-l
(lock)
作用:锁定用户账号,使该用户无法使用密码登录系统。
示例:passwd -l user1
,这会将用户user1
的账号锁定。
-u
(unlock)
作用:解锁用户账号,允许用户使用密码登录系统。
示例:passwd -u user2
,用于解锁用户user2
的账号。
-d
(delete)
作用:删除用户的密码,使用户可以无需密码直接登录。
示例:passwd -d 3
,将删除用户user3
的密码。
-e
(expire)
作用:强制用户在下一次登录时更改密码。
示例:passwd -e user4
,用户user4
下次登录时会被提示必须更改密码。
-S
(status)
作用:查询用户账号的密码状态。
示例:passwd -S user5
,可以查看用户user5
的
密码状态信息,包括密码是否已设置、密码过期时间等。
-n
(mindays)
作用:设置用户密码更改的最小天数。
示例:passwd -n 3 user6
,表示用户user6
必须至少间隔3天才能再次更改密码。
-x
(maxdays)
作用:设置用户密码更改的最大天数。
示例:passwd -x 30 user7
,意味着用户user7
需要每90天内更改一次密码。
-w
(warndays)
作用:在密码过期前提前警告用户的天数。
示例:passwd -w 5 user8
,表示在用户user8
的密码还有5天过期时开始提醒用户。
-i
(inactive)
作用:设置密码过期后用户账号的非活动天数,超过这个天数,账号将被禁用。
示例:passwd -i 15 user9
,如果用户user9
的密码过期后15天内仍未更改密码,账号将被禁用。
如果是普通用户执行passwd
命令,不加选项时,默认是更改自己的密码。如果是管理员(root用户)执行passwd
命令,可以通过指定用户名来更改其他用户的密码,如passwd username
修改用户账号
可以使用usermod
命令来修改用户账号的各种属性,如用户名、主目录、登录shell等。
基本语法
usermod [选项] 用户名
常用选项
-l
:修改用户名。
-d
:修改用户的主目录。
-m
:如果指定了新的主目录,将旧主目录中的文件移动到新主目录。
-s
:修改用户的登录shell。
-g
:修改用户的初始组。
-G
:修改用户的附加组。
-u指定用户的ID
-e指定用户失效时间
-M不建立宿主目录
示例
# 将用户testuser的用户名改为newtestuser usermod -l newtestuser testuser # 将用户newtestuser的主目录改为/home/newtestuser_dir,并将旧主目录中的文件移动到新主目录 usermod -d /home/newtestuser_dir -m newtestuser # 将用户newtestuser的登录shell改为/bin/sh usermod -s /bin/sh newtestuser
删除用户账号
可以使用userdel
命令来删除用户账号。
基本语法
userdel [选项] 用户名
常用选项
-r
:删除用户的同时,删除用户的主目录和邮件池
示例
删除用户newtestuser, userdel newtestuser 删除用户newtestuser, userdel -r newtestuser
usermod
是 Linux 系统中用于修改用户账户信息的命令,它可以对已存在的用户账户进行多种属性的修改。以下是 usermod
命令常用选项及其说明:
usermod基本语法
usermod [选项] 用户名
常用选项及说明
1. 用户账户信息修改
-c, --comment
说明:修改用户账户的备注信息,通常用于记录用户的相关描述,比如用户的职位、部门等。
示例:将用户 john
的备注信息修改为 "Sales Department"
usermod -c "Sales Department" john
-d, --home
说明:修改用户的主目录。使用该选项时,如果指定的主目录不存在,需要加上 -m
选项,它会自动创建新的主目录并将原主目录的内容迁移过去。
示例:将用户 john
的主目录修改为 /home/new_john
,并迁移原主目录内容
usermod -d -m /home/new_john john
-e, --expiredate
-
说明:设置用户账户的过期日期,日期格式为
YYYY-MM-DD
。过期后用户将无法登录系统。 -
示例:设置用户
john
的账户在 2025 年 12 月 31 日过期
usermod -e 2025-12-31 john
-f, --inactive
说明:设置用户密码过期后多少天账户被锁定。如果设置为 0,则密码过期后立即锁定账户;如果设置为 -1,则禁用此功能。
示例:设置用户 john
在密码过期后 7 天账户被锁定
usermod -f 7 john
2. 用户组修改
-g, --gid
说明:修改用户的主组。可以使用组名或组 ID。
示例:将用户 john
的主组修改为 sales
usermod -g sales john
-G, --groups
说明:修改用户的附加组。多个组名或组 ID 之间用逗号分隔,不添加空格。
示例:将用户 john
添加到 sales
和 marketing
附加组
usermod -G sales,marketing john
3. 用户登录相关修改
-l, --login
说明:修改用户的登录名。
示例:将用户 john
的登录名修改为 johndoe
usermod -l johndoe john
-s, --shell
说明:修改用户的默认登录 shell。
示例:将用户 john
的默认登录 shell 修改为 /bin/bash
usermod -s /bin/bash john
4. 用户状态修改
-L, --lock
说明:锁定用户账户,使其无法登录。该选项会在 /etc/shadow
文件中用户密码字段前添加 !
符号。
示例:锁定用户 john
的账户
usermod -L john
-U, --unlock
说明:解锁被锁定的用户账户。
示例:解锁用户 john
的账户
usermod -U john
userdel
userdel 是一个在 Linux 和类 Unix 系统中用于删除用户账户的命令。下面详细介绍 userdel 命令的常用选项: 基本语法 userdel [选项] 用户名 常用选项及说明 -f, --force 说明:强制删除用户账户。即使该用户当前已登录,也会尝试删除该用户账户。同时,如果用户的主目录中有正在被使用的文件,也会尝试删除主目录。 示例:强制删除用户 testuser
userdel -f testuser
-r, --remove 说明:在删除用户账户的同时,删除该用户的主目录和邮件 spool(通常位于 /var/mail 或 /var/spool/mail)。 示例:删除用户 testuser 并同时删除其主目录和邮件 spool
userdel -r testuser
-Z, --selinux-user 说明:删除用户的 SELinux 用户映射。SELinux(Security-Enhanced Linux)是一种基于 Linux 内核的强制访问控制(MAC)系统,此选项用于清理 SELinux 相关的用户信息。 示例:删除用户 testuser 并清理其 SELinux 用户映射 userdel -Z testuser
groupadd
是 Linux 系统中用于创建新用户组的命令,以下是该命令常用选项及其说明:
基本语法
groupadd [选项] 组名
常用选项及说明
-g, --gid GID
说明:指定新用户组的组 ID(GID)。GID 是一个唯一的整数,用于标识系统中的用户组。默认情况下,groupadd
会自动分配一个未使用的 GID。
示例:创建一个名为 test
的用户组,并指定其 GID 为 1005
。
groupadd -g 1005 test
-r, --system
说明:创建一个系统用户组。系统用户组的 GID 通常小于 1000(具体范围可能因系统而异),这些用户组通常用于系统服务或特殊用途。
示例:创建一个名为 root
的系统用户组。
groupadd -r root
-K, --key KEY=VALUE
说明:此选项允许你覆盖 /etc/login.defs
文件中的默认组配置。可以多次使用该选项来设置多个参数。
示例:创建一个名为 customgroup
的用户组,并手动指定其 GID 为 1006
,覆盖默认的 GID 分配规则。
groupadd -K GID=1006 customgroup
-o, --non-unique
-
说明:允许创建具有重复 GID 的用户组。通常情况下,每个用户组的 GID 必须是唯一的,但使用此选项可以打破这个限制。
-
示例:创建一个名为
duplicate_gid_group
的用户组,其 GID 与已存在的某个用户组相同(假设已存在 GID 为1005
的用户组)。
groupadd -o -g 1005 duplicate_gid_group
-f, --force
-
说明:如果指定的用户组已经存在,使用该选项不会报错,而是直接退出。如果同时使用了
-g
选项指定 GID,且该 GID 已被其他用户组使用,groupadd
会尝试自动分配一个新的 GID。 -
示例:尝试创建一个名为
testgroup
的用户组,如果该用户组已经存在,则直接退出。
groupadd -f testgroup
示例
创建一个名为 developers
的用户组,指定其 GID 为 2000
:
groupadd -g 2000 developers
创建一个系统用户组 daemonservice
:
groupadd -r daemonservice
通过这些选项,你可以根据具体需求灵活地创建用户组。
检索root组包括哪些用户
grep "^root" /etc/group
grep "root" /etc/group
检索哪些组包括root用户
在CentOS系统中,可以使用以下多种方法来查询账号信息:
使用cat
命令查看/etc/passwd
文件
/etc/passwd
文件存储了系统中所有用户账号的基本信息,每行代表一个用户,字段之间用冒号分隔。例如:
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin
各字段分别表示用户名、密码占位符、用户ID、组ID、用户描述、家目录、登录shell。要查看所有账号信息,可以使用以下命令:
cat /etc/passwd
如果只想查看特定用户的信息,比如testuser
,可以使用grep
命令进行过滤:
cat /etc/passwd | grep testuser
使用getent
命令
getent
命令可以用来查询系统数据库中的信息,包括用户账号信息。例如,要查询testuser
的账号信息,可以使用以下命令:
getent passwd testuser
如果要查询所有用户的信息,可以使用:
getent passwd
使用id
命令
id
命令用于显示用户的UID、GID及所属组等信息。如果要查看当前用户的信息,可以直接执行id
命令:
id
如果要查看特定用户的信息,比如testuser
,可以使用以下命令:
id testuser
使用finger
命令
finger
命令可以提供更详细的用户信息,包括用户名、真实姓名、终端信息、登录时间等。要查看所有用户的详细信息,可以使用以下命令:
finger
要查看特定用户的信息,比如testuser
,可以使用:
finger testuser
使用pwck
命令
pwck
命令用于检查/etc/passwd
和/etc/shadow
文件中的用户账号信息是否完整和正确。它会输出检查结果,包括存在问题的用户账号信息。执行命令如下:
pwck
在CentOS 7中,可以使用ls -l
命令来查看目录和文件的属性,以下是对其输出中每个字节含义的详细解释:
-rw-r--r--. 1 root root 1234 May 10 14:30 example.txt
-
第1个字节:表示文件类型
-
:表示普通文件。d
:表示目录。l
:表示符号链接(软链接)。b
:表示块设备文件,如硬盘、光驱等。c
:表示字符设备文件,如键盘、鼠标等。s
:表示套接字文件,用于进程间通信。p
:表示管道文件,用于进程间通信。 -
第2-4个字节:表示文件所有者的权限
r
:表示可读权限,对应数字4。w
:表示可写权限,对应数字2。x
:表示可执行权限,对应数字1。若没有该权限,则显示为-
。 -
第5-7个字节:表示文件所属组的权限,含义与文件所有者权限相同。
-
第8-10个字节:表示其他用户的权限,含义与文件所有者权限相同。
-
第11个字节:在CentOS 7中,有的文件属性最后会有一个
.
,这与SELinux有关。如果文件受SELinux管理,就可能会出现这个.
。如果SELinux处于禁用状态,通常不会显示这个字符。 -
第12个及之后的字节
硬链接数:
1
表示该文件的硬链接数量。硬链接是指多个文件名指向同一个文件的inode节点,每增加一个硬链接,该数字就会加1。文件所有者:
root
表示该文件的所有者是root用户。文件所属组:
root
表示该文件所属的组是root组。文件大小:
1234
表示文件的大小,单位是字节。修改时间:
May 10 14:30
表示文件的最后修改时间。文件名:
example.txt
表示文件名。
在CentOS 7中,可以使用chmod
和chown
等命令来设置目录和文件的权限,以下为你详细介绍:
查看文件和目录权限
在设置权限之前,你可以使用ls -l
命令查看文件和目录的当前权限:
ls -l /path/to/directory_or_file
例如,查看/home/user/test
的权限:
ls -l /home/user/test
输出示例如下:
-rw-r--r--. 1 user user 0 Mar 6 10:00 /home/user/test
上述输出中,-rw-r--r--
表示文件的权限,第一个字符-
表示这是一个文件(d
表示目录),后面9个字符分为三组,分别表示文件所有者(user)、所属组(group)和其他用户(others)的权限,r
表示读权限,w
表示写权限,x
表示执行权限。
使用chmod
命令修改权限
chmod
命令用于修改文件或目录的权限,有两种常用的权限表示方法:数字模式和符号模式。
数字模式
-
r
(读权限) = 4 -
w
(写权限) = 2 -
x
(执行权限) = 1 -
没有任何权限 = 0
权限的设置顺序是:所有者权限、所属组权限、其他用户权限。
例如,将文件/home/user/test
的权限设置为所有者具有读写执行权限,所属组和其他用户具有读权限,可以使用以下命令:
chmod 744 /home/user/test
如果要将目录/home/user/dir
的权限设置为所有者具有读写执行权限,所属组具有读和执行权限,其他用户没有任何权限,可以使用以下命令:
chmod 750 /home/user/dir
符号模式
-
u
表示所有者(user) -
g
表示所属组(group) -
o
表示其他用户(others) -
a
表示所有用户(all) -
+
表示添加权限 -
-
表示移除权限 -
=
表示设置权限
例如,给文件/home/user/test
的所有者添加执行权限:
chmod u+x /home/user/test
移除目录/home/user/dir
所属组的写权限:
chmod g-w /home/user/dir
使用chown
命令修改文件和目录的所有者和所属组
chown
命令用于更改文件或目录的所有者和所属组。
更改所有者
chown new_owner /path/to/directory_or_file
例如,将文件/home/user/test
的所有者更改为newuser
:
chown newuser /home/user/test
更改所属组
chgrp new_group /path/to/directory_or_file
例如,将目录/home/user/dir
的所属组更改为newgroup
:
chgrp newgroup /home/user/dir
同时更改所有者和所属组
chown new_owner:new_group /path/to/directory_or_file
例如,将文件/home/user/test
的所有者更改为newuser
,所属组更改为newgroup
:
chown newuser:newgroup /home/user/test
递归修改权限
如果你想对某个目录及其所有子目录和文件应用相同的权限更改,可以使用-R
选项。
例如,将目录/home/user/dir
及其所有子目录和文件的所有者更改为newuser
,所属组更改为newgroup
:
chown -R newuser:newgroup /home/user/dir
将目录/home/user/dir
及其所有子目录和文件的权限设置为所有者具有读写执行权限,所属组和其他用户具有读和执行权限:
chmod -R 755 /home/user/dir
在CentOS 7中,可以使用chown
命令来设置目录和文件的归属,使用chgrp
命令来设置目录和文件的所属组。以下是具体的操作方法:
设置文件或目录的所有者和所属组
-
chown
命令用于更改文件或目录的所有者和所属组,其基本语法为:chown [选项] 所有者:所属组 文件或目录
。例如,要将/home/user1/test.txt
文件的所有者设置为user2
,所属组设置为group2
,可以使用以下命令:
chown user2:group2 /home/user1/test.txt
如果只想更改所有者,可以只指定所有者名称:chown user2 /home/user1/test.txt
。
如果只想更改所属组,可以使用chgrp
命令,基本语法为:chgrp [选项] 所属组 文件或目录
。例如,将/home/user1/test.txt
文件的所属组更改为group3
,可以使用以下命令:
chgrp group3 /home/user1/test.txt
递归设置目录及其子目录和文件的归属
当需要对一个目录下的所有子目录和文件都设置相同的所有者和所属组时,可以使用-R
选项进行递归操作。例如,要将/home/user1/my_dir
目录及其所有内容的所有者设置为user3
,所属组设置为group4
,可以使用以下命令:
chown -R user3:group4 /home/user1/my_dir
更改特殊权限下的文件或目录归属
在一些特殊权限设置的情况下,如setuid
、setgid
和sticky bit
,更改文件或目录的归属时需要注意保持这些特殊权限。一般来说,使用chown
命令更改归属不会影响特殊权限,但如果不小心更改了权限位,可能会导致特殊权限丢失。
例如,有一个具有setuid
权限的可执行文件/usr/bin/some_command
,要更改其所有者为user4
,可以使用以下命令:
chown user4 /usr/bin/some_command
更改后,需要确保setuid
权限仍然存在,可以使用ls -l
命令查看文件权限,如果setuid
权限位为s
,则表示权限正常。
在使用chown
和chgrp
命令时,需要确保有足够的权限来进行操作。通常,只有超级用户(root)或具有适当权限的用户才能更改文件和目录的归属。