目录

导言

一、用户/用户组配置文件

1.1 用户信息文件:/etc/passwd

1.2 用户密码文件:/etc/shadow

1.3 新用户信息文件所在目录:/etc/skel

1.4 用户其他配置文件:/etc/login.defs , /etc/default/useradd

1.5 登录信息文件:/etc/motd

二、用户管理命令

2.1 useradd 添加用户

2.2 userdel 删除用户

2.3 usermod 修改用户信息

2.4 其他用户管理命令

2.5 chage更改用户密码国企信息(本质是更改/etc/shadow里面的信息)

2.6 启动或停用shadow功能

2.7 其他不重要的

三、用户组管理命令

3.1 添加用户组:groupadd

3.2 删除用户组:groupdel 组名

3.3 修改用户组信息:groupmod

3.4 gpasswd设置组密码及管理组内成员

3.5 其他用户组管理命令

3.6 启动或停用shadow功能

四、用户授权

4.1 授权用户jack和mary对目录/test/software(root创建)有写权限

4.2 限制用户使用su

4.3 对普通用户授权:sudo

五、批量添加用户

六、密码破解


导言

对用户的管理分成两部分:一是对用户的管理,二是对用户组的管理。

章节大纲:

  • 用户/用户组管理配置文件
  • 用户管理命令
  • 用户组管理命令
  • 用户授权
  • 批量添加用户

一、用户/用户组配置文件

  • 用户信息文件:/etc/passwd
  • 用户密码文件:/etc/shadow
  • 用户组文件:/etc/group
  • 用户组密码文件:/etc/gshadow
  • 用户配置文件:/etc/login.defs ,  /etc/default/useradd
  • 新用户信息文件所在目录:/etc/skel
  • 登录信息文件:/etc/motd

1.1 用户信息文件:/etc/passwd

参考笔记:Linux笔记——/etc/passwd文件_艾特5号的博客-CSDN博客

1.2 用户密码文件:/etc/shadow

参考笔记:Linux笔记——/etc/shadow文件_艾特5号的博客-CSDN博客

1.3 新用户信息文件所在目录:/etc/skel

参考笔记:Linux笔记——/etc/skel_艾特5号的博客-CSDN博客

1.4 用户其他配置文件:/etc/login.defs , /etc/default/useradd

/etc/login.defs参考笔记:Linux笔记——/etc/login.defs文件_艾特5号的博客-CSDN博客_linux login.defs

/etc/default/useradd参考笔记:Linux笔记——/etc/default/useradd_艾特5号的博客-CSDN博客_/etc/default/useradd

1.5 登录信息文件:/etc/motd

参考笔记:Linux笔记——/etc/motd文件,/etc/issue.net文件_艾特5号的博客-CSDN博客

二、用户管理命令

2.1 useradd 添加用户

  • useradd设置选项用户名 -D 查看缺省参数
    • u:UID

    • g:区卫生所属用户组GID

    • G:指定用户所属多个组

    • d:宿主目录

    • s:命令解释器Shell

    • c:描述信息,有空格需要用” “保护起来

    • e:指定用户失效时间

  • passwd mary:设置/修改账户密码
  • 手工添加用户

注:

  1. 每添加一个用户都有其功能和目的,所以每个用户都会有角色身份,属于一个或多个组,没有组身份的用户不建议轻易添加。添加用户的时候宿主目录不要是系统已经有的目录。

  2. Linux中,useradd和adduser命令功能一样,设置选项格式都一样。

示例1:使用useradd添加用户

[root@centos01 directory]# useradd -u 6666 -g ych -G ych02,root -d /test -s /bin/bash -c "project zhangsan" -e 2050-12-30 jack
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
[root@centos01 directory]# passwd jack
更改用户 jack 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@centos01 directory]# su - jack
[jack@centos01 ~]$

示例2:手动添加用户

参考笔记:Linux笔记——/etc/shadow文件_艾特5号的博客-CSDN博客

2.2 userdel 删除用户

userdel -r 用户名
#-r:删除用户目录
#缺点:只能删除用户在配置文件中的信息和宿主目录,其他目录下该用户创建的文件没有被删除

手动删除用户步骤:

  1. 删除/etc/passwd,/etc/shadow文件中用户信息

  2. 删除/etc/group中用户信息

  3. 删除用户创建的文件

查找某个用户创建的文件方法:

  1. find /home -user jack //在/home目录下查找所有者是jack的文件

  2. find / -uid 1002 //在/目录下查找uid是1002的文件

  3. find / -gid 888 //在/目录下查找gid是888的文件

