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

14 用户管理

14.1 各种帐户检查

14.1.1 未锁定的帐户

请务必锁定未用于登录的所有系统帐户和供应商帐户。要获取您系统中未锁定帐户的列表,可以在 /etc/shadow 文件中查看不含!* 开头的已加密口令字符串的帐户。如果您使用 passwd -lusermod -L 锁定某个帐户,此命令会在已加密口令的前面添加 ! 符号,以禁用该口令。默认情况下,许多系统帐户和共享帐户的口令字段中包含 *!!!* 符号(将已加密口令呈现为无效字符串),从而锁定了这些帐户。因此,要获取所有未锁定(可加密)帐户的列表,请运行以下命令:

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

另请确保所有帐户在 /etc/passwd 中的口令字段中都包含 x 符号。以下命令列出口令字段中没有 x 符号的所有帐户:

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

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

14.1.2 未使用的帐户

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

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

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

# userdel -r ACCOUNT

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

14.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/login.defs/etc/default/useradd 中的设置是为 /etc/shadow 文件中的测试用户记录的,如下所示:

# 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

14.3 实施更强的口令

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

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

14.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

14.4.1 口令强度

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

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

表 14.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 命令,则不会强制执行上述要求。

14.4.2 限制使用先前的口令

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

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

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

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

auth      required   pam_env.so
auth      required   pam_unix.so     try_first_pass
account   required   pam_unix.so     try_first_pass
password  requisite   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

14.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/ 中各自的配置文件(sshd, su, sudo, sudo-isu-l)中使用 pam_tally2

14.5 限制 root 登录

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

14.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 访问)进行操作。

过程 14.1︰ 限制在本地 TTY 上进行 root 登录
  1. 确保 PAM 堆栈配置文件 /etc/pam.d/loginauth 块中包含 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 设备。

14.5.2 限制图形会话登录

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

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

14.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 公共密钥身份验证时)。此外,攻击者或许能区分错误口令与稍后才会被策略拒绝的成功登录。

14.6 限制 sudo 用户

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

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

过程 14.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 口令的用户可以轻松通过这种途径执行命令。

14.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)。

14.8 防止意外拒绝服务

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

14.8.1 限制系统资源示例

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

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

# ulimit -a

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

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

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

提示
提示:禁用通过 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

14.9 显示登录标题

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

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

注意
注意:标题长度

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

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

如果通过 GDM 进行图形登录,您可以遵循 the GNOME admin guide 设置登录标题。此外,您可以进行以下更改,以要求用户通过选择来对法律标题进行确认。编辑 /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 Admin Manual

14.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 日记