当前位置: 首页 > news >正文

安全及应用(更新)

一、账号安全

1.1系统帐号清理

#查看/sbin/nologin结尾的文件并统计
[root@root@localhost ~]# grep '/sbin/nologin$' /etc/passwd |wc -l
40#查看apache登录的shell
[root@root@localhost ~]# grep 'apache' /etc/passwd
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin#改变apache的登录的shell
[root@root@localhost ~]# usermod -s /sbin/bash apache#查看更改结果
[root@root@localhost ~]# grep '/sbin/bash$' /etc/passwd
apache:x:48:48:Apache:/usr/share/httpd:/sbin/bash

1.1.1锁定账户和解锁账户

1.usermod -Lusermod -U

#锁定xiewei账号
[root@root@localhost ~]# usermod -L xiewei#查看谢伟账号
[root@root@localhost ~]# passwd -S xiewei
xiewei LK 1969-12-30 0 99999 7 -1 (Password locked.)#解锁谢伟账号
[root@root@localhost ~]# usermod -U xiewei#查看谢伟账号状态
[root@root@localhost ~]# passwd -S xiewei
xiewei PS 1969-12-30 0 99999 7 -1 (Password set, SHA512 crypt.)

2.passwd -lpasswd -u

#先查看状态
[root@root@localhost ~]# passwd -S xiewei
xiewei PS 1969-12-30 0 99999 7 -1 (Password set, SHA512 crypt.)#锁账户
[root@root@localhost ~]# passwd -l xiewei
Locking password for user xiewei.
passwd: Success#查看账户
[root@root@localhost ~]# passwd -S xiewei
xiewei LK 1969-12-30 0 99999 7 -1 (Password locked.)#解锁账户
[root@root@localhost ~]# passwd -u xiewei
Unlocking password for user xiewei.
passwd: Success#查看账户状态
[root@root@localhost ~]# passwd -S xiewei
xiewei PS 1969-12-30 0 99999 7 -1 (Password set, SHA512 crypt.)

3.usermodpasswd 两个锁账户的命令比较

passwd -l

[root@root@localhost ~]# passwd -l xiewei
Locking password for user xiewei.
passwd: Success#查看passwd -l结果
[root@root@localhost ~]# grep 'xiewei' /etc/passwd
xiewei:x:1000:1000:xiewei:/home/xiewei:/bin/bash
xiewei1:x:1005:1005::/home/xiewei1:/bin/bash
[root@root@localhost ~]# grep 'xiewei' /etc/shadow
xiewei:!!$6$cE/PcSfzNmXqILGt$3x7ix5gmYqeqwkvEuqVq6cllhN3sxZco4Ez1L5E6i0DjssRC9gBp/Ds/0YqOgzYLJdsdvlhAAaVY5EE2h1BAy.::0:99999:7:::
xiewei1:$6$Y0MLY/PCRfQ/BZUN$rjGc5tm9njGip2L5zAi8LYAyz5/pEgQzB6kr/0w41uhA3L1dpS.xsGrUtmJV05P7mnG816l/lZ1OcDkRKONtf0:19894:0:99999:7:::

usermod -l

[root@root@localhost ~]# usermod -L xiewei
[root@root@localhost ~]# ls[root@root@localhost ~]# grep 'xiewei' /etc/shadow
xiewei:!$6$cE/PcSfzNmXqILGt$3x7ix5gmYqeqwkvEuqVq6cllhN3sxZco4Ez1L5E6i0DjssRC9gBp/Ds/0YqOgzYLJdsdvlhAAaVY5EE2h1BAy.::0:99999:7:::
xiewei1:$6$Y0MLY/PCRfQ/BZUN$rjGc5tm9njGip2L5zAi8LYAyz5/pEgQzB6kr/0w41uhA3L1dpS.xsGrUtmJV05P7mnG816l/lZ1OcDkRKONtf0:19894:0:99999:7:::
[root@root@localhost ~]# grep 'xiewei' /etc/passwd
xiewei:x:1000:1000:xiewei:/home/xiewei:/bin/bash
xiewei1:x:1005:1005::/home/xiewei1:/bin/bash

         通过以上不难发现,/etcpasswd现实的结果都是一样的,在信息描述之间出现了一个xiewei,但是再shadow文件中。我们也不难看出,使用usermod命令后,passwd密码位前面只有一个“ !”号,而使用passwd命令后,passwd文件中密码位前面有两个"!!"。

        但是两者锁定的严密性和效果基本相同。而且两者的解锁命令不可互调。

 1.1.2删除账号

