跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 安全和强化指南 / 本地安全性 / 用户管理
适用范围 SUSE Linux Enterprise Server 15 SP4

15 用户管理

15.1 各种帐户检查

15.1.1 未锁定的帐户

请务必锁定未用于登录的所有系统帐户和供应商帐户。要获取您系统中未锁定帐户的列表,您可以查找不含! * 开头(在 /etc/shadow 文件中)的加密口令字符串的帐户。如果使用 passwd -l 锁定帐户,将会在加密口令之前添加 !! ,以有效禁用该口令。如果使用 usermod -L 锁定帐户,将会在加密口令之前添加 ! 。默认情况下,许多系统和共享帐户通常都由口令字段中的 *!! 进行锁定,这会让加密口令变为无效字符串。因此,要获取所有未锁定(可加密)帐户的列表,请运行以下命令:

# egrep -v ':\*|:\!' /etc/shadow | awk -F: '{print $1}'

同时确保所有帐户在 /etc/passwd 中的口令字段中都有一个 x。以下命令列出口令字段中没有 x 的所有帐户:

# grep -v ':x:' /etc/passwd

口令字段中的 x 表示该口令已阴影化,例如,需要在 /etc/shadow 文件中查找加密口令。如果 /etc/passwd 中的口令字段为空,则系统将不会查找阴影文件,并且不会在出现登录提示时提示用户提供口令。

15.1.2 未使用的帐户

应从系统中去除未被用户、应用程序、系统或守护程序使用的所有系统帐户或供应商帐户。您可以使用以下命令,查找特定帐户是否拥有任何文件:

# find / -path /proc -prune -o -user ACCOUNT -ls

在此示例中,-prune 选项用于跳过 /proc 文件系统。如果您确定可以删除某个帐户,可以使用以下命令去除该帐户:

# userdel -r ACCOUNT

如果没有 -r 选项,userdel 将不会删除用户的主目录和邮件假脱机目录 (/var/spool/mail/USER)。请注意,许多系统帐户都没有主目录。

15.2 启用口令时效

口令失效是一种普遍采用的最佳实践,但对于一些系统帐户和共享帐户(例如 Oracle)而言,可能需要将其排除。如果应用程序帐户失效,这些帐户的失效口令可能会导致系统服务中断。

通常情况下,应针对系统帐户和共享帐户的口令更改规则/程序制定相应的公司政策。但常规用户帐户口令应该会自动失效。以下示例显示如何针对各个用户帐户设置口令失效。

使用 useradd 命令创建新帐户时,可以使用下表中的文件和参数。将在 /etc/shadow 文件中为每个用户帐户储存此类设置。如果使用 YaST 工具(用户和组管理)添加用户,则会为每个用户提供该设置。下面是各种不同的设置,其中一些也可能是系统范围的设置(例如,/etc/login.defs/etc/default/useradd 的修改):

/etc/login.defs

PASS_MAX_DAYS

口令保持有效的最大天数。

/etc/login.defs

PASS_MIN_DAYS

自上次更改到用户下次可更改口令之前的最小天数。

/etc/login.defs

PASS_WARN_AGE

从上次更改口令到下次提醒更改口令间隔的天数。

/etc/default/useradd

INACTIVE

口令失效后帐户处于禁用状态的天数。

/etc/default/useradd

EXPIRE

帐户失效日期(采用 YYYY-MM-DD 格式)。

注意
注意:现有用户不受影响

在这些修改之前创建的用户不受影响。

请确保在 /etc/login.defs/etc/default/useradd 文件中更改上述参数。审阅 /etc/shadow 文件将显示在添加用户之后如何储存这些设置。

要创建新用户帐户,请执行以下命令:

# useradd -c "TEST_USER" -g USERS TEST

-g 选项指定此帐户的主组:

# id TEST
uid=509(test) gid=100(users) groups=100(users)

/etc/shadow 文件中的测试用户在 /etc/login.defs/etc/default/useradd 中记录的设置如下所示:

# grep TEST /etc/shadow
test:!!:12742:7:60:7:14::

可使用 chage 命令随时修改口令时效。要禁用系统帐户和共享帐户的口令时效,您可以运行以下 chage 命令:

