目录
用户账号和组账号概述
用户账号
超级用户:root 用户是 Linux 操作系统中默认的超级用户账号,对本主机拥有最高的权限。系统中超级用户是唯一的。
普通用户:由root用户或其他管理员用户创建,拥有的权限会受到限制,一般只在用户自己的宿主目录中拥有完整权限。
程序用户:在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,仅用于维持系统或某个程序的正常运行,如 bin、daemon、ftp、mail 等。
组账号
基本组(私有组):基本组账号只有一个,一般为创建用户时指定的组。
在/etc/passwd文件中第4字段记录的即为该用户的基本组 GID 号。
附加组(公共组):用户除了基本组以外,额外添加指定的组。
标识号
UID:用户标识号
GID:组标识号
在Centos5,6中程序用户的UID和GID默认范围为:1~499;普通用户的 UID和GID 号为500~60000
在Centos7中程序用户的UID和GID默认范围为:1~999;普通用户的 UID和GID 号为1000~60000
root 用户账号的 UID和GID 号为固定值 0
用户账号文件/etc/passwd
(一共七个字段)
作用:保存用户名称、宿主目录、登录ShelI等基本信息
文件位置:/etc/passwd
示例:
[root@localhost ~]# head -2 /etc/passwd //显示存放用户账号信息文件的前两行信息
root:x:0:0:root:/root:/bin/bash //用户账号记录
bin:x:1:1:bin:/bin:/sbin/nologin //用户账号记录
用户账号信息结构以冒号隔开,共七个部分,如图所示:
以root:x:0:0:root:/root:/bin/bash为例
字段1:用户帐号的名称
字段2:用户密码占位符“x”
字段3:用户帐号的UID号
字段4:所属基本组帐号的GID号
字段5:用户全名
字段6:宿主目录
字段7:登录Shell信息(/bin/bash为可登陆系统,/sbin/nologin和/bin/false为禁止用户登陆系统)
用户密码文件/etc/shadow
(九个字段)
作用:保存用户的账号、密码、有效期等信息
文件位置:/etc/shadow
每一行对应一个用户的密码记录,示例如下:
[root@localhost ~]# head -2 /etc/shadow
root:$6$q1g/WL6F5wLBWiPu$75SXk1C9uae01CsrKmbYwUBPZRjeY9PBIad3SO7mmHQb72GviJRVuhFgd1QPoQCdB64nVLmBfk1DAJNQx.xhs0::0:99999:7:::
bin:*:18353:0:99999:7:::
root:$6$q1g/WL6F5wLBWiPu$75SXk1C9uae01CsrKmbYwUBPZRjeY9PBIad3SO7mmHQb72GviJRVuhFgd1QPoQCdB64nVLmBfk1DAJNQx.xhs0::0:99999:7:::
字段1:用户帐号的名称
字段2:使用MD5加密的密码字串信息,当为“*”或“!!”时表示此用户不能登录到系统。若该字段内容为空,则该用户无须密码即可登录系统
字段3:上次修改密码的时间,表示从1970年01月01日算起到最近一次修改密码时间隔的天数
字段4:密码的最短有效天数,自本次修改密码后,必须至少经过该天数才能再次修改密码。默认值为0,表示不进行限制
字段5:密码的最长有效天数,自本次修改密码后,经过该天数以后必须再次修改密码。默认值为99999,表示不进行限制
字段6:提前多少天警告用户密码将过期,默认值为7
字段7:在密码过期之后多少天禁用此用户
字段8:帐号失效时间,此字段指定了用户作废的天数(从1970年01月01日起计算),默认值为空,表示账号永久可用。
字段9:保留字段(未使用)
添加用户账号
格式:useradd [选项]... 用户名
作用:
- 在/etc/passwd 文件和/etc/shadow 文件的末尾增加该用户账号的记录。
- 若未明确指定用户的宿主目录,则在/home目录下自动创建与该用户账号同名的宿主目录,并在该目录中建立用户的各种初始配置文件。
- 若没有明确指定用户所属的组,则自动创建与该用户账号同名的基本组账号,组账号的记录信息将保存到/etc/group 和/etc/gshadow 文件中。
常用选项:
- -u:指定用户的 UID 号,要求该 UID 号码未被其他用户使用。
- -d:指定用户的宿主目录位置(当与-M 一起使用时,不生效)。只能用绝对路径指定目录,且不需要事先创建目录
- -e:指定用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
- -g:指定用户的基本组名(或使用 GID 号),对应的组名必须已存在。
- -G:指定用户的附加组名(或使用 GID 号),对应的组名必须已存在。
- -M:不建立宿主目录。
- -s:指定用户的登录Shell,(比如/bin/bash为可登陆系统,/sbin/nologin和/bin/false为禁止用户登陆系统)。
示例一:
创建一个名称为aaaa的账号,其UID号为1024,并且不建立宿主目录,禁止该用户登录系统。
代码如下:
useradd aaaa -u 9527 -M -s /sbin/nologin //创建用户
vim /etc/passwd //查看用户文件
[root@localhost ~]# cd /home //切换到home目录下
[root@localhost home]# ls
test test1 //下图中“/home/aaaa”并不是真的创建了宿主目录,因为用了M,表示不建立宿主目录,因此home中也并无aaaa
进入用户文件中,显示已经添加完成,如下图所示:
示例二:
创建一个名为bbbb的用户,设置其宿主位置为/opt/dashuaige,并将其和test1放置在同一个基本组中
代码如下:
[root@localhost home]# useradd bbbb -d /opt/dashuaige -g test1
[root@localhost home]# ls /home
test test1
[root@localhost home]# vim /etc/passwd
如图所示,用户bbbb和test1的GID都为1001,表明在同一个基本组中,bbbb的宿主目录为/opt/dashuaige
为用户账号设置密码 passwd
设置用户密码:
- passwd [选项字] <用户名>
- echo "密码" | passwd --stdin 用户名
- echo <用户名>:<密码> | chpasswd
root用户可以指定用户名作为参数,对指定账号的密码进行管理;不指定用户名时,修改当前账号的密码。普通用户却只能执行单独的“passwd”命令修改自己的密码。
常用选项:
- -d:清空指定用户的密码,仅使用用户名即可登录系统。
- -l:锁定用户账户,锁定的用户账号将无法再登录系统。
- -S:查看用户账户的状态(是否被锁定)。
- -u:解锁用户账户。
示例:
修改用户账号的属性usermod
格式:usermod [选项]... 用户名
常用选项:
- -u:修改用户的 UID 号。
- -d:修改用户的宿主目录位置。
- -e:修改用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
- -g:修改用户的基本组名(或使用 GID 号)。
- -G:修改用户的附加组名(或使用 GID 号)。
- -s:指定用户的登录 Shell。
- -l:更改用户账号的登录名称。
- -L:锁定用户账户。
- -U:解锁用户账户。
示例一:
修改aaaa账户的失效时间
[root@localhost ~]# usermod aaaa -e 2024-12-12
示例二:
解锁和锁定账户
[root@localhost ~]# usermod -L aaaa //将aaaa账户锁定
[root@localhost ~]# passwd -S aaaa //查看用户账户的状态
aaaa LK 2024-04-14 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -u aaaa //解锁账户
解锁用户 aaaa 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -S aaaa //查看用户账户的状态
aaaa PS 2024-04-14 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@localhost ~]# passwd -l aaaa //将aaaa账户锁定
锁定用户 aaaa 的密码 。
passwd: 操作成功
[root@localhost ~]# usermod -U aaaa //解锁账户
[root@localhost ~]# passwd -S aaaa //查看用户账户的状态
aaaa PS 2024-04-14 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
删除用户账号userdel
格式:userdel [-r] 用户名
添加“-r”选项时可以将该用户的宿主目录一并删除
示例:
用户账号的初始配置文件
useradd 命令添加一个新的用户账号后会在该用户的宿主目录中建立一些初始配置文件。这些文件来自于账号模板目录/etc/skel/,基本上都是隐藏文件。
主要的用户初始配置文件:
- ~/.bash_profile
- #此文件中的命令将在该用户每次登录时被执行,它会设置一些环境变量,并且会调用该用户的~/.bashrc文件
- ~/.bashrc
- #此文件中的命令会在每次打开新的bash shell时(也包括登录系统)被执行,并且会调用/etc/bashrc文件
- ~/.bash_logout
- #此文件中的命令将在用户每次退出登录或退出bash shell时执行
- 全局配置文件对所有用户有效
- /etc/profile
- #这个文件是为系统全局变量配置文件,可通过重启系统或者执行source /etc/profile 命令使profile文件被读取
- /etc/profile.d/
- #这个文件实际上是/etc/profile的子目录,存放的是一些应用程序所需的启动脚本
- /etc/bashrc
- #每一个运行bash shell的用户都会执行此文件,可通过执行bash 命令打开一个新的bash shell时,使 bashrc文件被读取
注:用户宿主目录下的初始配置文件只对当前用户有效,例如root用户目录下的配置信息只对root用户有效,同理,test用户目录下的配置信息支队test用户有效。etc/目录下的配置文件对操作系统中所有用户有效,如图所示:
总结:
系统环境初始化配置文件 /etc/profile /etc/bashrc 对所有用户有用户有效
用户环境初始化配置文件 ~/.bash_profile ~/.bashrc ~/.bash_logout 只对当前用户有效
/etc/profile ~/.bash_profile 设置用户每次登录时要执行的命令
/etc/bashrc ~/.bashrc 设置切换shell环境时(包括登录系统时)要执行的命令
~/.bash_logout 设置退出登录或shell环境时执行的命令
添加和删除组账号
添加组账号: groupadd [-g GID] 组名
删除组账号 groupdel 组名
常用管理命令:
- gpasswd 组名 -a: 向组内添加一个用户
- gpasswd 组名 -d:从组内删除一个用户成员
- gpasswd 组名 -M:定义组成员列表,以逗号分隔
示例一:
[root@localhost home]# groupadd xy101 //添加组账号xy101
[root@localhost home]# useradd a1 //添加用户
[root@localhost home]# useradd a2 //添加用户
[root@localhost home]# useradd a3 //添加用户
[root@localhost home]# useradd a4 //添加用户
[root@localhost home]# id a1 //查看用户a1
uid=1002(a1) gid=1004(a1) 组=1004(a1)
[root@localhost home]# gpasswd xy101 -a a1 // 将用户“a1”加入到“xy101”组中
正在将用户“a1”加入到“xy101”组中
[root@localhost home]# gpasswd xy101 -a a2 //将用户“a2”加入到“xy101”组中
正在将用户“a2”加入到“xy101”组中
[root@localhost home]# gpasswd xy101 -a a3 //将用户“a3”加入到“xy101”组中
正在将用户“a3”加入到“xy101”组中
[root@localhost home]# gpasswd xy101 -d a3 //将用户“a3”从“xy101”组中删除
正在将用户“a3”从“xy101”组中删除
示例二:
[root@localhost home]# gpasswd xy101 -M a3,a4 //重新定义组成员列表,会将原先的组内成员删除
组账号文件
/etc/group:保存组帐号基本信息;共有4个字段,分别组账号名:x占位符:GID号:组账号成员。
/etc/gshadow:保存组帐号的密码信息
查询用户的组信息
groups 用户名 id 用户名
示例:
[root@192 home]# groups a1
a1 : a1 //显示基本组和附加组,此时账户a1只有基本组
[root@192 home]# id a1
uid=1002(a1) gid=1004(a1) 组=1004(a1)
finger命令
作用:查询用户账号的登录属性
注:需要先进行安装finger软件包
finger [用户名]
finger 安装如下:
[root@192 home]# cd /etc/yum.repos.d/
[root@192 yum.repos.d]# ls
local.repo repo repo.bak
cat: repo: 是一个目录
[root@192 yum.repos.d]# cat local.repo
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0[root@192 yum.repos.d]# yum insatll -y finger
示例:finger查询用户账号的登录属性
[root@192 yum.repos.d]# finger test
Login: test Name: test
Directory: /home/test Shell: /bin/bash
Last login 六 4月 13 16:16 (CST) on :0
No mail.
No Plan.
示例:通过w查询登录信息
[root@192 yum.repos.d]# w
23:44:35 up 34 min, 3 users, load average: 0.95, 0.24, 0.11
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 23:10 ?xdm? 52.21s 0.17s /usr/libexec/gnome-session-binary --session gnome-classic
root pts/0 192.168.10.1 23:10 3.00s 3.64s 0.02s w
a1 :1 :1 23:44 ?xdm? 52.21s 0.25s /usr/libexec/gnome-session-binary --session gnome-classic
示例:通过who查询登录信息
[root@192 yum.repos.d]# who
root :0 2024-04-14 23:10 (:0) //0表示本地
root pts/0 2024-04-14 23:10 (192.168.10.1)
示例:通过users查询登录信息
[root@192 yum.repos.d]# users
root root a1
设置文件和目录的权限-chmod
查看文件和目录的权限和归属
格式:
格式一:chmod 【ugoa】 【+-=】 【rwx】 文件或目录 //u、g、0、a分别表示属主、属组、其他用户、所有用户;+-=分别表示增加、去除、设置权限;r、w、x分别表示读、写、运行权限。
格式二:chmod nnn 文件或目录 //nnn表示三位八进制数
-R:递归修改指定目录下所有子项的权限
示例:
[root@192 yum.repos.d]# ls -l
总用量 4
-rw-r--r--. 1 root root 63 4月 11 14:13 local.repo
drwxr-xr-x. 2 root root 6 4月 11 13:41 repo
drwxr-xr-x. 2 root root 220 4月 11 14:05 repo.bak
[root@192 yum.repos.d]# chmod 754 local.repo //将local.repo文件设置为用户可读可写可执行,组用户可读可执行,其他用户只能执行
[root@192 yum.repos.d]# ls
local.repo repo repo.bak
[root@192 yum.repos.d]# ll
总用量 4
-rwxr-xr--. 1 root root 63 4月 11 14:13 local.repo
drwxr-xr-x. 2 root root 6 4月 11 13:41 repo
drwxr-xr-x. 2 root root 220 4月 11 14:05 repo.bak
[root@192 yum.repos.d]# chmod 777 local.repo //将local.repo文件设置为最高权限
[root@192 yum.repos.d]# ll
总用量 4
-rwxrwxrwx. 1 root root 63 4月 11 14:13 local.repo
drwxr-xr-x. 2 root root 6 4月 11 13:41 repo
drwxr-xr-x. 2 root root 220 4月 11 14:05 repo.bak
示例二:
[root@192 yum.repos.d]# chmod -R 755 repo.bak/ //递归将repo.bak目录下的所有文件权限设为755
[root@192 yum.repos.d]# ll
总用量 4
-rwxrwxrwx. 1 root root 63 4月 11 14:13 local.repo
drwxr-xr-x. 2 root root 6 4月 11 13:41 repo
drwxr-xr-x. 2 root root 220 4月 11 14:05 repo.bak
[root@192 yum.repos.d]# ll repo.bak/
总用量 40
-rwxr-xr-x. 1 root root 1664 11月 23 2020 CentOS-Base.repo
-rwxr-xr-x. 1 root root 1309 11月 23 2020 CentOS-CR.repo
-rwxr-xr-x. 1 root root 649 11月 23 2020 CentOS-Debuginfo.repo
-rwxr-xr-x. 1 root root 314 11月 23 2020 CentOS-fasttrack.repo
-rwxr-xr-x. 1 root root 630 11月 23 2020 CentOS-Media.repo
-rwxr-xr-x. 1 root root 1331 11月 23 2020 CentOS-Sources.repo
-rwxr-xr-x. 1 root root 8515 11月 23 2020 CentOS-Vault.repo
-rwxr-xr-x. 1 root root 616 11月 23 2020 CentOS-x86_64-kernel.repo
示例三:
----------. 1 root root 63 4月 11 14:13 local.repo
drwxr-xr-x. 2 root root 6 4月 11 13:41 repo
drwxr-xr-x. 2 root root 220 4月 11 14:05 repo.bak
[root@192 yum.repos.d]# chmod ug+rw local.repo
[root@192 yum.repos.d]# ll
总用量 4
-rw-rw----. 1 root root 63 4月 11 14:13 local.repo
drwxr-xr-x. 2 root root 6 4月 11 13:41 repo
drwxr-xr-x. 2 root root 220 4月 11 14:05 repo.bak
设置文件和目录的归属chown
chown 属主 文件或目录
chown :属组 文件或目录
chown 属主:属组 文件或目录
设置目录和文件的默认权限-umask
umask查看:umask
umask设置:umask 000
设置目录和文件的默认权限 umask
指定目前用户在新建文件或目录时的权限默认值
新建的文件或者目录的权限为默认最大权限减去umask
普通文件的最大默认权限为 6(rw),目录的最大默认权限为 7(rwx)
示例:
[root@192 yum.repos.d]# touch 1.txt
[root@192 yum.repos.d]# ll
总用量 4
-rw-------. 1 root root 0 4月 15 00:44 1.txt
-rw-rw----. 1 root root 63 4月 11 14:13 local.repo
drwxr-xr-x. 2 root root 6 4月 11 13:41 repo
drwxr-xr-x. 2 root root 220 4月 11 14:05 repo.bak