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
使用
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
的原因
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-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
在每台主机上创建
/etc/ssh/shosts.equiv
文件。
输入所有主机的反向查找主机名。
4. 创建
/etc/ssh/ssh_known_hosts
文件
/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
运行
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