# chage -M -1 SYSTEM_ACCOUNT_NAME

要获取口令失效信息,请运行:

# chage -l SYSTEM_ACCOUNT_NAME

例如:

# chage -l TEST
Minimum: 7
Maximum: 60
Warning: 7
Inactive: 14
Last Change: Jan 11, 2015
Password Expires: Mar 12, 2015
Password Inactive: Mar 26, 2015
Account Expires: Never

15.3 实施更强的口令

在经审计的系统上,请务必限制用户使用可被轻松破解的简单口令。可以将复杂的口令记下来,只要妥善保管即可。有些人主张通过强口令来保护您免受字典攻击,并可通过数次失败尝试之后锁定帐户来防御此类攻击。但此方法并非始终有效。如果进行此类设置,锁定系统帐户可能会使应用程序和系统服务中断,这会产生另一个同样棘手的问题 — 拒绝服务攻击。

但无论怎样,实施有效的口令管理安全措施都很重要。大多数公司会要求口令至少包含一个数字、一个小写字母和一个大写字母。虽然政策各不相同,但要在口令强度/复杂性和管理难易度之间保持平衡可能并不容易。

15.4 使用 PAM 进行口令和登录管理

Linux-PAM(适用于 Linux 的可插入身份验证模块)是一组共享库,可让本地系统管理员选择应用程序该如何对用户进行身份验证。

强烈建议您熟悉 PAM 的功能以及如何利用此体系结构为某个环境提供最佳身份验证设置。您可以完成此配置一次并在所有系统中实施此配置(标准),也可以针对各个主机进行增强(增强安全性 — 按主机/服务/应用程序进行增强)。重点了解该体系结构的灵活性。

要了解有关 PAM 体系结构的详细信息,请参见 /usr/share/doc/packages/pam 目录中的 PAM 文档(提供多种格式)。

下面讨论的是如何修改默认 PAM 堆栈的示例(特别是围绕口令政策展开),例如口令强度、口令重复使用和帐户锁定。虽然只涉及了少数几种可能性,但它们是一个良好的开端,向您展示了 PAM 的灵活性。

重要
重要:pam-config 限制

pam-config 工具可用于配置包含全局选项的 common-{account,auth,password,session} PAM 配置文件。这些文件包含以下注释:

# This file is autogenerated by pam-config. All changes
# will be overwritten.

个别服务文件(例如 login、password、sshdsu)必须直接编辑。您可以选择直接编辑所有文件,而不使用 pam-config,虽然 pam-config 包含转换较旧配置、更新当前配置和健全性检查等有用功能。有关详细信息,请参见 man 8 pam-config

15.4.1 口令强度

SUSE Linux Enterprise Server 可利用 pam_cracklib 库测试弱口令,并在确定口令明显较弱时建议使用较强的口令。以下参数示例可能属于公司口令策略的一部分,或者由于审计约束而需要的某些设置。

PAM 库遵循定义的流程。通常,设计完美堆栈的最佳方式是考虑所有要求和策略并绘制流程图。

表 15.1︰ 口令强制执行的示例规则/约束

pam_cracklib.so

minlen=8

口令的最小长度为 8

pam_cracklib.so

lcredit=-1

小写字母的最少数量为 1

pam_cracklib.so

ucredit=-1

大写字母的最少数量为 1

pam_cracklib.so

dcredit=-1

数字的最少数量为 1

pam_cracklib.so

ocredit=-1

其他字符的最少数量为 1

要设置这些口令限制,请使用 pam-config 工具指定您要配置的参数。例如,可使用如下命令修改最小长度参数:

> sudo pam-config -a --cracklib-minlen=8 --cracklib-retry=3 \
--cracklib-lcredit=-1 --cracklib-ucredit=-1 --cracklib-dcredit=-1 \
--cracklib-ocredit=-1 --cracklib

现在校验新口令限制是否适用于新口令。登录非 root 帐户并使用 passwd 命令更改口令。请注意,如果您在 root 下运行 passwd 命令,则不会强制执行上述要求。

15.4.2 限制使用先前的口令