查找文件并删除方法:

find /home -user jack -ok rm {} \; //查找/home下所有者为jack的文件并删除

find /home -user jack -exec rm {} \;

2.3 usermod 修改用户信息

#将用户mary添加到softgroup用户组中
usermod -G softgroup mary 

两种添加用户到组的方法:

  • usermod -G 组名 用户名

  • gpasswd -a 用户名 组名

#锁定、禁用用户
usermod -L mary

两种锁定用户的方法:

  • usermod -L 用户名

  • passwd -l 用户名

锁定用户的原理:在/etc/shadow文件中,对用户的加密密码前加”!"使密码不可用。

#解锁、启用用户
usermod -U mary

两种解锁用户的方法:

  • usermod -U 用户名

  • passwd -u 用户名

2.4 其他用户管理命令

指令作用备注
pwck检测/etc/passwd文件(锁定文件),检测文件是否信息有误Linux有,Unix没有
vipw编辑/etc/passwd文件(锁定文件),和vi唯一的区别就是会锁定文件,一旦锁定,其他用户就无法编辑了,只能以只读方式打开防止多个用户同时编辑
id查看用户id和组id信息
finger查看用户详细信息:finger 用户名
su切换用户(su - 环境变量切换);su 用户名切换的时候,环境不改变,即搜索路径和目录都不会改变;而su - 用户名切换的时候环境会随之改变,切换到新用户的宿主目录,更新为新用户的搜索路径echo $PATH 可以查看用户缺省路径(也是环境变量之一)
passwd -S查看用户密码状态:passwd -S 用户名 (本质是呈现/etc/shadow文件里的内容)
passwd -d清空用户密码:passwd -d 用户名
who、w查看当前登录用户信息

2.5 chage更改用户密码国企信息(本质是更改/etc/shadow里面的信息)

  • -l (小写l):查看用户在/etc/shadow中的各种设置信息

  • -m:密码修改最小天数

  • -M:密码修改最大天数

  • -d:密码最后修改的日期

  • -I (大写I):密码过期后,锁定账户的天数

  • -E:设置密码的过期日期,如果为0,代表密码立即过期;如果为-1,代表密码永不过期

  • -W:设置密码过期前,开始警告的天数

2.6 启动或停用shadow功能

  • 用户:pwconv / pwunconv

  • 用户组:gpwconv / gpwunconv

Linux 中密码设置机制:先将加密密码写到/etc/passwd中,然后系统自动调用pwconv,将加密密码从/etc/passwd写到/etc/shadow中

2.7 其他不重要的

system-config-users:在系统里没找到这个命令

authconfig,对应的配置文件是/etc/sysconfig/authconfig

三、用户组管理命令

3.1 添加用户组:groupadd

#创建用户组webadmin,其GID为888
groupadd -g 888 webadmin  

3.2 删除用户组:groupdel 组名

[root@centos01 ~]# groupdel softadm
groupdel:不能移除用户“mary”的主组

#修改mary的组ID为其他组的组ID
[root@centos01 ~]# vim /etc/passwd

[root@centos01 ~]# groupdel softadm

3.3 修改用户组信息:groupmod

#将组名webadmin修改为apache
groupmod -n apache webadmin

#修改webadmin组ID为886
groupmod -g 886 webadmin

3.4 gpasswd设置组密码及管理组内成员

  • -a:添加用户到用户组

  • -d:从用户组中删除用户

  • -A:设置用户组管理员,当一个普通用户成为组管理员之后就可以对这个组的成员和权限进行操作

  • -r:删除用户组密码

  • -R:禁止用户切换为该组

#添加用户到用户组
gpasswd -a mary webadmin
#从用户组中删除用户
gpasswd -d mary webadmin
#设置为用户组管理员
gpasswd -A mary webadmin
#设置用户组密码
gpasswd webadmin
#删除用户组密码
gpasswd -r webadmin
#禁止用户切换到该组
gapsswd -R webadmin

用户组密码的作用:

当用户不是组内成员,但是想要享受该组的权限的时候,如果该用户知道该组密码,那么可以切换到该组。

示例:

[ych@centos01 ~]$ grep webadmin /etc/group
webadmin:x:888:jack,mary
#切换到用户组
[ych@centos01 ~]$ newgrp webadmin
密码:
#查看当前用户属于哪些用户组
[ych@centos01 ~]$ id
uid=1000(ych) gid=888(webadmin) 组=888(webadmin),1000(ych) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ych@centos01 ~]$ groups
webadmin ych