userdel -r 用户名

#查看并过滤有哪些xiewei账号
[root@root@localhost ~]# grep 'xiewei' /etc/passwd
xiewei:x:1000:1000:xiewei:/home/xiewei:/bin/bash
xiewei1:x:1005:1005::/home/xiewei1:/bin/bash
xiewei2:x:1006:1006::/home/xiewei2:/bin/bash
xiewei3:x:1007:1007::/home/xiewei3:/bin/bash
xiewei4:x:1008:1008::/home/xiewei4:/bin/bash
xiewei5:x:1009:1009::/home/xiewei5:/bin/bash
xiewei6:x:1010:1010::/home/xiewei6:/bin/bash
xiewei7:x:1011:1011::/home/xiewei7:/bin/bash
xiewei8:x:1012:1012::/home/xiewei8:/bin/bash
xiewei9:x:1013:1013::/home/xiewei9:/bin/bash
xiewei10:x:1014:1014::/home/xiewei10:/bin/bash
xiewei11:x:1016:1016::/xiewei11/:/bin/bash
xiewei12:x:1017:1017::/xiewei12:/bin/bash
xiewei13:x:1018:1018::/xiewei13:/bin/bash#删除账号
[root@root@localhost ~]# userdel -r xiewei13#查看并过滤有哪些xiewei账号
[root@root@localhost ~]# grep 'xiewei' /etc/passwd
xiewei:x:1000:1000:xiewei:/home/xiewei:/bin/bash
xiewei1:x:1005:1005::/home/xiewei1:/bin/bash
xiewei2:x:1006:1006::/home/xiewei2:/bin/bash
xiewei3:x:1007:1007::/home/xiewei3:/bin/bash
xiewei4:x:1008:1008::/home/xiewei4:/bin/bash
xiewei5:x:1009:1009::/home/xiewei5:/bin/bash
xiewei6:x:1010:1010::/home/xiewei6:/bin/bash
xiewei7:x:1011:1011::/home/xiewei7:/bin/bash
xiewei8:x:1012:1012::/home/xiewei8:/bin/bash
xiewei9:x:1013:1013::/home/xiewei9:/bin/bash
xiewei10:x:1014:1014::/home/xiewei10:/bin/bash
xiewei11:x:1016:1016::/xiewei11/:/bin/bash
xiewei12:x:1017:1017::/xiewei12:/bin/bash

 注意: 加-r选项和不加-r选项是有区别的

  • userdel 用户名:仅删除用户账户,保留用户的所有文件。
  • userdel -r 用户名:删除用户账户,并删除用户的主目录和邮件目录,连同所有内容一起删除。

且要注意用户在删除时候没有 正在运行的进行,否则可能会操作失败

1.2密码安全控制 

1.2.1修改密码配置文件

vim /etc/login.defs 

 

PASS_MAX_DAYS 99999      #设置密码有效期99999天。   默认99999天

PASS_MIN_DAYS   0            #表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0

PASS_MIN_LEN    5                #密码最小长度,对于root无效   18位包含密码复杂性 大写 、小写、字符、数字

注解:指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。

PASS_WARN_AGE   7            #指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天。

 1.2.2更改密码

[xiewei@root@localhost ~]$ passwd
Changing password for user xiewei.
Changing password for xiewei.
(current) UNIX password: 
New password: 
BAD PASSWORD: The password is too similar to the old one

①:不能太相似,这里设置的新密码是1234567,它则提示太相似(原密码123456)

New password: 
BAD PASSWORD: The password is shorter than 8 characters

 ②:不能低于8位(root不受限制),这里设置了abcde

[xiewei@root@localhost ~]$ passwd
Changing password for user xiewei.
Changing password for xiewei.
(current) UNIX password: 
passwd: Authentication token manipulation error

③:密码不能为空

[xiewei@root@localhost ~]$ passwd
Changing password for user xiewei.
Changing password for xiewei.
(current) UNIX password: 
passwd: Authentication token manipulation error

④:密码不能设置太简单

1.2.3 查看用户密码有效期

        用于查看指定用户账户的密码有效期信息。它显示了与用户密码相关的各种设置,包括密码上次更改的日期、密码过期的时间、密码最小/最大有效期等。

chage -l 用户名

[xiewei@root@localhost ~]$ chage -l xiewei
Last password change					: never
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

1.Last password change

  • 说明:最后一次更改密码的日期。
  • never
  • 解释:密码从未更改过。这意味着自账户创建以来,用户从未修改过密码。