pam_pwhistory 模块可用于配置无法重复使用的先前口令数量。以下命令可在系统上实施口令限制,如此至少六个月内无法重复使用某个口令。

> sudo pam-config -a --pwhistory --pwhistory-remember=26

回想一下,在第 15.2 节 “启用口令时效”中我们将 PASS_MIN_DAYS 设置为 7,该选项指定了两次口令更改之间的最少天数。因此,如果 pam_unix 配置为记住 26 个口令,则至少六个月(26*7 天)内无法重复使用先前曾使用过的口令。

pam-config 命令生成的 PAM 配置 (/etc/pam.d/common-auth) 如下所示:

auth      required   pam_env.so
auth      required   pam_unix.so     try_first_pass
account   required   pam_unix.so     try_first_pass
password  requisit   pam_cracklib.so
password  required   pam_pwhistory.so        remember=26
password  optional   pam_gnome_keyring.so    use_authtok
password  required   pam_unix.so     use_authtok nullok shadow try_first_pass
session   required   pam_limits.so
session   required   pam_unix.so     try_first_pass
session   optional   pam_umask.so

15.4.3 登录失败次数太多后锁定用户帐户

在到达所定义的 ssh、login、su 或 sudo 失败尝试次数后锁定帐户是一种常见的安全做法。但如果应用程序、管理员或 root 用户被锁定,则可能会导致服务中断。

重要
重要:拒绝服务攻击

攻击者可能会通过故意造成登录失败,轻易地滥用口令失败计数来发起拒绝服务攻击。

请仅在必要时才使用口令失败计数。将锁定限制在必要的最小范围,且不要锁定关键帐户。请记住,锁定不仅会应用于人类用户,而且还会应用于用来提供服务的系统帐户。

SUSE Linux Enterprise Server 默认不会锁定帐户,而是提供 PAM 模块 pam_tally2 来方便实现口令失败计数。将以下行添加到 /etc/pam.d/login 的最前面可在六次登录失败之后锁定所有用户(root 除外),并在十分钟后自动解锁帐户:

auth required pam_tally2.so deny=6 unlock_time=600

下面是一个完整的 /etc/pam.d/login 文件示例:

#%PAM-1.0
auth     requisite      pam_nologin.so
auth     include        common-auth
auth     required       pam_tally2.so deny=6 unlock_time=600
account  include        common-account
account  required       pam_tally2.so
password include        common-password
session  required       pam_loginuid.so
session  include        common-session
#session  optional       pam_lastlog.so nowtmp showfailed
session  optional       pam_mail.so standard

您也可以锁定 root,不过显然您必须非常确定要执行此操作:

auth required pam_tally2.so deny=6 even_deny_root unlock_time=600

您可以为 root 用户定义不同的锁定时间:

auth required pam_tally2.so deny=6 root_unlock_time=120  unlock_time=600

如果您希望必须由管理员来解锁帐户,请不要使用 unlock_time 选项。下面两个示例命令显示失败的登录尝试次数以及如何锁定用户帐户:

> sudo pam_tally2 -u username
Login           Failures Latest failure     From
username            6    12/17/19 13:49:43  pts/1

> sudo pam_tally2 -r -u username

尝试访问的默认位置记录在 /var/log/tallylog 中。

如果用户在登录超时失效后或在管理员重设置其帐户之后成功登录,计数器将重设置为 0。

配置其他登录服务,以在 /etc/pam.d/ 下其各自的配置文件中使用 pam_tally2sshd、su、sudo、sudo-isu-l

15.5 限制 root 登录

默认情况下,为 root 用户分配了口令,并且该用户可以使用各种方法进行登录 — 例如,在本地终端上、在图形会话中,或者通过 SSH 远程登录。应尽可能限制使用这些方法登录。应避免共享使用 root 帐户。而是由各个管理员使用 susudo 等工具(有关详细信息,请键入 man 1 suman 8 sudo)获取提升的特权。如此可将 root 登录与特定用户相关联。同时还可增加了另一层安全保护;要获得完全的 root 访问权限,需要破解的不仅仅是 root 口令,而是 root 口令以及管理员普通帐户的口令。本节说明如何限制在不同级别系统上的直接 root 登录。