3.5 其他用户组管理命令

指令作用
groups查看用户隶属于哪些用户组
newgrp切换用户组
grpck用户组配置文件检测
chgrp修改文件所属组
vigr编辑/etc/group文件(锁定文件)

两种添加用户到组的方法:

  • usermod -G 组名 用户名

  • gpasswd -a 用户名 组名

3.6 启动或停用shadow功能

  • 用户:pwconv / pwunconv

  • 用户组:gpwconv / gpwunconv

四、用户授权

其实这个用户授权,就是对前面知识的运用。前面我们已经学习了如何创建用户,如何创建用户组,怎样将用户添加到用户组,怎样删除用户组中的用户等,用户授权就是对这些知识的运用。

4.1 授权用户jack和mary对目录/test/software(root创建)有写权限

  • 方法一:要想某个用户对目录有w权限,只需要成为该目录的所有者;但是目录的所有者只有一个人,故对多个用户无法实现

  • 方法二:设置目录其他人w权限,但是这样所有人都有w权限,而不是仅部分人有

  • 方法三:将需要有w权限的用户添加到组,然后将该组设为目录的所属组,给所属组w权限——最优方法

方法三代码:

#root用户创建目录 /test/software,并查看目录权限
[root@centos01 test]# mkdir -v /test/software
mkdir: 已创建目录 "/test/software"
[root@centos01 test]# ls -ld /test/software/
drwxr-xr-x. 2 root root 6 12月 29 13:59 /test/software/

#切换到用户mary,在该目录下创建文件——失败!
[root@centos01 test]# su - mary
上一次登录:三 12月 28 16:27:28 CST 2022pts/1 上
/usr/bin/id: cannot find name for group ID 1004
[mary@centos01 ~]$ touch /test/software/file01
touch: 无法创建"/test/software/file01": 权限不够

#切换到root用户解决问题
[mary@centos01 ~]$ su - root
密码:
上一次登录:四 12月 29 09:07:03 CST 2022pts/1 上

#首先新建一个组 softadm
[root@centos01 ~]# groupadd -g 1004 softadm

#然后,将用户jack和mary 添加到该组
[root@centos01 ~]# usermod -G softadm jack
[root@centos01 ~]# gpasswd -a mary softadm
正在将用户“mary”加入到“softadm”组中

#查看softadm组中是否有刚添加的两位用户
[root@centos01 ~]# grep softadm /etc/group
softadm:x:1004:jack,mary

#接着,修改目录所属组
[root@centos01 ~]# chgrp -Rv softadm /test/software/
changed group of "/test/software/" from root to softadm
[root@centos01 ~]# ls -ld /test/software/
drwxr-xr-x. 2 root softadm 6 12月 29 13:59 /test/software/

#再然后,修改目录所属组权限
[root@centos01 ~]# chmod g+w /test/software/
[root@centos01 ~]# ls -ld /test/software/
drwxrwxr-x. 2 root softadm 6 12月 29 13:59 /test/software/

#最后,切换到用户mary,验证是否有目录w权限
[root@centos01 ~]# su - mary
上一次登录:四 12月 29 14:00:08 CST 2022pts/1 上
[mary@centos01 ~]$ touch /test/software/file01
[mary@centos01 ~]$ ls /test/software/
file01

说明

一般创建目录的时候缺省目录权限:755,即只有所有者对目录有w权限。

4.2 限制用户使用su

查看/bin/su,发现它有SetUID权限,也就是普通用户也可以使用su 切换到root,就会有机会尝试破解root密码,为了限制普通用户权限,只保留个别用户可以使用su - root,其他用户不可使用。方法如下:

  • 创建用户组:groupadd sugroup

  • 修改/bin/su权限为其他人无权限:chmod 4550 /bin/su

  • 将sugroup设为/bin/su的所属组:chgrp sugroup /bin/su

  • 查看/bin/su属性:ls -l /bin/su

  • 设定之后,只有sugroup组中的用户可以使用su切换到root

  • 添加指定用户到sugroup中:usermod -G sugroup student01 或 gpasswd -a student01 sugroup

#修改前查看su属性
[root@centos01 test]# ls -l `which su`
-rwsr-xr-x. 1 root root 32128 10月  1 2020 /bin/su

#创建用户组
[root@centos01 test]# groupadd -g 888 sugroup