2.Password expires

  • 说明:密码过期的日期。
  • never
  • 解释:密码永不过期。用户可以一直使用当前密码,不需要定期更改。

3.Password inactive

  • 说明:密码失效的日期。
  • never
  • 解释:密码永不失效。即使用户长时间不登录,密码也不会被自动锁定。

4.Account expires

  • 说明:账户过期的日期。
  • never
  • 解释:账户永不过期。用户可以一直使用这个账户,不会因为过期而被锁定或禁用。

5.Minimum number of days between password change

  • 说明:两次密码更改之间的最小天数。
  • 0
  • 解释:用户可以随时更改密码,没有任何限制。用户可以在同一天内多次修改密码。

6.Maximum number of days between password change

  • 说明:两次密码更改之间的最大天数。
  • 99999
  • 解释:用户可以长达 99999 天(约 273 年)不更改密码。实际上,这意味着密码永不过期,因为这一期限极长。

7.Number of days of warning before password expires

  • 说明:密码过期前警告用户的天数。
  • 7
  • 解释:如果设置了密码过期日期,系统会在密码过期前 7 天警告用户需要更改密码。然而,由于上述设置显示密码永不过期,因此这一警告不会实际触发。

 1.3历史命令

历史命令可能会有隐私,比如密码什么的,所以我们要管理好我们的历史命令

history  查看历史命令

1.3.1临时清理历史命令

[root@root@localhost ~]# history -c
[root@root@localhost ~]# history35  history

 重启后可恢复,或者使用history -r

        我们的历史命令会保存在一个文件中,history -c只能临时清理,重启后还会将该文件中的内容加载到history命令中。history -r这个命令,则是将该文件中内容重新都取到history中。 

简单点说

  • 在当前 shell 会话中,命令历史记录保存在内存中。可以使用 history 命令查看这些历史记录。
  • 使用 history -w 命令可以强制将当前内存中的历史记录写入 ~/.bash_history 文件。

         history 命令展示的是当前 shell 会话中的命令历史记录,包括内存中的未写入文件的记录以及从 ~/.bash_history 文件中读取的记录。严格来说,这些内容不是缓存,而是内存中的记录和磁盘文件的结合。

 

 history -c && history -w

则会将shell 会话中的命令历史记录,还有文件中的命令历史记录清除

 拓展

关于环境变量的读取顺序:
用户登录 ->> 加载~/.bash_profile --> bash_profile中配置了首先是使~/.bashrc生效。.bash_profile”文件中的命令将在该用户每次登录时被执行。.bashrc”文件中的命令会在每次加载“/bin/bash。

# 清除历史命令
vim ~/.bashrc
# 添加以下内容
echo '' > ~/.bash_history

在~/.bash_profile~/.bashrc 中添加以上内容,就会开机自动删除历史命令

        我们可以将echo '' > ~/.bash_history这个命令加入到配置文件中,使其开机加载时候自动生效。我们还可以在/etc/skel/.bash_logout文件中添加下面这行rm -f $HOME/.bash_history 。这样,当用户每次注销时,.bash_history文件都会被删除。

        此外 我们还可以设置历史命令保存条数

设置全局 HISTSIZE:

​​​​​​​sudo vim /etc/profile # 添加以下内容 
HISTSIZE=18#这样历史命令只保存18条

设置当前用户 HISTSIZE:

vim ~/.bash_profile # 添加以下内容 
export HISTSIZE=15历史命令保存15条

1.4终端自动注销

  TMOUT 是一个环境变量,用于指定 Bash shell 的自动注销时间(单位为秒)。如果用户在指定的时间内没有进行任何操作,Shell 会自动退出。老样子,我们还是分为当前用户配置和全局配置

以下我们以“闲置600秒后自动注销”为例

1.4.1全局配置

vi /etc/profile 
#适用于新登录用户 ,因为这个配置文件会在登录过程中读取export TMOUT=600

1.4.2当前用户配置

[root@localhost ~]# export TMOUT=600

 1.4.3取消当前用户配置

[root@localhost ~]# unset TMOUT

        需要注意的是,当正在执行程序代码编译、修改系统配置等耗时较长的操作时,应避免 设置 TMOUT 变量。必要时可以执行“unset TMOUT”命令取消 TMOUT 变量设置

拓展

为什么在耗时操作时避免设置 TMOUT

        在进行耗时操作(如程序编译、系统配置修改等)时,用户可能长时间不进行键盘输入。如果 TMOUT 设置了一个较短的时间,这种长时间不活动可能会导致 Shell 在任务尚未完成时自动退出,从而中断这些操作。这种中断可能导致未保存的工作丢失或系统处于不一致状态。