15.5.1 限制本地文本控制台登录

TTY 设备通过控制台提供文本模式的系统访问权限。对于桌面系统,通过本地键盘进行访问;如果是服务器系统,则通过连接到 KVM 交换机或远程管理卡(例如 ILO 和 DRAC)的输入设备进行访问。Linux 默认会提供 6 个不同的控制台,在文本模式下运行时,可通过组合键 AltF1AltF6 切换它们;在图形会话中运行时,可通过组合键 CtrlAltF1CtrlAltF6 进行切换。关联的终端设备命名为 tty1tty6

下面的步骤限制对第一个 TTY 的 root 访问。此访问方法仅作为系统的紧急访问方式,绝不应将其用于日常系统管理任务。

注意
注意

此处显示的步骤根据 PC 体系结构(x86 和 AMD64/Intel 64)进行定制。在 POWER 等体系结构上,可以使用 tty1 以外的其他终端设备名称。请小心不要因为指定了错误的终端设备名称而将您自己完全锁定。您可以通过运行 tty 命令确定当前登录的终端的设备名称。请注意不要在虚拟终端(例如通过 SSH)或图形会话(设备名称 /dev/pts/N)中执行此操作,而只通过实际登录终端(可通过 AltFN 访问)进行操作。

过程 15.1︰ 限制在本地 TTY 上进行 root 登录
  1. 请确保 PAM 堆栈配置文件 /etc/pam.d/login 包含 auth 块中的 pam_securetty 模块:

    auth     requisite      pam_nologin.so
     auth     [user_unknown=ignore success=ok ignore=ignore auth_err=die default=bad] pam_securetty.so noconsole
     auth     include        common-auth

    这样系统会在本地控制台处理身份验证期间包含 pam_securetty 模块,该模块会将 root 限制为仅可在文件 /etc/securetty 中列出的 TTY 设备上登录。

  2. 去除 /etc/securetty 中除这一项外的其他所有项。这将限制对 TTY 设备的 root 访问。

    #
    # This file contains the device names of tty lines (one per line,
    # without leading /dev/) on which root is allowed to login.
    #
    tty1
  3. 检查是否会拒绝 root 登录其他终端。应立即拒绝在 tty2 等终端上登录,甚至无需查询帐户口令。同时确保您仍可以成功登录 tty1,因而不会将 root 完全锁定在系统之外。

重要
重要:请不要添加 pam_securetty 模块

请不要将 pam_securetty 模块添加到 /etc/pam.d/common-auth 文件中。这将破坏 susudo 命令,因为这些工具也会拒绝 root 身份验证。

重要
重要

这些配置更改还将导致拒绝在 /dev/ttyS0 等串行控制台上进行 root 登录。如果您需要此类用例,则需要在 /etc/securetty 文件中额外列出相应的 TTY 设备。

15.5.2 限制图形会话登录

要提高您服务器的安全性,请完全避免使用图形环境。通常,图形程序不会设计为以 root 身份运行,因此与控制台程序相比更可能包含安全问题。如果您需要图形登录,请使用非 root 登录。配置您的系统,禁止通过 root 登录图形会话。

为了防止通过 root 登录图形会话,您可以采用第 15.5.1 节 “限制本地文本控制台登录”中概述的相同基本步骤。只需将 pam_securetty 模块添加到属于显示管理器的 PAM 堆栈文件 — 例如,GDM 的 /etc/pam.d/gdm。图形会话还会在 TTY 设备上运行:默认为 tty7。因此,如果您限制 root 登录到 tty1,将拒绝通过 root 登录图形会话。

15.5.3 限制 SSH 登录

默认情况下,还允许 root 用户通过 SSH 网络协议远程登录计算机(如果 SSH 端口未被防火墙阻止)。要限制此类登录,请对 OpenSSH 配置进行以下更改:

  1. 编辑 /etc/ssh/sshd_config 并调整以下参数:

    PermitRootLogin no
  2. 重启动 sshd 服务以使更改生效:

    systemctl restart sshd.service
注意
注意