#将sugroup设为所属组
[root@centos01 test]# chgrp sugroup /bin/su
[root@centos01 test]# ls -l /bin/su
-rwxr-xr-x. 1 root sugroup 32128 10月  1 2020 /bin/su

#设置su所属组权限,取消其他人权限
[root@centos01 test]# chmod 4550 /bin/su
[root@centos01 test]# ls -l /bin/su
-r-sr-x---. 1 root sugroup 32128 10月  1 2020 /bin/su

#添加新用户
[root@centos01 test]# useradd -u 1002 -g ych -d /home/student01 -s /bin/bash student01
[root@centos01 test]# passwd student01
更改用户 student01 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@centos01 test]# useradd -u 1003 -g ych -d /home/student02 -s /bin/bash student02
[root@centos01 test]# passwd student02
更改用户 student02 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

#将新用户加入到sugroup中
[root@centos01 test]# usermod -G sugroup student01

#student01在sugroup中,student02不在sugroup中
[root@centos01 test]# su - student01
[student01@centos01 ~]$ su - student02
密码:
#student02不可使用su切换到其他用户,通过exit退出登录
[student02@centos01 ~]$ su - root
-bash: /bin/su: 权限不够
[student02@centos01 ~]$ su - student01
-bash: /bin/su: 权限不够
[student02@centos01 ~]$ ll /bin/su
-r-sr-x---. 1 root sugroup 32128 10月  1 2020 /bin/su
[student02@centos01 ~]$ su - ych
-bash: /bin/su: 权限不够
[student02@centos01 ~]$ exit
登出

#student01可以使用su切换到其他用户
[student01@centos01 ~]$ su - root
密码:
上一次登录:五 12月 30 09:37:22 CST 2022pts/0 上
[root@centos01 ~]# 

4.3 对普通用户授权:sudo

sudo表示“superuser do",sudo可以让普通用户以root的身份执行一些命令。

用sudo代替su:

  • 在执行sudo命令时,临时成为root

  • 不会泄露root口令

  • 仅向用户提供有限的命令使用权限

配置文件:/etc/sudoers,编辑配置文件命令visudo

普通用户使用命令sudo

格式:用户名(%组名) 主机地址= 命令1(绝对路径), 命令2(绝对路径),...

注意:

  1. 主机地址可以是主机名也可以是主机的IP地址

  2. hostname可以查看主机名

  3. 命令写绝对路径。因为以前黑客在侵入别人系统的时候,经常会做一个操作,把命令替换掉,比如说ls这个命令,在他侵入的目录里设置这个文件,并改变ls的缺省路径,当用户执行ls的时候,先去检索黑客侵入的目录下的文件并执行, 这样黑客的目的就达到了。

  4. 多个命令用“ ,”隔开。

  5. 每个用户都可以用sudo -l 查看当前用户可以以root身份执行哪些命令。

  6. 普通用户执行sudo命令的格式:sudo 命令(绝对路径) [命令的其他部分内容]。

  7. 对用户组授权例子:%wheel ALL=(ALL) ALL

  8. “sudo是把root可以执行的命令授权给普通用户”这种说法是错误的,sudo本质是让普通用户以root的身份执行一些命令,这些命令可以不是root的而是其他普通用户的。

  9. 用sudo授权的时候命令最好精确化,精确到这个命令具体的操作对象或内容。

示例1:sudo使用——让普通用户ych可以使用命令useradd、userdel

  1. 查看主机地址和useradd、userdel的绝对路径

    [ych@centos01 ~]$ hostname
    centos01
    [ych@centos01 ~]$ which -ai useradd userdel
    /usr/sbin/useradd
    /usr/sbin/userdel
  2. 编辑sudo的配置文件:/etc/sudoers,root执行visudo命令

    [root@centos01 ~]$ visudo

  3.  切换到普通用户ych,执行useradd指令

    [root@centos01 ~]# su - ych
    上一次登录:日 1月  1 16:54:46 CST 2023pts/0 上
    
    [ych@centos01 ~]$ /usr/sbin/useradd student03
    useradd: Permission denied.
    useradd:无法锁定 /etc/passwd,请稍后再试。
    
    #sudo使用格式:sudo 命令(绝对路径) [其他内容]
    #第一次使用sudo的时候需要验证普通用户的密码
    [ych@centos01 ~]$ sudo /usr/sbin/useradd student03
    [sudo] ych 的密码:

示例2:sudo使用——精确化授权