举个例子

①编译开始前

        你可能已经设置了 TMOUT=300(5 分钟)。由于编译过程需要较长时间,而且你不需要在这段时间内进行任何操作,因此可能会导致 Shell 自动注销,编译过程被中断。

②取消 TMOUT 设置

在开始编译前,执行 unset TMOUT 来取消自动注销:

unset TMOUT

③编译完成后

如果你仍希望保持自动注销功能,可以在编译完成后重新设置 TMOUT

export TMOUT=300

 1.5限制su命令用户

        默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试其他用户(如 root) 的登录密码,这样带来了安全风险。为了加强 su 命令的使用控制,可以借助于 pam_wheel 认证模块,只允许极个别用户使用 su 命令进行切换。实现过程如下:将授权使用 su 命令 的用户添加到 wheel 组,修改/etc/pam.d/su 认证配置以启用 pam_wheel 认证。

配置行解释

1. # auth sufficient pam_rootok.so

它的含义如下:

  • auth: 认证模块类型,表示这是一种认证操作。
  • sufficient: 控制标志,表示如果此模块成功,那么不再需要继续检查其他模块。即,这个模块认证成功后,不需要继续其他认证步骤。
  • pam_rootok.so: 模块名称,pam_rootok 模块会检查当前用户是否是超级用户(UID 为 0)。如果当前用户是 root,则认证成功。

启用这行的效果是,如果当前用户是 root,则不需要进行进一步的认证,可以直接使用 su 命令。

2. #auth required pam_wheel.so use_uid

这行被注释掉了。移除 # 后它的含义如下:

  • auth: 认证模块类型,表示这是一种认证操作。
  • required: 控制标志,表示该模块必须成功通过认证才能继续其他模块。如果该模块失败,则整个认证过程会失败。
  • pam_wheel.so: 模块名称,pam_wheel 模块限制哪些用户可以使用 su 命令。
  • use_uid: 模块参数,表示在检查用户组时使用调用者的真实 UID,而不是有效 UID。

启用这行的效果是,只有属于 wheel 组的用户才可以使用 su 命令来切换用户身份。如果调用 su 的用户不在 wheel 组中,则认证失败。

 拓展

在 Linux 的 PAM(Pluggable Authentication Modules,可插拔认证模块)系统中,控制标志用于决定模块的结果如何影响整体认证过程。控制标志的设置对于 PAM 的工作方式和安全性至关重要。以下是所有控制标志及其解释:

控制标志的类型

1.required

auth required pam_unix.so

描述:该模块必须成功通过认证,否则整个 PAM 认证过程会失败。

行为:无论该模块是否成功,都会继续执行后续的 PAM 模块。但是如果该模块失败,最终的认证结果将会失败。

使用场景:通常用于关键的认证步骤,例如密码验证。

2.requisite

auth requisite pam_securetty.so

描述:该模块必须成功通过认证,否则整个 PAM 认证过程立即失败,并且不再继续后续的 PAM 模块。

行为:如果该模块失败,会立即终止认证过程,并返回失败结果。

使用场景:用于非常关键的认证步骤,一旦失败无需继续其他检查。

3.sufficient

auth sufficient pam_wheel.so trust

描述:如果该模块成功通过认证,则整个 PAM 认证过程立即成功,不再继续后续的 PAM 模块。如果该模块失败,则继续执行后续的 PAM 模块。

行为:如果该模块成功,后续模块不会被执行,认证立即成功;如果该模块失败,则不会影响最终结果,继续执行后续模块。

使用场景:用于可选的认证步骤,如果成功即可终止认证过程。

4.optional

session optional pam_motd.so

描述:该模块的成功或失败不会影响最终的认证结果,除非它是唯一指定的模块。

行为:不论该模块成功或失败,都会继续执行后续的 PAM 模块,最终结果取决于其他模块。

使用场景:用于非关键的认证步骤,例如记录日志或显示消息。

5.include

auth include common-auth

描述:该控制标志指示 PAM 去包括指定的配置文件中的所有模块。

行为:会将指定文件中的所有 PAM 模块配置包含进来,并按照包含的位置执行。

使用场景:用于复用其他 PAM 配置文件中的配置。

6.substack

auth substack common-auth

描述:类似于 include,但会将包含的模块结果返回给调用模块,并根据控制标志处理。

行为:会将指定文件中的所有 PAM 模块配置包含进来,并根据控制标志处理结果。

使用场景:用于将一组模块作为一个子堆栈包含并控制其结果处理。