对于 OpenSSH,不适合使用 PAM pam_securetty 模块,因为在授权期间并非所有 SSH 登录都会通过 PAM 堆栈进行(例如使用 SSH 公共密钥身份验证时)。此外,攻击者能够区分错误口令和策略只能在稍后予以拒绝的成功登录。

15.6 限制 sudo 用户

sudo 命令允许用户在另一个用户(通常是 root 用户)的环境中执行命令。sudo 配置包含一个规则集,该规则集定义了要执行的命令与其允许的源和目标用户及组之间的映射。该配置储存在文件 /etc/sudoers 中。有关 sudo 的详细信息,请参见第 2 章 “sudo 基本知识

默认情况下,sudo 会请求提供 SUSE 系统上的 root 口令。但是,与 su 不同的是,sudo 会记住该口令并允许以 root 身份执行其他命令,而不会在五分钟内再次请求提供口令。因此,应该仅为选定的管理员用户启用 sudo

过程 15.2︰ 限制普通用户使用 sudo
  1. 编辑文件 /etc/sudoers,例如,通过执行 visudo 进行编辑。

  2. 注释掉只要每个用户知道他们想要使用的用户的口令,就能运行每个命令的行。然后,该行应如下所示:

    #ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
  3. 取消注释以下行:

    %wheel ALL=(ALL) ALL

    这会将上述功能限制为仅供 wheel 组的成员使用。您可以根据自己的设置使用其他组,因为 wheel 可能有其他不当的作用。

  4. 将应该允许其使用 sudo 的用户添加到所选的组。要将用户 tux 添加到组 wheel,请使用:

    usermod -aG wheel tux

    要获得新的组成员资格,用户必须注销再重新登录。

  5. 使用不在您选择用于进行访问控制的组中的用户运行某个命令,以校验更改。此时应会看到以下错误消息:

    wilber is not in the sudoers file.  This incident will be reported.

    接下来,尝试使用该组的成员执行相同的操作。该成员应该仍可通过 sudo 执行命令。

请注意,此配置只会限制 sudo 功能。su 命令仍可供所有用户使用。如果能以其他方式访问系统,知道 root 口令的用户可以轻松通过这种途径执行命令。

15.7 为交互式外壳会话设置无活动超时

最好在一段无活动时间之后终止交互式外壳会话。例如,通过此方式可以阻止打开的无人监管会话或避免浪费系统资源。

默认情况下,外壳没有无活动超时。如此当外壳处于打开状态且在几天甚至几年内未被使用时,也不会有任何反应。不过,您可以将大多数外壳配置为在一段时间后自动终止空闲会话。以下示例显示如何为一些常见类型的外壳设置无活动超时。

可仅为登录外壳配置无活动超时,也可以为所有交互式外壳配置无活动超时。在后一种情况下,将针对每个外壳实例单独运行无活动超时。这意味着超时将会累积。当启动子外壳时,会为子外壳开始新的超时,并且仅在此超时过后,才会继续运行父外壳的超时。

下表包含 SUSE Linux Enterprise Server 随附的常见外壳选集的配置详细信息:

软件包外壳特点外壳变量时间单位只读设置配置路径(仅登录外壳)配置路径(所有外壳)

bash

bash、sh

TMOUT

read-only TMOUT=

/etc/profile.local、​/etc/profile.d/

/etc/bash.bashrc

mksh

ksh、​lksh、​mksh、​pdksh

TMOUT

read-only TMOUT=

/etc/profile.local、​/etc/profile.d/

/etc/ksh.kshrc.local

tcsh

csh、tcsh

autologout

分钟

set -r autologout=

/etc/csh.login.local

/etc/csh.cshrc.local

zsh

zsh

TMOUT

readonly TMOUT=

/etc/profile.local、​/etc/profile.d/

/etc/zsh.zshrc.local

每个列出的外壳支持使用一个内部超时外壳变量,可将该变量设置为某个特定时间值以触发无活动超时。如果您要防止用户覆盖超时设置,可以将相应的外壳超时变量标记为只读。上表中还提供了相应的变量声明语法。

注意
注意:无法针对恶意用户提供保护