以给普通用户授权关机命令

  1. 编辑sudo配置文件:/etc/sudoers

    [root@centos01 ~]# visudo

  2. 普通用户执行该命令

    [root@centos01 ~]# su - ych
    上一次登录:日 1月  1 17:13:18 CST 2023pts/0 上
    [ych@centos01 ~]$ sudo -l
    [sudo] ych 的密码:
    匹配 %2$s 上 %1$s 的默认条目:
        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,
        env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2
        QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION
        LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER
        LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
        secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    用户 ych 可以在 centos01 上运行以下命令:
        (root) /usr/sbin/useradd, /usr/sbin/userdel
        (root) /usr/sbin/shutdown -h now
    [ych@centos01 ~]$ sudo /usr/sbin/shutdown -k now
    对不起,用户 ych 无权以 root 的身份在 centos01 上执行 /usr/sbin/shutdown -k now。
    [ych@centos01 ~]$ sudo /usr/sbin/shutdown -h now

    可以看到,普通用户执行shutdown -k now不行,只能执行shutdown -h now。我们在给普通用户授权的时候,遵循权限越少越好,就像这里,不要把整个shutdown命令授权给普通用户,而是只把shutdown -h now这个授权给普通用户,那么普通用户使用shutdown的时候只能做一个动作,这样对整个系统相对而言更安全。

示例3:假设有一台Linux服务器是一个web server,用的是Apache,web server服务器搭建好后,授权一个普通用户完全管理这个Apache服务器。需要如何做?

搭建Apache,参考笔记:Linux笔记——部署Apache_艾特5号的博客-CSDN博客

分析

若让一个普通用户完全管理整个Apache web server,那么这个普通用户需要具备哪些权限?

  1. 编辑Apache配置文件

  2. 使用Apache启动脚本

  3. Apache是一个web server,管理网站需要能更新网页

照这个思路,就是管理员需要授权给普通用户的权限。

1、授予普通用户编辑Apache配置文件权限

Apache在所有的操作系统里面配置文件都叫httpd.conf,可以用find查找配置文件的路径,也可以用rpm -ql查询软件包安装的时候文件路径:

[root@centos01 Packages]# rpm -ql httpd | more

 可以看到httpd配置文件路径是:/etc/httpd/conf/httpd.conf。查看该文件的权限如下:

[root@centos01 Packages]# ls -l /etc/httpd/conf/httpd.conf
-rw-r--r--. 1 root root 11753 1月  14 2022 /etc/httpd/conf/httpd.conf

只有root有w权限,但是现在想要普通用户管理这个配置文件,那么普通用户就需要有w权限,授予普通用户w权限有以下三种的方式:

  • 将普通用户设为文件所有者 chown

  • 添加用户组并设为文件所属组,赋予所属组w权限,将普通用户添加到该组 groupadd,chgrp,gpasswd

  • sudo授权:visudo 用户 主机地址= /bin/vi /etc/httpd/conf/httpd.conf

以第三种方式为例:

[root@centos01 Packages]# visudo

 保存退出之后,切换到普通用户编辑httpd配置文件

[root@centos01 Packages]# su - ych
上一次登录:二 1月  3 11:12:57 CST 2023pts/0 上
[ych@centos01 ~]$ sudo /bin/vi /etc/httpd/conf/httpd.conf
[sudo] ych 的密码:

进入配置文件后,修改并保存,可以成功保存,普通用户拥有了编辑httpd配置文件的权限了。

在这里我们不是把整个vi的权限授予给普通用户,而是将vi对/etc/httpd/conf/httpd.conf的编辑权限授予给普通用户,这样普通用户只能编辑httpd的配置文件,而不能编辑其他的配置文件,这就是我们说的给与最小的权限的意思。

[ych@centos01 ~]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 ych 可以在 centos01 上运行以下命令:
    (root) /usr/sbin/useradd, /usr/sbin/userdel
    (root) /usr/sbin/shutdown -h now
    (root) /bin/vi /etc/httpd/conf/httpd.conf
[ych@centos01 ~]$ sudo /bin/vi /etc/shadow
[sudo] ych 的密码:
对不起,用户 ych 无权以 root 的身份在 centos01 上执行 /bin/vi /etc/shadow。

2、授予普通用户启动Apache等权限

使用man apachectl可以查看httpd服务有哪些操作:

 需要授予给普通用户的操作有:start , reload(作用:配置文件修改后重新读取配置文件使其生效) , status(查看状态) , configtest(检测语法错误);其他的stop、restart等操作不允许普通用户用,因为一般web server是不需要关闭的,管理web server是要在它异常停止的时候启动以下。这些操作可以使用命令apachectl执行,也可以使用systemctl执行。

