Linux系统管理命令与安全实践

内容分享2小时前发布
1 0 0

table {
border-collapse: collapse;
width: 100%;
margin-bottom: 1rem;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
pre {
background-color: #f8f8f8;
padding: 15px;
border-radius: 4px;
overflow-x: auto;
}

81、在 SQL 查询中,普通连接(join)和左连接(left join)有什么区别?

普通连接示例中,没有宠物的家庭(如

Carpenter 家庭

)不会出现在查询结果里。而

左连接

会让左表中的每个项目都显示在结果中,即使与另一个连接表没有匹配项,没有匹配时对应字段显示为

NULL

值,如

Carpenter 家庭

在左连接查询结果中出现,但宠物类型和名称字段为

NULL

。此外,二者语法也有较大不同。

82、使用useradd命令添加一个用户,同时使用 /etc/skel 目录下的文件填充新用户的主目录。

可以使用以下命令添加用户:


useradd -m 用户名

其中

-m

选项会创建用户的主目录并使用

/etc/skel

下的文件填充。

例如添加用户

jdoe


useradd -m jdoe

83、使用 groupadd 命令添加一个组。

使用命令

groupadd group

,其中

group

为要添加的组名。例如要添加名为

sales

的组,可使用

groupadd sales

84、使用

passwd

命令为新用户设置密码。

使用

passwd [options] username

命令可以交互式地为指定用户名设置密码,密码不能直接在命令行输入。

例如为新用户

bsmith

设置密码,可执行:


passwd bsmith

然后按提示操作。

85、登录新账户,并使用 newgrp 命令切换到新组。

使用新账户的用户名和密码登录系统。

在命令行输入

newgrp 新组名

(需将“新组名”替换为实际要切换到的组名)来完成组的切换。

86、使用groupdel和userdel删除新的组和用户(包括主目录)。

删除组使用命令:

groupdel group

,其中

group

是要删除的组名;删除用户(包括主目录)使用命令:

userdel -r user

,其中

user

是要删除的用户名。例如删除组

finance

和用户

bsmith

(包括主目录),命令分别为:


groupdel finance
userdel -r bsmith

87、在你的个人 crontab 文件中添加一个条目来执行一项任务,比如给你发送一封电子邮件。确认该操作按预期发生。尝试使用五个时间指定符。

可按以下步骤操作:

打开 crontab 文件进行编辑,使用命令

crontab -e

在文件中添加一个新条目,例如要每天早上 8 点发送邮件,可添加

0 8 * * * echo '这是测试邮件' | mail -s '测试' your_email@example.com


其中

your_email@example.com

需替换为你的邮箱地址。

保存并退出文件。

等待到指定时间,检查是否收到邮件以确认操作是否按预期发生。

可通过修改时间指定符来进行更多实验,时间指定符分别对应

– 分钟(0 – 59)

– 小时(0 – 23)

– 每月的某天(1 – 31)

– 月份(1 – 12 或 jan – dec)

– 星期几(0 – 7,0 或 7 为周日,或 sun – sat)

可以是单个值、列表(如 1,3,5)、范围(如 1 – 5 或 wed – fri)或它们的组合。

88、使用at在未来安排一个命令。at与cron有什么不同?


cron系统

:用于定期执行命令,适合需要按固定周期重复执行的任务。


at系统

:用于将一个命令或一组命令的执行推迟到未来某个时间,适合一次性的延迟执行任务,且使用

at

无需创建重复的

cron

条目。

89、在配置中添加 local5 设施。使用 logger 向新的日志文件写入内容,并验证其内容。将你的日志条目与 /var/log/messages 中的条目进行比较。

首先,在

/etc/syslog.conf

中添加一行配置:


local5.* /var/log/local5

然后重启或重新初始化

syslogd

接着使用命令:


logger -p local5.info "Script terminated normally"


local5

设施写入消息。

之后查看

/var/log/local5

文件内容,将其与

/var/log/messages

文件内容进行比较,观察消息的详细程度、来源等方面的差异。

90、查看 /etc/logrotate.conf 文件。/var/log/messages 文件轮转后会发生什么?

下面是给定的【文本内容】:

/var/log/messages

文件轮转后,会执行

postrotate


endscript

之间的脚本,即执行

/usr/bin/killall -HUP syslogd

命令。

91、请简述使用 lpq -P printer、lpc status 和 lpr -P printer file 这三个命令的作用。

以下是调整为 Markdown 格式的文本内容:

lpq -P printer

可查看指定打印机的队列状态,

lpc status

能查看打印机的整体状态,

lpr -P printer file

可将指定文件发送到指定打印机的队列进行打印。

92、使用 ifconfig eth0 或适用于你网络接口的类似命令检查系统的 TCP/IP 配置。判断你是否使用 DHCP,确定你运行的子网类型(A、B 或 C 类地址),判断你是否使用私有地址。然后使用 ifconfig eth0 down 和 ifconfig eth0 up 使接口离线和上线。

可按以下步骤操作:

使用

ifconfig eth0

命令查看系统 TCP/IP 配置。若要确定是否使用 DHCP,可查看配置文件(如

/etc/dhcp/dhclient.conf

或使用

dhclient -v

命令)。

根据输出的 IP 地址和子网掩码判断子网类型。

– A 类地址范围是 1.0.0.0 – 126.255.255.255,子网掩码默认 255.0.0.0;

– B 类地址范围是 128.0.0.0 – 191.255.255.255,子网掩码默认 255.255.0.0;

– C 类地址范围是 192.0.0.0 – 223.255.255.255,子网掩码默认 255.255.255.0。

常见私有地址范围:

– A 类 10.0.0.0 – 10.255.255.255;

– B 类 172.16.0.0 – 172.31.255.255;

– C 类 192.168.0.0 – 192.168.255.255。

使用

ifconfig eth0 down

使接口离线,使用

ifconfig eth0 up

使接口上线。

93、使用dig命令从DNS服务器获取有关域名的信息。

要使用

dig

命令从DNS服务器获取有关域名的信息,可使用如下命令:

查询默认DNS服务器:

dig www.oreilly.com

查询指定DNS服务器:

dig @10.20.10.10 www.oreilly.com

查询PTR记录:

dig -x 208.201.239.100

查询MX记录:

dig mx www.oreilly.com

94、使用traceroute命令来检查到一个指定网站的路由。

可以使用命令

traceroute [网站域名]

来实现,例如要检查到 oreilly.com 的路由,可使用命令:


traceroute oreilly.com

95、与控制文件 /etc/hosts.allow 和 /etc/hosts.deny 关联的守护进程是什么?

tcpd(TCP wrappers)

96、从总体上来说,描述一种在本地文件系统中定位SUID程序的方法。为什么管理员要定期进行这项操作?

可以使用

find

命令定位 SUID 程序,例如:


find /bin -perm -4000 -type f

其中

-perm -4000

选项表示只显示设置了 SUID 位的文件。

管理员定期进行这项操作,是因为 SUID 可能带来安全风险。若不合理授予访问权限,会使系统安全协议失效。因此,管理员需要了解系统中哪些程序设置了 SUID 位,并判断其是否合理。对于不需要 SUID 位的程序,可将其移除。

97、为什么用户应该使用ssh而不是telnet?

SSH简介

SSH是Secure Shell的缩写,是过时的

telnet

命令的替代方案,主要用于与远程主机进行加密的shell会话。而

telnet

不具备加密功能,使用SSH能提高数据传输的安全性。

98、描述影子密码以及存储密码的文件。为什么我们不再在 /etc/passwd 中存储加密的密码字符串了?


影子密码是一种增强系统安全性的密码存储方式,用户加密后的密码被存储在 `/etc/shadow` 文件中,该文件权限受限,并非所有用户都能访问。

过去,Unix 系统将用户加密后的密码字符串存于 `/etc/passwd` 文件的第二个字段,但这种方式存在安全风险。因为该文件所有用户可读,任何用户都能获取其他用户的加密密码。

尽管从加密字符串推导原始密码在数学上困难,但攻击者可使用相同加密算法对随机字符串加密,再与其他用户的加密字符串比对,通过暴力破解尝试足够多的字母和数字组合,最终可能找到匹配的密码。

所以现在大多系统将用户密码存于 `/etc/shadow` 文件以提高安全性。

99、就ulimit命令而言,硬限制和软限制有什么区别?

硬限制由超级用户为用户或用户组设置,不能被超越;软限制也由超级用户设置,但用户在需要时可临时超越(通过调用

ulimit

命令),不过这种增加只在用户的 shell 会话期间有效。硬限制和软限制由超级用户在

/etc/security/limits.conf

文件中为所有用户设置。

100、在有多个管理员的环境中,为什么建议使用sudo而不是su?

使用

sudo

而非

su

的原因

无需向他人提供 root 密码就能运行部分命令

能记录每个已完成和尝试执行的命令,便于追踪每个管理员执行的操作

而多人以 root 身份登录进行维护时,无法确切知晓某个时间是哪个用户登录为 root 并运行了什么命令

101、使用nmap命令可以确定远程系统的哪些信息?

可以确定远程系统开放的端口及端口上运行的服务

还能尝试确定其操作系统

也能发现子网中哪些主机处于“活动”状态

102、描述使用 SSH 在系统间进行基于密钥认证的过程。

基于密钥的 SSH 认证过程

基于密钥的 SSH 认证过程如下:


生成公钥


首先,使用

ssh-keygen

生成公钥。

公钥可在

~/.ssh/id_dsa.pub

中找到。


传输公钥至远程机器


将此公钥传输到远程机器。


添加公钥至授权密钥文件


在远程机器上,把公钥添加到

~/.ssh/authorized_keys2

文件末尾。


实现无密码登录


完成后,拥有对应私钥的用户无需密码即可登录该远程账户。


多用户在多主机上实现批量登录的步骤

若要为多用户在多主机上实现批量登录,需执行以下步骤:

1. 启用 HostbasedAuthentication

在所有主机的

/etc/ssh/sshd_config

配置文件中启用

HostbasedAuthentication

2. 客户端配置

所有主机应将

HostbasedAuthentication

设置为

yes

若有

PreferredAuthentications

语句,应将

hostbased

排在首位。

主机私钥只能由 root 读取。

关于

ssh-keysign


SUID root


若 SSH 包包含

ssh-keysign

可执行文件

其必须为

SUID root


若不包含

ssh-keysign


需通过以下命令使

ssh

可执行文件为

SUID root



bash
chmod u+s /usr/bin/ssh

3. 创建

/etc/ssh/shosts.equiv

文件

在每台主机上创建

/etc/ssh/shosts.equiv

文件。

输入所有主机的反向查找主机名。

4. 创建

/etc/ssh/ssh_known_hosts

文件

在每台主机上创建

/etc/ssh/ssh_known_hosts

文件。

该文件应包含所有相关主机的主机密钥。

可通过正确名称连接所有主机,然后将用户

~/.ssh/known_hosts

文件中的条目复制到系统文件中。


完成配置后的行为

完成上述步骤后:

普通用户可在所有节点间无其他认证地使用 SSH 进行连接。

但 root 用户仍需用户密钥或密码认证。

103、描述如何使用gpg加密文件。

若要加密名为

chapter24.odt

的文件,使只有名为Andy Oram的用户可以使用,可执行命令:


$ gpg -e -u "James Stanger" -r "Andy Oram" chapter24.odt

加密后的文件名为

chapter24.odt.gpg

104、在 /etc/sudoers 中创建一个条目,允许你的用户账户以 root 权限运行任何命令。通过 sudo 运行一些命令并查看 /var/log/messages 文件。你会看到什么条目?这在多管理员环境中有什么用处?


/etc/sudoers

中添加类似以下条目:


your_username ALL=(ALL) ALL

该配置允许指定用户账户以 root 权限运行任何命令。

运行命令后,系统会将用户使用

sudo

执行命令的详细信息记录在

/var/log/messages

中,包括:

时间

主机名

用户名

执行的命令

在多管理员环境中,这种机制有助于:

明确每个管理员执行的具体操作

便于追踪和审计操作记录

从而避免因多人直接以 root 身份登录系统而导致的操作者和操作内容无法确定的问题。

105、查看 /etc/shadow 文件。哪些用户账户没有密码?为什么没有?

bin


daemon


adm


lp

这些用户账户没有密码,它们对应的密码字段为

*

这些账户属于系统账户,用于运行系统进程和维护文件所有权。

并非用于交互式登录,因此被禁用交互式登录,也就无需设置密码。

106、使用chage命令为你的账户设置密码有效期。

chage

是用于维护用户账户密码有效期限制的命令。

可使用以下常用选项设置密码有效期:

-d LASTDAY

:设置自1970年1月1日起,上次更改密码的天数;

-m MINDAYS

:设置两次密码更改之间的最小天数;

-M MAXDAYS

:设置密码的最大有效天数;

-W WARNDAYS

:设置密码到期前系统开始警告用户的天数。


例如

,要设置用户

adam

的密码在90天后到期,每30天才能更改一次密码,在到期前7天开始警告,可使用以下命令:


chage -M 90 -m 30 -W 7 adam

107、运行

ulimit -a

命令,会显示哪些默认限制?对用户设置哪些限制会比较有用?

运行

ulimit -a

显示的默认限制有:

核心文件大小(块,

-c

)为 0

数据段大小(千字节,

-d

)无限制

调度优先级(

-e

)为 0

文件大小(块,

-f

)无限制

待处理信号(

-i

)为 8192

最大锁定内存(千字节,

-l

)为 32

最大内存大小(千字节,

-m

)无限制

打开文件数(

-n

)为 1024

管道大小(512 字节,

-p

)为 8

POSIX 消息队列(字节,

-q

)为 819200

实时优先级(

-r

)为 0

堆栈大小(千字节,

-s

)为 10240

CPU 时间(秒,

-t

)无限制

最大用户进程数(

-u

)为 8192

虚拟内存(千字节,

-v

)无限制

文件锁(

-x

)无限制

对用户设置的有用限制包括:

限制用户可创建的最大文件大小,避免磁盘空间过度占用

限制用户可运行的最大进程数,防止服务器因用户进程过多而停止响应

限制用户可打开的最大文件数,避免内存耗尽

限制用户可持有的最大文件锁数量,防止资源过度占用

108、运行 netstat –tcp –anp | grep LISTEN。系统上哪些进程正在监听 TCP 端口?如果要强化这个系统,会如何更改此配置?

要确定哪些进程正在监听 TCP 端口,需运行以下命令:


netstat --tcp -anp | grep LISTEN

该命令的输出会显示监听 TCP 端口的进程的 PID、名称和端口号等信息。

若要强化系统配置,可采取以下措施:

关闭不必要的监听服务,仅保留必需服务;

限制服务只监听特定 IP 地址和端口;

为监听服务使用强认证和加密;

定期更新服务软件到最新版本以修复安全漏洞;

配置防火墙规则,限制对监听端口的访问。

109、如果你安装了xinetd,进入 /etc/xinetd.d 目录,确定哪些服务已启用。

可在

/etc/xinetd.d

目录下查看各服务配置文件。

若文件中

disable = no

,则该服务启用。

可通过

netstat

命令验证,如检查 imap 服务是否就绪,使用命令:

bash
# netstat --tcp -anp | grep ":143"

110、运行 ssh – keygen –t dsa 命令后,~/.ssh 目录下会创建哪些文件?这些文件的权限是怎样的?

运行该命令后,

~/.ssh

目录下会创建

id_dsa


id_dsa.pub

文件。

id_dsa

是私钥文件,应该只有所有者可读写;

id_dsa.pub

是公钥文件,可随意提供给他人。

111、当你输入命令名时,哪个环境变量保存着 shell 搜索的所有目录列表?a. $LIST b. $VIEW c. $PATH d. $ENV e. 以上都不是

C

© 版权声明

相关文章

暂无评论

none
暂无评论...