7.binding

auth binding pam_unix.so

描述:与 required 类似,但如果该模块失败,后续的模块仍会被执行。然而,如果此模块失败,会立即返回失败结果。

行为:如果模块失败,会立即标记认证失败,但不会终止后续模块的执行。

使用场景:类似于 required,但允许后续模块继续执行。

@示例配置文件@

以下是一个示例的 PAM 配置文件,展示了不同控制标志的使用:

auth    required    pam_env.so
auth    required    pam_unix.so
auth    sufficient  pam_ldap.so
auth    requisite   pam_securetty.so
auth    optional    pam_tally2.so
account required    pam_unix.so
account sufficient  pam_localuser.so
password required   pam_unix.so
session optional    pam_motd.so

总结

  • required:关键模块,必须成功,但会继续后续模块。

  • requisite:关键模块,必须成功,失败则立即终止。

  • sufficient:可选模块,成功则立即终止,失败则继续。

  • optional:非关键模块,成功或失败都不影响结果。

  • include:包含指定配置文件中的模块。

  • substack:包含并控制结果的子堆栈模块。

  • binding:类似 required,但失败会立即返回结果,同时继续后续模块。

理解这些控制标志对于正确配置和管理 PAM 模块以确保系统的安全性和功能性至关重要。

#加入组
[root@localhost ~]# sudo gpasswd -a xiewei wheel
Adding user xiewei to group wheel
#查看组成员
[root@localhost ~]# grep wheel /etc/group
wheel:x:10:jingqingguo,xiewei

 ​​​​​​​

        默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试其他用户(如 root) 的登录密码,这样带来了安全风险。为了加强 su 命令的使用控制,可以借助于 pam_wheel 认证模块,只允许极个别用户使用 su 命令进行切换。

1.6PAM安全认证 

1.6.1什么是 PAM(Pluggable Authentication Modules)

        PAM 是 Linux 系统中用于认证的一种灵活的机制,它允许系统管理员通过配置来选择程序的认证方式。PAM 的模块化设计使其能够动态加载和配置,以满足不同应用程序的认证需求。

1.6.2PAM 的工作原理

PAM 认证的过程通常分为以下几个步骤:

  1. 服务(Service):确定要使用 PAM 进行认证的应用程序或服务。

  2. 配置文件(PAM Configuration File):PAM 加载位于 /etc/pam.d/ 目录下的对应配置文件。

  3. 认证模块(PAM Module):根据配置文件,调用位于 /lib64/security/ 下的认证模块进行认证。

1.6.3配置 PAM 认证的过程

1.编辑配置文件

  • PAM 配置文件位于 /etc/pam.d/ 目录下,每个应用程序都有一个对应的配置文件。
  • .so 结尾的文件是 PAM 模块(动态函数库模块),这些模块定义了具体的认证方式。

2.配置文件格式: 每一行代表一个独立的认证过程,通常包含四个字段:

①认证类型(Type)

  • auth:用户身份认证,如输入密码。
  • account:检查账户属性,如账户是否过期。
  • password:用于更新用户信息,如修改密码。
  • session:管理登录会话,如挂载文件系统。

②控制标记(Control Flag)

  • required:必须成功,否则整个认证失败,但继续执行后续模块。
  • requisite:必须成功,否则立即失败,终止认证过程。
  • sufficient:成功即返回,不再执行后续模块;失败则忽略。
  • optional:结果可忽略,一般用于显示信息。

③模块路径(Module Path):默认在 /lib64/security/ 下,非默认路径需填写绝对路径。

④模块参数(Module Arguments):传递给模块的参数,多个参数用空格分隔。

1.6.4关键知识点总结

  • PAM 模块化设计:允许灵活配置认证方式,提供高效和安全的用户认证。

  • 配置文件与模块:位于 /etc/pam.d//lib64/security/ 目录下,通过配置文件调用模块实现认证。

  • 认证类型与控制标记:分别定义认证的类型和控制流程,确保认证的灵活性和安全性。

 

1.7sudo 机制提升权限详解

1.7.1 什么是 sudo?

        在 Linux 系统中,sudo(superuser do)是一种允许普通用户以超级用户或其他用户身份执行特定命令的机制。它避免了直接使用 root 用户,从而减少了安全风险,同时又能满足部分管理权限的需求。

1.7.2 sudo 的优势

  • 权限分配精细:管理员可以精确控制哪些用户能以何种身份执行哪些命令,而无需共享 root 密码。

  • 操作追踪:sudo 可以记录执行过的命令,便于审计和跟踪。

  • 安全性:减少了直接使用 root 用户的风险,即使普通用户获得某些权限,也受到限制和监控。