#开启httpd:普通用户不可执行
apachectl start
systemctl start httpd  
#关闭httpd:普通用户不可执行
apachectl stop
systemctl stop httpd  
#重新载入httpd配置文件
apachectl reload        #普通用户可执行
systemctl reload httpd  #普通用户不可执行
#查看httpd服务状态:普通用户可执行
apachectl status
systemctl status httpd  
#检查语法错误:普通用户可执行
apachectl configtest
#systemctl没有搜到configtest

查看这两个命令的绝对路径:

[root@centos01 Packages]# which apachectl systemctl
/sbin/apachectl
/bin/systemctl

那么可以这样编辑/etc/sudoers文件:

 其实主要是start httpd服务需要加到/etc/sudoers文件中,其他的命令普通用户本身就可以执行,但是为了方便查看,都写上去。

#管理员先关闭httpd服务,让普通用户验证是否能打开httpd服务
[root@centos01 Packages]# apachectl stop

#查看httpd服务状态
[root@centos01 Packages]# apachectl status
* httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)
Jan 03 15:39:50 centos01 systemd[1]: Stopping The Apache HTTP Server...
Jan 03 15:39:51 centos01 systemd[1]: Stopped The Apache HTTP Server.
Jan 03 15:40:27 centos01 systemd[1]: Starting The Apache HTTP Server...
Jan 03 15:40:27 centos01 httpd[5700]: AH00558: httpd: Could not reliably de...ge
Jan 03 15:40:27 centos01 systemd[1]: Started The Apache HTTP Server.
Jan 03 15:44:26 centos01 systemd[1]: Reloading The Apache HTTP Server.
Jan 03 15:44:26 centos01 httpd[5958]: AH00558: httpd: Could not reliably de...ge
Jan 03 15:44:26 centos01 systemd[1]: Reloaded The Apache HTTP Server.
Jan 03 16:15:22 centos01 systemd[1]: Stopping The Apache HTTP Server...
Jan 03 16:15:23 centos01 systemd[1]: Stopped The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

#切换到普通用户
[root@centos01 Packages]# su - ych
上一次登录:二 1月  3 16:07:31 CST 2023pts/0 上

#查看普通用户可以以root身份执行哪些命令
[ych@centos01 ~]$ sudo -l
[sudo] ych 的密码:
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 ych 可以在 centos01 上运行以下命令:
    (root) /usr/sbin/useradd, /usr/sbin/userdel
    (root) /usr/sbin/shutdown -h now
    (root) /bin/vi /etc/httpd/conf/httpd.conf
    (root) /sbin/apachectl start, /sbin/apachectl reload, /sbin/apachectl
        status, /sbin/apachectl configtest

#普通用户开启httpd服务
#不加sudo 的时候,需要root验证密码才能开启服务
[ych@centos01 ~]$ apachectl start
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password:
#加sudo 的时候,只需要验证当前用户的密码即可开启服务
[ych@centos01 ~]$ sudo /sbin/apachectl start

#我们发现虽然普通用户可以直接查看httpd服务状态,但是查看的信息是不完整的,用sudo查看的信息才完整
[ych@centos01 ~]$ apachectl status
* httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-01-03 16:16:25 CST; 8s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 8250 (httpd)
   Status: "Processing requests..."
    Tasks: 6
   CGroup: /system.slice/httpd.service
           |-8250 /usr/sbin/httpd -DFOREGROUND
           |-8254 /usr/sbin/httpd -DFOREGROUND
           |-8255 /usr/sbin/httpd -DFOREGROUND
           |-8256 /usr/sbin/httpd -DFOREGROUND
           |-8257 /usr/sbin/httpd -DFOREGROUND
           `-8258 /usr/sbin/httpd -DFOREGROUND
[ych@centos01 ~]$ sudo /sbin/apachectl status
* httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-01-03 16:16:25 CST; 34s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 8250 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
    Tasks: 6
   CGroup: /system.slice/httpd.service
           |-8250 /usr/sbin/httpd -DFOREGROUND
           |-8254 /usr/sbin/httpd -DFOREGROUND
           |-8255 /usr/sbin/httpd -DFOREGROUND
           |-8256 /usr/sbin/httpd -DFOREGROUND
           |-8257 /usr/sbin/httpd -DFOREGROUND
           `-8258 /usr/sbin/httpd -DFOREGROUND