此功能仅有助于避免因用户疏忽或遵循不安全做法而导致的风险。而无法防范恶意用户。超时只适用于外壳的交互式等待状态。恶意用户总是能找到绕过超时的方法,使得无论在任何情况下,都可以让其会话保持打开状态。

要配置无活动超时,需要为每个外壳的启动脚本都添加匹配的超时变量声明。可仅为登录外壳使用一种路径,或为所有外壳使用一种路径,如表中所列。以下示例使用适合 bashksh 的路径和设置,设置了无法被用户覆盖的只读登录外壳超时。使用以下内容创建文件 /etc/profile.d/timeout.sh

# /etc/profile.d/timeout.sh for SUSE Linux
#
# Timeout in seconds until the bash/ksh session is terminated
# in case of inactivity.
# 24h = 86400 sec
readonly TMOUT=86400
提示
提示

建议使用 screen 工具在注销前分离会话。screen 会话不会终止,一旦有需要便可重新挂接。可以在未注销的情况下锁定活动会话(有关细节,请阅读 man screen 中的 CtrlAX / lockscreen)。

15.8 防止意外拒绝服务

Linux 允许您对用户和组可以使用的系统资源量设置限制。如果因为程序中的 bug 导致用户和组耗尽太多资源(例如内存泄漏)、降低计算机速度,甚至使系统无法使用,此项设置也非常有用。错误的设置可能会允许程序使用过多资源,这可能会导致服务器无法响应新连接,甚至无法响应本地登录请求(例如,如果某个程序用掉主机上的所有可用文件句柄)。这也会成为一个安全问题,例如,如果允许某人用掉所有系统资源,将会导致拒绝服务攻击(无论是无意的还是更糟的恶意攻击)。设置用户和组的资源限制可能是一种有效的系统保护方法,具体视环境而定。

15.8.1 限制系统资源示例

以下示例演示了设置或限制 Oracle 用户帐户的系统资源使用的实际用法。有关系统资源设置列表,请参见 /etc/security/limits.confman limits.conf

Bash 等大多数外壳都会提供基于用户的各种资源控制(例如允许的打开文件描述符数量上限或最大进程数)。要检查外壳中的所有当前限制,请执行以下命令:

# ulimit -a

有关 Bash 外壳的 ulimit 的详细信息,请查看 Bash 手册页。

重要
重要:设置 SSH 会话的限制

使用 SSH 会话时,设置限制和限制可能不会起到预期的效果。要查看有效行为,可能需要以 root 身份登录,然后使用 su 命令切换到权限受限的身份(例如,在这些示例中为 Oracle)。假设应用程序在引导过程中已自动启动,资源限制也应生效。如果通过 SSH 对资源限制进行的更改似乎未生效,可能需要将 /etc/ssh/sshd_config 中的 UsePrivilegeSeparation 设置为 no,并重启动 SSH 守护程序 (systemctl restart sshd)。但一般不建议这样做,因为这会降低系统安全性。

提示
提示:禁用通过 ssh 进行口令登录功能

您可以通过禁用 SSH 的口令身份验证来为服务器增加一定程度的安全性。请记住,您需要配置 SSH 密钥,否则无法访问服务器。要禁用口令登录,请在 /etc/ssh/sshd_config 中添加下面几行:

UseLogin no
UsePAM no
PasswordAuthentication no
PubkeyAuthentication yes

在此示例中,可通过以 root 身份编辑 /etc/security/limits.conf 并进行以下更改,来更改用户 oracle 可使用的文件句柄数或打开的文件数:

oracle           soft    nofile          4096
oracle           hard    nofile          63536

第一行中的软限制定义了登录后 oracle 用户将拥有的文件句柄(打开的文件)数目限制。如果用户看到有关文件句柄用尽的错误消息,则可以执行以下命令,将此示例中所示的文件句柄数增加到硬限制(在此示例中为 63536):

# ulimit -n 63536

必要时,您可以设置更高的软限制和硬限制。

注意
注意:慎用 ulimit

请务必合理利用 ulimit。允许用户的 nofile限制(相当于内核限制 (/proc/sys/fs/file-max))是非常糟糕的设置!如果用户占用了所有可用文件句柄,系统将无法启动新的登录,因为它无法访问执行登录所需的 PAM 模块。