1.7.3sudo 配置文件(/etc/sudoers)

sudo 的配置文件是 /etc/sudoers,通常使用 visudo 命令编辑,而不是直接使用 vi 或其他编辑器。这是因为 visudo 工具会在保存配置文件时检查语法错误,避免出现无法访问系统的问题。

1.7.4sudoers 文件格式和基本配置

sudoers 文件中的授权记录基本格式如下:

user MACHINE=COMMANDS
  • user:指定的用户名,或者使用 %group 的形式指定用户组(例如 %admin)。

  • MACHINE:配置文件所在的主机名,通常设为 localhost 或实际主机名。

  • COMMANDS:允许用户以 sudo 方式执行的命令列表,需要使用完整的命令路径,多个命令用逗号分隔。

1.7.5sudoers 文件中的主要配置参数

  • NOPASSWD:指定用户执行某些命令时不需要输入密码。

  • PASSWD:指定用户执行某些命令时需要输入密码。

  • Runas:允许用户以某个用户的身份执行命令,常见的如 (root)

1.7.6sudo 命令的常用参数选项

  • -l:列出当前用户可以执行的以及被禁止的命令列表。

  • -v:验证用户的时间戳,如果在短时间内执行多个 sudo 命令,可以免去重复输入密码的步骤。

  • -u:指定以另一个用户的身份执行特定操作。

  • -k:删除时间戳,下一次执行 sudo 命令需要重新输入密码。

1.7.7示例和案例解析

示例一:授权用户执行特定命令

# 编辑 sudoers 文件
visudo
​
# 允许用户 wangliu 执行 /usr/sbin/useradd 和 /usr/sbin/usermod 命令
wangliu ALL=(root) /usr/sbin/useradd, /usr/sbin/usermod

示例二:允许用户临时创建网卡

# 允许用户 Tom 在 kgc 主机上以 root 身份执行 ifconfig 命令
Tom kgc=(root) NOPASSWD: /usr/sbin/ifconfig

1.7.8使用 sudo 的注意事项

  • 安全性考虑:尽量减少允许的命令范围,避免赋予不必要的权限。

  • 审计和监控:定期检查 sudoers 文件,审计用户的 sudo 使用记录。

  • 密码管理:根据安全策略设置是否要求输入密码以及时间戳的管理。

1.7.9结论

        sudo 是管理 Linux 系统中权限的重要工具,能有效降低直接使用 root 用户所带来的安全风险。通过详细配置 sudoers 文件,管理员可以精确控制用户的权限,以及执行特定命令的方式和范围。这种方式不仅提升了系统的安全性,也方便了系统管理工作的进行。

 

相关文章:

安全及应用(更新)

一、账号安全 1.1系统帐号清理 #查看/sbin/nologin结尾的文件并统计 [rootrootlocalhost ~]# grep /sbin/nologin$ /etc/passwd |wc -l 40#查看apache登录的shell [rootrootlocalhost ~]# grep apache /etc/passwd apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin#改变…...

Hadoop权威指南-读书笔记-03-Hadoop分布式文件系统

Hadoop权威指南-读书笔记 记录一下读这本书的时候觉得有意思或者重要的点~ 还是老样子~挑重点记录哈😁有兴趣的小伙伴可以去看看原著😊 第三章 Hadoop分布式文件系统 当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分…...

Rust入门实战 编写Minecraft启动器#2建立资源模型

首发于Enaium的个人博客 我们需要声明几个结构体来存储游戏的资源信息,之后我们需要将json文件解析成这几个结构体,所以我们需要添加serde依赖。 serde { version "1.0", features ["derive"] }资源相关asset.rs use serde::De…...

小白学C++(第一天)基础入门

温馨提醒:本篇文章,请各位c基础不行的童鞋不要贸然观看 C的第一个程序 第一个关键字namespace namespace 是定义空间的名字的关键字,使用格式格式如下: namespace 空间名 { } 其中{ }内的命名空间的成员,可以定义…...

谷歌正在试行人脸识别办公室安全系统

内容提要: 🧿据美国消费者新闻与商业频道 CNBC 获悉,谷歌正在为其企业园区安全测试面部追踪技术。 🧿测试最初在华盛顿州柯克兰的一间办公室进行。 🧿一份内部文件称,谷歌的安全和弹性服务 (GSRS) 团队将…...

【CSS01】CSS概述,使用样式的必要性,CSS语法及选择器