Jan 03 16:16:25 centos01 systemd[1]: Starting The Apache HTTP Server...
Jan 03 16:16:25 centos01 httpd[8250]: AH00558: httpd: Could not reliably de...ge
Jan 03 16:16:25 centos01 systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

3、更新网页的权限

首先要确认网页存放的位置,前面7.4.3.1小节已经描述了在主配置文件/etc/httpd/cong/httpd.conf中查看网页存放位置的参数是DocumentRoot:

[root@centos01 ~]# grep DocumentRoot /etc/httpd/conf/httpd.conf
# DocumentRoot: The directory out of which you will serve your
DocumentRoot "/var/www/html"
    # access content that does not live under the DocumentRoot.

说明网站数据目录/var/www/html,网页数据存放在该目录下,普通用户需要更新网页,那么就需要对该目录有w权限,有两种方法:

  • 设置普通用户为该目录的所有者

  • 创建用户组并设为该目录的所属组,给所属组添加w权限,将普通用户添加到该组中

这两种方式就不举例了,前面都有例子已经用过。另外这里就不能用sudo了,因为没有编辑目录的命令。

五、批量添加用户

  • 方法一:使用命令newusers、chpasswd、pwconv/pwunconv等命令

  • 方法二:shell脚本——后面学到shell编程的时候再补充

示例:方法一步骤:

  • newusers命令:导入用户信息文件,信息文件格式和/etc/passwd格式相同;导入成功后,会自动在/etc/passwd文件中添加这些用户信息,并创建用户的宿主目录

  • pwunconv命令:取消shadow password功能

  • chpasswd命令:导入密码文件(格式 用户名:密码),导入成功后这些密码的加密形式会体现在/etc/passwd中

  • pwconv命令:将密码从/etc/passwd中写到/etc/shadow中

#编辑用户信息,格式和/etc/passwd相同
[root@centos01 directory]# vi users.info

 添加用户

[root@centos01 directory]# newusers < users.info

#查看添加用户后有哪些变化
[root@centos01 directory]# vi /etc/passwd
[root@centos01 directory]# tail -5 /etc/passwd
sister01:x:1010:1000::/home/sister01:/bin/bash
sister02:x:1011:1000::/home/sister02:/bin/bash
sister03:x:1012:1000::/home/sister03:/bin/bash
sister04:x:1013:1000::/home/sister04:/bin/bash
sister05:x:1014:1000::/home/sister05:/bin/bash
[root@centos01 directory]# ls /home
CentOS-7-x86_64-DVD-2009.iso  sister01  sister03  sister05  ych03  mary  sister02  sister04  ych  ych04

取消shadow password功能:

[root@centos01 directory]# pwunconv

编辑密码文件:

[root@centos01 directory]# vi passwd.info

 导入密码文件:

[root@centos01 directory]# chpasswd < passwd.info

#查看变化
[root@centos01 directory]# tail -5 /etc/passwd
sister01:$6$64JM5/hmM5f$DFvF.ROh07I5Jb5PCkixNBJgoJJTZ4f633jmryHGl.4HfYMCb3fsMGGKMLVdK6x1Hot3pL3BuCdznKGsBI8NR1:1010:1000::/home/sister01:/bin/bash
sister02:$6$drmMnLWtaAEt.$dWeuAljNtXPrvmpeGHS3ORIuRaEJz6YoN9EKJ4T8/wO.u8ti3fyB0nodY1DEXSo3KhTGeGR.PYkRzAKM5hYNz.:1011:1000::/home/sister02:/bin/bash
sister03:$6$W32vM1ciIHMA$hN6ivZ9eLQNyA9Avq0AW3Ha78DCZpOMVSPZFDVyxmtiOwLPQlYKHqenRjjIcu5KRsY5zagoqBFq8yQV92Xgrs0:1012:1000::/home/sister03:/bin/bash
sister04:$6$qgT1b/4BqKSyPe$Vq4LNMNHDbkcYurDg9rhKURHpgbrdZtBVxCiRETorTfmhvrG16YNMjodvlsnMOQSiBLgN/OmpSiFa7ttoypP71:1013:1000::/home/sister04:/bin/bash
sister05:$6$2IJcStxES$ExhdTIPFrPUWhF4raTV0KR7jibi5GENp2zjg7IXEaq60Vh..xIm1LrRoxR2Gi8uw15tG31C2rvEmi1w1wwD7T.:1014:1000::/home/sister05:/bin/bash

启用shadow passwd功能:

[root@centos01 directory]# pwconv