您还需要确保在 /etc/pam.d/common-auth 中全局配置 pam_limits,或者针对以下文件中的 SSH、su、login 和 telnet 等个别服务进行配置:

/etc/pam.d/sshd(用于 SSH)
/etc/pam.d/su(用于 su)
/etc/pam.d/login(本地登录和 telnet)

如果您不想为所有登录启用该配置,会有一个特定 PAM 模块读取 /etc/security/limits.conf 文件。PAM 配置指令中的项将如下所示:

session     required      /lib/security/pam_limits.so
session     required      /lib/security/pam_unix.so

请务必注意,更改不会立即生效,需要新的登录会话:

# su - oracle
> ulimit -n
4096

请注意,这些示例特定于 Bash 外壳;其他外壳的 ulimit 选项会有所不同。用户 oracle 的默认限制为 4096。要将用户 oracle 可使用的文件句柄数增加至 63536,请执行以下命令:

# su - oracle
> ulimit -n
4096
> ulimit -n 63536
> ulimit -n
63536

要使其成为永久设置,需要向用户配置文件(~/.bashrc~/.profile 文件)添加设置 ulimit -n 63536(仍是适用于 Bash),该配置文件为 SUSE Linux Enterprise Server 上的 Bash 外壳的用户启动文件(要校验外壳,请运行 echo $SHELL)。为此,可以针对用户 oracle 的 Bash 外壳运行以下命令:

# su - oracle
> cat >> ~oracle/.bash_profile << EOF
ulimit -n 63536
EOF

15.9 显示登录标题

出于法律/审计政策原因,或者为了向用户提供安全说明,通常有必要在所有服务器上的登录屏幕上设置一个标题。

如果您想在用户登录文本型终端(例如,使用 SSH 或在本地控制台上)列显登录标题,可以使用 /etc/motd 文件(motd = 当天的消息)。默认情况下,该文件存在于 SUSE Linux Enterprise Server 上,但是空文件。只需向适用的/组织所需的文件中添加内容。

注意
注意:标题长度

请尽量将登录标题内容放在一个终端页面(或更少)中,如果一页容纳不下而需要滚动屏幕,会使阅读变得更加困难。

您也可以在用户登录文本型终端列显登录标题。如果是本地控制台登录,您可以编辑 /etc/issue 文件,这会使标题在出现登录提示前显示。如果是通过 SSH 进行登录,您可以编辑 /etc/ssh/sshd_config 文件中的Banner参数,这会在出现 SSH 登录提示前相应地显示标题文本。

如果是通过 GDM 进行的图形登录,您可以遵循 GNOME 管理员指南设置登录标题。此外,您可以进行以下更改,以要求用户通过选择来对法律标题进行确认。编辑 /etc/gdm/Xsession 文件,并在脚本开头添加下面几行:

if ! /usr/bin/gdialog --yesno '\nThis system is classified...\n' 10 10; then
    /usr/bin/gdialog --infobox 'Aborting login'
    exit 1;
fi

需要将文本 This system is classified... 替换为所需的标题文本。请务必注意,此对话框不会阻止登录进行。有关 GDM 脚本的详细信息,请参见 GDM 管理员手册

15.10 连接统计实用程序

下面是您可以用于获取有关用户登录的数据的命令列表:

who 列出当前登录的用户。

w 显示登录者及其执行的操作。

last 显示最近登录的用户列表,包括登录时间、注销时间、登录 IP 地址等。

lastblast 相同(除了默认显示 /var/log/btmp),包含所有无效登录尝试。

lastlog 此命令报告 /var/log/lastlog 中维护的数据,该文件是用户上次登录的记录。

ac 安装 acct 软件包之后提供。按用户或每天列显连接时间(以小时为单位)。此命令会读取 /var/log/wtmp

dump-utmp 将原始数据从 /var/run/utmp 或 /var/log/wtmp 转换为 ASCII 可分析格式。

此外,如果未运行任何日志记录工具,请检查 /var/log/messages 文件或 journalctl 的输出。有关systemd日志的详细信息,请参见第 21 章 “journalctl:查询 systemd 日志