文章目录 一、什么是样式二、使用样式的必要性三、使用样式的几种方式四、CSS基本语法:五、CSS的注释六、CSS选择器——重点相关单词 一、什么是样式 概念: Cascade [kˈskeɪd] Style Sheet [ʃiːt] 级联样式单/表,层叠样式表 CSS有化腐…...

PostgreSQL的pg_bulkload工具

PostgreSQL的pg_bulkload工具 pg_bulkload 是一个针对 PostgreSQL 提供高性能批量数据加载的工具。相较于内置的 COPY 命令,pg_bulkload 更加灵活并且在许多情况下性能更高。它支持数据的强制加载、数据过滤、数据转换以及错误处理等多种功能,非常适合需…...

【Java伴学笔记】Day-01 命令行|环境|编译解释运行|Java的相关分支|Java的特性|字面量

一、关于命令行 图形化界面的缺点 需要加载图片等一系列资源 效率较低 命令行 CMDMicrosoft Learn-CMDWindows CMD常用命令大全(值得收藏) 二、环境 什么是JDK JDK是Java Development Kit的缩写,意为Java开发工具包。它是一个用于开发Java应用…...

如何使用Vue3创建在线三维模型展示?

本文由ScriptEcho平台提供技术支持 项目地址:传送门 代码相关的技术博客 代码应用场景介绍 本段代码使用 RoughJS 库在 HTML5 Canvas 上创建了手绘风格的图像,展示了 RoughJS 库的强大功能,可用于创建具有有机手绘外观的图形。 代码基本…...

使用ndoe实现自动化完成增删改查接口

使用ndoe实现自动化完成增删改查接口 最近工作内容比较繁琐,手里需要开发的项目需求比较多,常常在多个项目之间来回切换,有时候某些分支都不知道自己开发了什么、做了哪些需求, 使用手写笔记的方式去记录分支到头来也是眼花缭乱&a…...

排序 -- 手撕归并排序(递归和非递归写法)

一、基本思想 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有…...

防火墙基础及登录(华为)

目录 防火墙概述防火墙发展进程包过滤防火墙代理防火墙状态检测防火墙UTM下一代防火墙(NGFW) 防火墙分类按物理特性划分软件防火墙硬件防火墙 按性能划分百兆级别和千兆级别 按防火墙结构划分单一主机防火墙路由集成式防火墙分布式防火墙 华为防火墙利用…...

【Vue】使用html、css实现鱼骨组件

文章目录 预览图组件测试案例 预览图 组件 <template><div class"context"><div class"top"><div class"label-context"><div class"label" v-for"(item, index) in value" :key"index&qu…...

Python的多态

在 Python 中&#xff0c;多态&#xff08;Polymorphism&#xff09;是指不同的对象可以对相同的消息&#xff08;方法调用&#xff09;做出不同的响应。 简单来说&#xff0c;多态允许使用一个统一的接口来操作不同类型的对象&#xff0c;而这些对象会根据自身的类型来执行相应…...

001uboot体验

1.uboot的作用&#xff1a; 上电->uboot启动->关闭看门狗、初始化时钟、sdram、uart等外设->把内核文件从flash读取到SDRAM->引导内核启动->挂载根文件系统->启动根文件系统的应用程序 2.uboot编译 uboot是一个通用的裸机程序&#xff0c;为了适应各种芯片&…...

Flask之电子邮件

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录 一、使用Flask-Mail发送电子邮件 1.1、配置Flask-Mail 1.2、构建邮件数据 1.3、发送邮件 二、使用事务邮件服务SendGrid 2.1、注册SendGr…...

Vue 2 与 ECharts:结合使用实现动态数据可视化

在现代前端开发中&#xff0c;数据可视化变得越来越重要。ECharts 是一个强大的数据可视化库&#xff0c;而 Vue 2 则是一个流行的前端框架。本文将介绍如何将 Vue 2 和 ECharts 结合使用&#xff0c;以实现动态数据可视化。 安装与配置 首先&#xff0c;确保你的项目中已经安…...

.net core Redis 使用有序集合实现延迟队列

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。 有序集合的成员是唯一的,但分数(score)却可以重复。 集合是通过哈希表实现的&#xf…...

linux 安装Openjdk1.8