#查看变化
[root@centos01 directory]# tail -5 /etc/passwd
sister01:x:1010:1000::/home/sister01:/bin/bash
sister02:x:1011:1000::/home/sister02:/bin/bash
sister03:x:1012:1000::/home/sister03:/bin/bash
sister04:x:1013:1000::/home/sister04:/bin/bash
sister05:x:1014:1000::/home/sister05:/bin/bash

六、密码破解

前面我们讲过,设置密码的时候密码的强度一定要够大,那么怎样测试这个密码的强度够不够大呢?

比如现在管理一个服务器,有很多的用户,如果光要求用户设置自己密码的时候强度要大,但是用户们不一定听,有的听了也不知道怎样强度就够大、自己设置的密码强度算不算大。这时候,我们可以装一个密码增强的软件,这样用户设置密码的时候复杂度不够,系统就不接收,这是一个解决办法。

有很多工具可以检测密码强度够不够大,其中比较出名的就是John the ripper这个软件。

John the Ripper免费的开源软件,是一个快速的密码破解工具,用于在已知密文的情况下尝试破解出明文的破解密码软件,支持大多数的加密算法,如DES、MD4、MD5等。它支持多种不同类型的系统架构,包括Unix、Linux、Windows、DOS模式、BeOS和OpenVMS,主要目的是破解不够牢固的Unix/Linux系统密码。

John the Ripper官方下载地址:https://www.openwall.com/john/

John the Ripper安装过程参考笔记:

Linux笔记——John the Ripper安装_艾特5号的博客-CSDN博客

破解用户密码

已有用户student01,密码设为147258369.假设现在不知道该用户密码,用John the ripper去破解这个密码。过程如下:

#先去获取/etc/passwd和/etc/shadow文件中的用户信息
[root@centos01 ~]# grep student01 /etc/passwd > /test/student01.passwd
[root@centos01 ~]# grep student01 /etc/shadow > /test/student01.shadow

#将用户信息使用unshadow命令合成在一个文件中
[root@centos01 ~]# /test/john-1.9.0-jumbo-1/run/unshadow /test//student01.passwd /test/student01.shadow > /test/student01.john

#查看文件信息,其实就是两个配置文件里的信息的整合
[root@centos01 ~]# cat /test/student01.john
student01:$6$.yuzHiiH$InutAwbKr6VZXwoFBP95UcKnruXGOyUE5H2IrqMA6w0Yk8i9Qpd9xakcReorexBJYmr.DD3lyLAqRc4FHHrZG/:1002:1000::/home/student01:/bin/bash

#使用john破解密码
[root@centos01 ~]# /test/john-1.9.0-jumbo-1/run/john /test/student01.john
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 128/128 SSE4.1 2x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 2 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Warning: Only 5 candidates buffered for the current salt, minimum 8 needed for performance.
Warning: Only 4 candidates buffered for the current salt, minimum 8 needed for performance.
Warning: Only 1 candidate buffered for the current salt, minimum 8 needed for performance.
Warning: Only 4 candidates buffered for the current salt, minimum 8 needed for performance.
Warning: Only 1 candidate buffered for the current salt, minimum 8 needed for performance.
Warning: Only 6 candidates buffered for the current salt, minimum 8 needed for performance.
Warning: Only 2 candidates buffered for the current salt, minimum 8 needed for performance.
Warning: Only 5 candidates buffered for the current salt, minimum 8 needed for performance.
Almost done: Processing the remaining buffered candidate passwords, if any.
Warning: Only 6 candidates buffered for the current salt, minimum 8 needed for performance.
Proceeding with wordlist:/test/john-1.9.0-jumbo-1/run/password.lst, rules:Wordlist
147258369        (student01)
1g 0:00:00:02 DONE 2/3 (2023-01-04 17:31) 0.4464g/s 1414p/s 1414c/s 1414C/s jayson..karla
Use the "--show" option to display all of the cracked passwords reliably
Session completed
#上面绿色字体是破解的密码,与实际设置的一样。

破解密码这个是做个实验演示一下,为了实验的效率,所以设置的密码相对简单。

之前我们说过,Centos7里面加密算法使用的是sha512,是单向不可逆的,所以John the ripper解密其实是猜密码,它会有自己的密码字典,这个密码字典其实就是个索引,这个索引具体是作甚用的,以后再学习。

有些密码强度够大,破解耗时会更久,通过这种方式就能筛选出密码强度低的用户,让其重新设置密码。

Logo

更多推荐