一、在线安装 1、更新软件包 sudo apt-get update 2、安装openjdk sudo apt-get install openjdk-8-jdk 3、配置openjdk1.8 openjdk默认会安装在/usr/lib/jvm/java-8-openjdk-amd64 vim ~/.bashrc export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME${J…...

鸿蒙系统:未来智能生态的引领者

在当今这个日新月异的互联网领域&#xff0c;操作系统作为连接硬件与软件的桥梁&#xff0c;其重要性不言而喻。随着华为鸿蒙系统&#xff08;HarmonyOS&#xff09;的崛起&#xff0c;一场关于操作系统未来的讨论再次被推向高潮。 鸿蒙OS&#xff0c;华为的全新力作&#xff…...

Java语言程序设计——篇二(1)

Java语言基础 数据类型关键字与标识符关键字标识符 常量与变量1、常量2、变量 类型转换自动类型转换强制类型转换 数据类型 数据的基本要素数据的性质&#xff08;数据结构&#xff09;数据的取值范围&#xff08;字节大小&#xff09;数据的存储方式参与的运算 Java是一门强类…...

水果商城系统 SpringBoot+Vue

1、技术栈 技术栈&#xff1a;SpringBootVueMybatis等使用环境&#xff1a;Windows10 谷歌浏览器开发环境&#xff1a;jdk1.8 Maven mysql Idea 数据库仅供学习参考 【已经答辩过的毕业设计】 项目源码地址 2、功能划分 3、效果演示...

半导体制造企业 文件共享存储应用

用户背景&#xff1a;半导体设备&#xff08;上海&#xff09;股份有限公司是一家以中国为基地、面向全球的微观加工高端设备公司&#xff0c;为集成电路和泛半导体行业提供具竞争力的高端设备和高质量的服务。 挑战&#xff1a;芯片的行业在国内迅猛发展&#xff0c;用户在上海…...

深入分析 Android BroadcastReceiver (九)

文章目录 深入分析 Android BroadcastReceiver (九)1. Android 广播机制的扩展应用与高级优化1.1 广播机制的扩展应用1.1.1 示例&#xff1a;有序广播1.1.2 示例&#xff1a;粘性广播1.1.3 示例&#xff1a;局部广播 1.2 广播机制的高级优化1.2.1 示例&#xff1a;使用 Pending…...

从数据到洞察:DataOps加速AI模型开发的秘密实践大公开!

作者 | 代立冬&#xff0c;白鲸开源科技联合创始人&CTO 引言 在AI驱动的商业世界中&#xff0c;DataOps作为连接数据与洞察的桥梁&#xff0c;正迅速成为企业数据战略的核心。 在WOT全球技术创新大会2024北京站&#xff0c;白鲸开源联合创始人&CTO 代立冬 在「大数据…...

全景图三维3D模型VR全景上传展示H5开发

全景图三维3D模型VR全景上传展示H5开发 3D互动体验平台的核心功能概览 兼容广泛格式&#xff1a;支持OBJ、FBX、GLTF等主流及前沿3D模型格式的无缝上传与展示&#xff0c;确保创意无界。 动态交互探索&#xff1a;用户可自由旋转、缩放、平移模型&#xff0c;深度挖掘每一处…...

前端面试题29(js闭包和主要用途)

JavaScript 中的闭包是一个非常强大的特性&#xff0c;它允许一个函数访问并操作其词法作用域之外的变量。闭包的形成主要依赖于函数的作用域链&#xff0c;即函数可以访问在其外部定义的变量&#xff0c;即使外部函数已经执行完毕。下面我会通过几个方面来帮助你理解闭包的概念…...

使用Keil 点亮LED灯 F103ZET6

1.新建项目 不截图了 2.startup_stm32f10x_hd.s Keil\Packs\Keil\STM32F1xx_DFP\2.2.0\Device\Source\ARM 搜索startup_stm32f10x_hd.s 复制到项目路径&#xff0c;双击Source Group 1 3.项目文件夹新建stm32f10x.h&#xff0c; 新建文件main.c #include "stm32f10x…...

流批一体计算引擎-12-[Flink]旁路输出getSideOutput(OutputTag)实现拆分流和复制流

官网旁路输出 Flink拆分流和复制流 我们在处理数据的时候,有时候想对不同情况的数据进行不同的处理,那么就需要把流进行拆分或者复制。 如果是使用filter来进行拆分,也能满足我们的需求,但每次筛选都要保留整个流,然后遍历整个流,显然很浪费性能,假如能够在一个流了多次…...

【Scrapy】 Scrapy 爬虫框架

准我快乐地重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 再去做没流着情泪的伊人 假装再有从前演过的戏份 重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 你纵是未明白仍夜深一人 穿起你那无言毛衣当跟你接近 &#x1f3b5; 陈慧娴《傻女》 Scrapy 是…...