在开始熟悉Linux操作命令之前,我们必须先搭建好Linux操作系统环境,我们这里选用的是Linux的发行版本为Ubuntu,在安装好Ubuntu操作系统后,我们还需要在系统上进行一系列的初始操作,比如设置管理员密码、网络配置、基线加固等配置。
1、 配置管理员账号
安装 Ubuntu 系统后,我们需要进行初始配置,比如设置管理员密码、打开网络接口等。
首先需要配置管理员 root 用户的密码,输入sudo passwd root进行设置root用户密码设置。因为Ubuntu默认root密码是随机的,即每次开机都有一个新的root密码,并且在安装系统的时候也没要求设置root密码,所以Ubuntu在安装完成后是无法使用root直接登录系统,需要使用安装时设置的用户来登录系统后自行设置root密码。
1.1 登录系统,设置root密码
arshou@arshou-ser:~$ sudo passwd root [sudo] password for arshou: New password: Retype new password: passwd: password updated successfully arshou@arshou-ser:~$ |
2 网路配置
2.1 查看主机IP
使用ip命令可以快速识别所有可用的以太网接口,如下所示。
2.2 临时IP地址分配
对于临时网络配置,您可以使用ip命令,这在大多数其他GNU/Linux操作系统上也可以找到。ip命令允许您配置立即生效的设置,但是它们不是持久的,并且在重新启动后会丢失。
如果需要临时配置IP地址,可以通过以下方式使用IP命令。根据实际网络情况修改IP地址和子网掩码。
:~$ sudo ip addr add 192.168.20.127/24 dev ens33 |
然后可以使用ip设置连接。
:~$ sudo ip link set dev ens33 up |
使用IP命令验证ens33的IP地址配置,方法如下:
2.3 配置默认网关
使用ip命令配置默认网关的方法如下:请修改默认网关地址,以满足您的网络需求。
~$ sudo ip route add default via 192.168.20.2 |
也可以使用ip命令验证默认网关的配置,如下所示:
2.4 静态IP地址分配
要配置系统使用静态地址分配,请在/etc/netplan/00-installer-config.yaml文件中创建一个netplan配置。下面的示例假设您正在配置标识为eth0的第一个以太网接口。修改地址、路由和名称服务器的值以满足您的网络需求。
进入网卡配置yaml文件进行配置(注意:要用root用户去改,或者命令前面加个sudo)
:~$ sudo vi /etc/netplan/00-installer-config.yaml |
network: dhcp4: no dhcp6: no addresses: nameservers: |
然后可以使用netplan命令应用该配置。
sudo netplan apply |
注释
Ubuntu Bionic 18.04 LTS中的netplan不使用“to:default”语法来指定默认路由,应该使用旧的gateway4:10.10.10.1来指定。
2.5 DNS配置
传统上,/etc/resolv.conf文件是一个静态配置文件,很少需要更改,或者通过dhcp客户端钩子自动更改。Systemd-resolved处理名称服务器配置,应该通过systemd-resolve命令与之交互。Netplan配置system -resolved生成一个域名服务器和域名列表,放到/etc/resolv.conf中,
要配置解析器,请将网络的适当名称服务器的IP地址添加到netplan配置文件中。搜索选项也可以用于多个域名,这样DNS查询将按照输入的顺序追加。例如,你的网络可能有多个子域要搜索,example.com, and two sub-domains, sales.example.com and dev.example.com.如果您希望搜索多个域,您的配置可能如下所示:
network: |
3 SSH-Server配置指南
3.1 SSH简介
SSH 的全称是安全的 Shell(Secure Shell)的简称,是一个应用程序提供安全通信的协议,通过SSH协议可以安全地访问服务器,因为SSH 具有成熟的公钥加密体系,在数据进行传输时进行加密,保证数据在传输时不被恶意篡改、破坏和泄露,能有效防止网络嗅探和IP欺骗等攻击,同时提供不同的身份认证方式和多个配置选项。SSH是由芬兰的一家公司开发的,但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH,OpenSSH是SSH的替代软件,而且是免费的。
OpenSSH是一个功能强大的工具集合,用于远程控制和在联网计算机之间传输数据。了解OpenSSH服务器应用程序的一些配置,以及如何在Ubuntu系统上更改它们。
OpenSSH服务器组件sshd进程持续侦听来自任何客户机工具的客户机连接,当出现连接请求时,sshd根据连接的客户端工具的类型建立正确的连接。例如,如果远程计算机正在使用ssh客户端应用程序,OpenSSH服务器在身份验证后建立远程控制会话。如果远程用户使用scp连接到OpenSSH服务器,OpenSSH服务器守护进程在认证后启动服务器和客户端之间的文件安全拷贝。
3.2 OpenSSH 的基本概念
SSH 协议基于(C/S)架构。服务器(Server)允许客户端(Client)通过通信通道进行连接,并且该信道是经过加密的,信息交换通过 SSH 公私钥进行管理。
3.3 安装
OpenSSH客户端和服务器应用程序的安装非常简单。要在Ubuntu系统上安装OpenSSH客户端应用程序,在终端提示符下使用以下命令安装openssh-client。
:~$ sudo apt install openssh-client |
要安装OpenSSH服务器应用程序和相关支持文件,在终端提示符下使用以下命令安装openssh-server。
:~$ sudo apt install openssh-server |
3.4 配置
通过编辑/etc/ssh/sshd_config文件来配置OpenSSH服务器应用程序,在sshd配置文件中有许多指令控制通信设置和身份验证模式。以下是可以通过编辑/etc/ssh/sshd_config文件更改的配置指令的示例。
提示
在编辑配置文件之前,应该复制原始文件做为备份保护它不被写入,这样就可以将原始设置作为参考并在必要时重用。
复制/etc/ssh/sshd_config文件,并使用以下命令保护它不被写入,在终端提示符下执行以下命令:
:~$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original |
3.5 /etc/ssh/sshd_config文件参数
/etc/ssh/sshd_config文件是OpenSSH系统的配置文件,允许你通过设置不同的选项来改变程序的运行方式。这个文件的每一行
包含“关键词-值”的匹配,其中“关键词”是忽略大小写的。下面列出来的是最重要的关键词.
编辑sshd_config文件(vi /etc/ssh/sshd_config),下面逐行说明一些重要选项参数.
Port |
设置sshd监听的端口号。 |
ListenAddress 0.0.0.0 |
“ListenAddress”设置sshd服务器绑定的IP地址。 |
HostKey /etc/ssh/ssh_host_key |
“HostKey”设置包含计算机私人密匙的文件。 |
LoginGraceTime 2m |
“LoginGraceTime”设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。 |
PermitRootLogin prohibit-password |
表示允许 root 账户登录,但是不能以密码的方式登录,所以只能以公私钥的方式登录,为了简便,我们不采用这种方式,而是采用 PermitRootLogin yes,这样,直接使用密码就可以登录了。 |
IgnoreRhosts yes |
“IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。 |
IgnoreUserKnownHosts yes |
“IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的“$HOME/.ssh/known_hosts” |
StrictModes yes |
“StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。 |
X11Forwarding no |
“X11Forwarding”设置是否允许X11转发。 |
PrintMotd yes |
“PrintMotd”设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。 |
SyslogFacility AUTH |
“SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。 |
LogLevel INFO |
“LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。 |
RhostsAuthentication no |
“RhostsAuthentication”设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。 |
RhostsRSAAuthentication no |
“RhostsRSA”设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。 |
RSAAuthentication yes |
“RSAAuthentication”设置是否允许只有RSA安全验证。 |
PasswordAuthentication yes |
“PasswordAuthentication”设置是否允许口令验证。 |
PermitEmptyPasswords no |
“PermitEmptyPasswords”设置是否允许用口令为空的帐号登录。 |
3.6 启动远程连接
首先需要修改配置文件将PasswordAuthentication选项注释取消掉,然后:wq!保存并推出。
:~$ sudo vim /etc/ssh/sshd_config |
配置文件修改后需要重启 sshd服务:
sudo systemctl start ssh |
3.7 远程连接
配置完之后,我们就可以使用远程连接工具进行连接了,这里使用的与远程连接工具是SecureCRT 。
首先,我们使用ifconfig获取到我们的 ip 地址
然后,我们使用根据 ip 地址进行连接。
最后,我们成功进入我们的 Linux 系统。
3.7.1管理员用户运程登录配置
默认的配置为允许root登录,但是禁止root用密码登录,如果root需要使用密码登录,需要解除限制,修改配置即可,将默认配置注释掉,添加一行新的配置,修改/etc/ssh/sshd_config配置文件,如下:
PermitRootLogin prohibit-password → PermitRootLogin yes |
修改配置文件后需要重启服务。
$ sudo systemctl restart sshd |
3.8 修改的配置指令的例子:
(1)、要使OpenSSH服务器显示/etc/issue.net文件的内容作为登录前的提示内容(就是登录远程主机时在进入主机之前显示提示的内容),只需在/etc/ssh/sshd_config文件中添加或修改这一行:
Banner /etc/issue.net |
(2)、并修改/etc/issue.net文件的内容,输入自定义的提示内容后保存文件即可。
(3)、修改/etc/ssh/sshd_config文件后,保存该文件,并在终端提示符下使用以下命令重启sshd服务器应用程序以使更改生效:
systemctl restart sshd.service |
测试远程登录
3.8 SSH Keys,配置主机信任
SSH允许在两台主机之间进行身份验证,而不需要密码。SSH密钥认证使用私钥和公钥。
(1)、要生成密钥,请在终端提示符中输入:
~$ ssh-keygen -t rsa |
这将使用RSA算法生成密钥。在撰写本文时,生成的密钥将有3072位。可以使用-b选项修改比特数。例如,要生成4096位的密钥,您可以这样做:
~$ ssh-keygen -t rsa -b 4096 |
在生成密钥过程中,系统将提示您输入密码。当提示创建密钥时,只需按Enter键即可。
(2)、默认情况下,公钥保存在~/.ssh/id_rsa.pub文件中。而其中 ~/.ssh/id_rsa为私钥。现在复制 id_rsa.pub文件到远程主机,并将其追加到~/.ssh/authorized_keys文件中,输入如下命令:
~$ ssh-copy-id -i .ssh/id_rsa username@remotehost |
使用ssh-copy-id命令进行复制时,可以只指定复制本地的公钥文件,到远程主机,这个命令复制的公钥会自动追加到.ssh/authorized_keys文件中。
(3)、最后,仔细检查远程主机的authorized_keys文件上的权限,只有经过身份验证的用户应该具有读写权限。如果权限不正确,请通过以下方式更改它们:
~$ chmod 600 .ssh/authorized_keys |
配置好之后现在应该能够SSH到远程主机,而不需要提示输入密码。
3.9 配置主机信任示例
(1)、准备两台主机环境
系统版本 |
IP |
用途 |
Ubuntu 22.04.1 LTS |
192.168.20.125 |
服务器 |
Ubuntu 22.04.1 LTS |
192.168.20.128 |
服务器 |
(2)、查看当前主机是否存在SSH密钥
root@arshou-ser:~# ip a | grep ens33 2: ens33: inet 192.168.20.125/24 brd 192.168.20.255 scope global ens33 root@arshou-ser:~# root@arshou-ser:~# ll -a .ssh/ total 0 drwx------ 2 root root 29 Jun 17 07:31 ./ drwx------ 6 root root 173 Jun 24 03:20 ../ -rw------- 1 root root 0 Jun 17 07:31 authorized_keys root@arshou-ser:~# |
(3)、生成密钥,请在终端提示符中输入:
root@arshou-ser:~# ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa Your public key has been saved in /root/.ssh/id_rsa.pub The key fingerprint is: SHA256:J2K35uYA6bb8qQHY8uZEgKdk2ipEyCjfZgAhaswK3NY root@arshou-ser The key's randomart image is: +---[RSA 4096]----+ |+. | |@.. . | |OXoo E | |XO.o . | |*.* * o S . | |.= = o o + | |o + + . o | |.+ o o =. | | . +oooo | +----[SHA256]-----+ root@arshou-ser:~# root@arshou-ser:~# ll -a .ssh/ total 8 drwx------ 2 root root 61 Jun 24 03:49 ./ drwx------ 6 root root 173 Jun 24 03:20 ../ -rw------- 1 root root 0 Jun 17 07:31 authorized_keys -rw------- 1 root root 3381 Jun 24 03:49 id_rsa ------------------------>私钥 -rw-r--r-- 1 root root 741 Jun 24 03:49 id_rsa.pub ------------------------>公钥 root@arshou-ser:~# |
(4)、将公钥复制到其他主机,这里复制给192.168.20.128这个主机
root@arshou-ser:~# ssh-copy-id -i .ssh/id_rsa.pub [email protected] /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub" The authenticity of host '192.168.20.128 (192.168.20.128)' can't be established. ED25519 key fingerprint is SHA256:qVi8ZSlnwf3AfyM+Fd+FQfyffubQyxqCNhjHRigYuWE. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys [email protected]'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '[email protected]'" and check to make sure that only the key(s) you wanted were added. root@arshou-ser:~# |
(5)、在当前主机测试远程登陆至192.168.20.128,如下:
root@arshou-ser:~# ip a | grep ens33 2: ens33: inet 192.168.20.125/24 brd 192.168.20.255 scope global ens33 root@arshou-ser:~# root@arshou-ser:~# ssh [email protected] #发现登录无需密码即可远程登录到远程主机 Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-75-generic x86_64) * Documentation: Official Ubuntu Documentation * Management: Log in * Support: Ubuntu Pro | Ubuntu System information as of Sat Jun 24 04:00:10 AM UTC 2023 System load: 0.0029296875 Processes: 249 Usage of /: 42.2% of 483.27GB Users logged in: 2 Memory usage: 24% IPv4 address for ens33: 192.168.20.128 Swap usage: 0% * Introducing Expanded Security Maintenance for Applications. Receive updates to over 25,000 software packages with your Ubuntu Pro subscription. Free for personal use. Ubuntu Pro | Ubuntu Expanded Security Maintenance for Applications is not enabled. 0 updates can be applied immediately. 1 additional security update can be applied with ESM Apps. Learn more about enabling ESM Apps service at Ubuntu Expanded Security Maintenance | Security | Ubuntu Last login: Sat Jun 24 04:00:11 2023 from 192.168.20.125 root@ubuntu:~# root@ubuntu:~# ip a 1: lo: link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: link/ether 00:0c:29:bf:61:c6 brd ff:ff:ff:ff:ff:ff altname enp2s1 inet 192.168.20.128/24 brd 192.168.20.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:febf:61c6/64 scope link valid_lft forever preferred_lft forever root@ubuntu:~# |
4 用户管理
Ubuntu开发人员做出了一个谨慎的决定,在所有Ubuntu安装中默认禁用管理root帐户。这并不意味着根帐户已被删除或无法访问。它只是被给予了一个不匹配任何可能值的密码散列,因此可能不会自己直接登录。
4.1 添加和删除用户
adduser和addgroup根据命令行选项和/etc/adduser.conf中的配置信息向系统中添加用户和用户组。它们相比其底层的工具例如:useradd,groupadd和usermod更加友好。adduser在使用该命令创建用户是会在/home下自动创建与用户名同名的用户目录,系统shell版本,会在创建时会提示输入密码和可识别的特征,如全名、电话号码等。
当创建一个新用户时,adduser实用程序将创建一个名为/home/username的全新主目录默认配置文件是根据/etc/skel目录中的内容建模的,其中包括所有配置文件基础。
4.2 adduser命令介绍
adduser [options] [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID] [--firstuid ID] [--lastuid ID] [--ingroup GROUP | --gid ID] [--disabled-password] [--disabled-login] [--gecos GECOS] [--add_extra_groups] [--encrypt-home] user |
选项说明:
--system 添加系统用户或组,该命令会创建1-999的UID,用户组不会增加,用户目录(/home/
需要配合使用--group参数
--conf
--disabled-login 禁止用户帐户登录。
--disabled-password 禁止使用密码登录。
--uid
--gid
--group 运行addgroup命令并添加用户组。如果指定了--system,则添加系统用户和组。
--home
--shell
--ingroup
--no-create-home 禁止用户创建主目录。
4.3 adduser用法示例
4.3.1 增加普通用户
命令格式 sudo adduser
该命令会自动增加用户主目录,增加UID以及GID,设置密码。创建的UID会大于1000
arshou@arshou-ser:~$ sudo adduser test Adding user `test' ... Adding new group `test' (1001) ... Adding new user `test' (1001) with group `test' ... Creating home directory `/home/test' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for test Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y arshou@arshou-ser:~$ |
查看用户是否增加可以通过查看/etc/passwd来确认。
4.3.2 增加系统用户
命令格式 sudo adduser --system
该命令会创建1-999的UID,用户相同名称的用户组不会增加,新增的用户会放在nogroup组中,用户目录(/home/
arshou@arshou-ser:~$ sudo adduser --system sgrp Adding system user `sgrp' (UID 113) ... Adding new user `sgrp' (UID 113) with group `nogroup' ... Creating home directory `/home/sgrp' ... arshou@arshou-ser:~$ |
4.3.3 增加系统用户的同时增加用户组
命令格式 sudo adduser --group --system
UID和GID在1至999,表示它是系统用户和组。
arshou@arshou-ser:~$ sudo adduser --group --system mtest Adding system user `mtest' (UID 113) ... Adding new group `mtest' (GID 118) ... Adding new user `mtest' (UID 113) with group `mtest' ... Creating home directory `/home/mtest' ... arshou@arshou-ser:~$ |
4.3.4 增加自定义用户目录
命令格式 sudo adduser --home
自定义用户家目录使用--home参数时,指定的家目录位置会自动创建,不用提前手工创建目录,示例如下:
arshou@arshou-ser:~$ sudo adduser --home /data/muser muser Adding user `muser' ... Adding new group `muser' (1002) ... Adding new user `muser' (1002) with group `muser' ... Creating home directory `/data/muser' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for muser Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y arshou@arshou-ser:~$ |
4.3.5 增加自定义用户ID
查看:
4.3.6 删除用户帐户及其主组的语法如下:
sudo deluser username |
这样删除帐户不会删除它们各自用户的主文件夹。
4.3.7 永久删除用户
要从 Linux 系统中完全删除用户,请以 root 或 sudo 用户身份登录.
如果要删除用户及其主目录和邮件,请运行:
arshou@arshou-ser:~$ sudo deluser --remove-home test Looking for files to backup/remove ... Removing files ... Removing user `test' ... Warning: group `test' has no more members. Done. arshou@arshou-ser:~$ |
查看用户主目录已经被删除了。
4.3.8 用户配置文件介绍
Linux 系统安装之后会默认生成很多的用户,这些用户中的绝大多数是系统或服务正常运行所必需的用户,这些用户通常称为系统用户或伪用户。系统无法使用这些系统用户来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。/etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。
/etc/passwd 文件中的内容非常规律,每行记录对应一个用户,每行用户信息都以 ":" 作为分隔符,划分为 7 个字段,如下:
第一个字段:acceount:用户名,就是一串代表用户身份的字符串。
第二个字段:password:密码,"x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中。
第二个字段在早期的 UNIX 中,保存是真正的加密密码串,但由于所有程序都能读取此文件,非常容易造成用户数据被窃取。虽然密码是加密的,但是采用暴力破解的方式也是能够进行破解的。因此,现在 Linux 系统把真正的加密密码串放置在 /etc/shadow 文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全。这里虽然 "x" 并不表示真正的密码,只是密码占位符,但也不能删除这个"x"。
第三个字段:UID:也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户。
UID的范围在0~65535 之间的数,不同范围的数字表示不同的用户身份。
0代表超级用户root,UID 为 0 就代表这个账号是管理员账号。在 Linux 中,把普通用户升级成管理员的方法只需把普通用户的 UID 修改为 0 就可以。
1~499 系统用户(伪用户),此范围的 UID 保留给系统使用。其中,1~99 用于系统自行创建的账号;100~499 分配给有系统账号需求的用户。
除了 0 之外,其他的 UID 并无不同,只是默认 500 以下的数字给系统作为保留账户,只是一个公认的习惯,500~65535 普通用户。
第四个字段:GID:基本组ID,表示用户初始组的组 ID 号。这里补充一下初始组(基本组)和附加组的概念。
基本组,指用户登陆时就拥有这个用户组的相关权限。每个用户的基本组只能有一个,通常就是和此用户的用户名相同的组名作为该用户的基本组。比如说,新添加用户user01的同时,就会建立 user01 组作为user01用户的基本组。
附加组,指一个用户可以加入多个其他的用户组,并拥有这些组的权限。除基本组外,用户再加入其他的用户组时就为用户的附加组。附加组可以有多个,并且用户会拥有附加组的权限。虽然基本组和附加组的身份是可以修改的,但是在工作中不建议修改基本组,只修改附加组。需要注意的是,在 /etc/passwd 文件的第四个字段中看到的 ID 是这个用户的基本组GID。
第五个字段comment:注释
第六个字段:DIR:用户家目录,也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。
第七个字段:SHELL:用户的默认shell,通常情况下Linux 系统默认使用的命令解释器是 bash(/bin/bash)
4.3.9 用户密码文件 /etc/shadow
第一个字段:acceount:登录名
第二个字段:encrypted password:加密的密码,这个部分可能为两个!!,两个!!表示这个账户是被锁定的。
加密的密码部分由两部分组成:前面部分为solt(盐)即杂质部分,后面部分为杂质和密码进行加密后组成。
第三个字段:(19525),从1970年一月一日开始到上一次更改密码所经过的天数;即为上次修改密码的时间
第四个字段:(0),密码最短使用期限,0表示不做限制
第五个字段:(99999),密码最长使用期限
第六个字段:(7),离密码过期还要多少天提示该更密码,即更改密码告警时间
第七个字段:密码过期之后账号禁之前的期限
第八个字段:从1970年一月一日开始到期后账号就停用,即号的失效日期
第九个字段:保留字段,无意义。
5 组管理命令
/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中,接下来介绍这个文件的组成。
组文件有四个部分组成,以:隔开
第一部分:组名,也就是是用户组的名称,由字母或数字构成。组名和用户名一样也不能重复。
第二部分:x,密码占位符,这里的 "x" 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中,并且几乎都不设置组密码
第三部:组ID,Linux 系统就是通过 GID 来区分用户组的
第四部分:以这个组为附加组的用户列表,如果有多个用户使用逗号分隔,没有则为空
5.1 addgroup介绍
addgroup是一条Linux命令,用于添加一个新组。在Linux系统中,一个用户可以属于多个组,addgroup就是为用户添加一个新组。
addgroup命令的语法是:
addgroup [options] [--gid ID] group_name addgroup --system [options] [--gid ID] group_name |
其中,group_name表示需要添加的新组的名称。
options包括:
$ -g, --gid GID 指定新组的GID
$ -h, --help 显示帮助信息
$ -K, --key KEY=VALUE 设置debconf指定的关键字
$ --system 创建一个系统帐户(GID < 1000)
$ --force-badname 忽略组名不规范的警告
$ --group 组建立时GID必须给出
$ --verbose 让命令输出更多信息
当执行addgroup命令时,会首先检查group_name是否已经存在。如果group_name已经存在,则会返回错误。如果group_name不存在,则新建一个组。
5.2 使用addgroup添加新组
在Linux系统中,我们可以使用addgroup添加一个新组。
格式如下 sudo addgroup group_name
其中,group_name表示我们要添加的组的名称。例如,我们要添加一个新组webtool,则可以执行以下命令:
arshou@arshou-ser:~$ sudo addgroup webtool Adding group `webtool' (GID 1001) ... Done. arshou@arshou-ser:~$ |
5.3、使用addgroup选项
除了直接使用addgroup添加新组,我们还可以使用addgroup命令的选项来自定义新组的GID、描述等信息。
例如,我们可以使用--gid选项来指定新组的GID:
arshou@arshou-ser:~$ sudo addgroup --gid 1006 webdev Adding group `webdev' (GID 1006) ... Done. arshou@arshou-ser:~$ |
执行上述命令后,根据系统会返回的信息,表示已经成功添加了一个GID为1006的新组webdev。
5.4 删除组使用delgroup命令
arshou@arshou-ser:~$ sudo delgroup webdev Removing group `webdev' ... Done. arshou@arshou-ser:~$ |
根据系统会返回的信息,表示已经成功删除webdev组。
6 sudo配置
前面创建了一个名为“test”的新用户,可以用来登录系统了,但权限比较低,因该用户尚未获得 sudo 访问权限。所以他不能执行更多的管理任务。
可以验证用户是否具有 sudo 访问权限,如下所示:
$ sudo -l -U test |
输出结果:
User test is not allowed to run sudo on arshou-ser.
根据输出结果显示当前用户没有sudo权限。
6.1 向 Ubuntu Linux 中的用户授予 Sudo 权限
将之前添加的test用户授予 Sudo 权限
arshou@arshou-ser:~$ sudo adduser test sudo Adding user `test' to group `sudo' ... Adding user test to group sudo Done. arshou@arshou-ser:~$ |
执行上述命令后,根据系统会返回的信息,表示已经test用户已经添加了sudo权限。
也可以使用以下命令将用户添加到 sudo 组。
$ sudo usermod -aG sudo test |
要验证用户是否已添加到 sudo 组中,请运行:
arshou@arshou-ser:~$ sudo -l -U test Matching Defaults entries for test on arshou-ser: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty User test may run the following commands on arshou-ser: (ALL : ALL) ALL arshou@arshou-ser:~$ |
6.2 删除用户的 Sudo 访问权限
可以删除用户的 sudo 权限,而无需完全删除用户
警告:在 Ubuntu 系统中执行此操作时必须小心。不要从“sudo”组中删除真正的管理员。系统中应该至少有一个 sudo 用户。
首先,确保您已从用户“test”会话已注销并以另一个 sudo 用户身份登录系统。
要撤销用户的 sudo 权限(例如 test),命令将是:
arshou@arshou-ser:~$ sudo deluser test sudo Removing user `test' from group `sudo' ... Done. arshou@arshou-ser:~$ |
7 临时锁定或解锁用户密码
临时锁定或解锁用户密码,分别使用以下语法:
sudo passwd -l username #临时锁定密码 |
用户密码锁定后,无法使用锁定的用户登录系统。
注意:
简单地禁用/锁定用户密码不会阻止用户远程登录到您的服务器,如果他们之前设置了SSH公钥身份验证。他们仍然可以通过shell访问服务器,而不需要任何密码。记得检查用户的主目录,查找允许这种类型的经过身份验证的SSH访问的文件,例如/home/username/.ssh/authorized_keys。
解决可以通过删除或重命名用户主文件夹中的. SSH /目录,以防止进一步的SSH身份验证功能。
8 用户目录权限管理
默认情况下,在Ubuntu中创建的用户主目录具有全局读/执行权限。这意味着所有用户都可以浏览和访问其他用户主目录的内容。这可能不适合您的环境。这意味着所有用户都可以浏览和访问其他用户主目录的内容。
要验证当前用户的主目录权限,请使用以下语法:
$ ls -ld /home/username |
以下输出显示目录/home/username具有全局可读权限:
Drwxr-xr-x 2 username username 4096 2007-10-02 20:03 username
以用下面的语法修改全局可读权限:
执行命令:chmod 0750 /home/username |
更有效的方法是在创建用户主文件夹时修改adduser全局默认权限。只需编辑/etc/adduser.conf文件并将DIR_MODE变量修改为适当的值,这样所有新的主目录都将获得正确的权限,修改如下
DIR_MODE=0750 |
这个在Ubuntu 22.04.1 LTS中,DIR_MODE变量已经为0750
9 密码策略
强大的密码策略是安全状态中最重要的方面之一。许多安全漏洞涉及简单的暴力破解和针对弱密码的字典攻击。如果您打算提供涉及本地密码系统的任何形式的远程访问,请确保充分满足最低密码复杂性要求、最长密码生存期要求和对身份验证系统的频繁审计。
说明:密码复杂度设置对root用户无效,只对普通用户有效。当你使用root用户给普通用户设置密码时,即使不符合密码规则,也可以设置成功。
9.1 安装cracklib模块
安装PAM的cracklib模块,cracklib能提供额外的密码检查能力,先装个软件。
$ sudo apt install libpam-cracklib |
9.2 限制使用过去使用过的密码
默认情况下,系统没有开启密码重复次数检测策略,找到如下配置,并在后面添加remember=5,表示禁止使用最近用过的5个密码,己使用过的密码会被保存在/etc/security/opasswd
password [success=1 default=ignore] pam_unix.so obscure sha512 remember=5 |
9.3 最小密码长度和复杂度
默认情况下,Ubuntu要求最小密码长度为6个字符,以及一些基本的熵检查。这些值在/etc/pam.d/common-password文件中控制,将最小长度调整为8个字符和调整密码复杂度,修改如下。
password requisite pam_cracklib.so retry=3 minlen=8 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 password [success=1 default=ignore] pam_unix.so obscure sha512 remember=5 |
参数详解:
retry=3 |
表示可以输错3次 (默认参数 3),然后退出并返回错误 |
minlen = 8 |
设置最小长度,等于8表示 8 个字符) |
difok = 3 |
设置新密码中不能出现在旧密码中的字符数,默认参数3 |
ucredit = -1 |
要求新密码中至少有一个大写字符 |
lcredit =-1 |
要求新密码中至少有一个小写字符 |
dcredit = -1 |
新密码至少需要一位数字 |
ocredit = -1 |
新密码中至少需要一个其他字符 |
minclass = 2 |
设置新密码所需的最少字符类别数 (大写/小写/数字/其他) |
maxrepeat = 2 |
设置新密码中允许的最大连续相同字符数 |
maxclassrepeat = 4 |
设置新密码中允许的同类最大连续字符数 |
maxsequence = 2 |
设置新密码中单调字符序列的最大长度 |
gecoscheck = 1 |
检查新密码中是否包含用户密码条目的GECOS字段中超过3个字符的单词 |
9.4 密码过期
在创建用户帐户时,应该制定一项策略,设置密码的最小和最大使用期限,迫使用户在密码过期时更改密码。
要轻松查看用户帐户的当前状态,请使用以下语法:
sudo chage -l username |
chage命令选项:
-m #密码可更改的最小天数,为0时代表任何时候都可以更改密码
-M #密码保持有效的最大天数
-W #用户密码到期前,提前收到警告信息的天数
-E #帐号到期的日期。过了这天,此帐号将不可用。
-d #上一次更改的日期
-I #停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l #例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
下面的输出显示了关于用户帐户的信息,即没有应用任何策略:
|
验证更改,下面的输出显示了为该帐户建立的新策略:
9.5 通过修改配置文件设置密码过期期限
用户密码过期期限策略在/etc/login.defs文件中进行调整,需要调整的参数如下:
PASS_MAX_DAYS 99999 |
密码的最大有效期, 99999:永久有期 |
PASS_MIN_DAYS 0 |
是否可修改密码,0可修改,非0多少天后可修改 |
PASS_MIN_LEN 5 |
密码最小长度,使用pam_cracklib module,该参数不再有效 |
PASS_WARN_AGE 7 |
密码失效前多少天在用户登录时通知用户修改密码 |
修改方法如下:
$ sudo sed -i 's#^PASS_MAX_DAYS.*#PASS_MAX_DAYS\t90#' /etc/login.defs $ sudo sed -i 's#^PASS_MIN_DAYS.*#PASS_MIN_DAYS\t10#' /etc/login.defs $ sudo sed -i 's#^PASS_MIN_LEN.*#PASS_MIN_LEN\t8#' /etc/login.defs $ sudo sed -i 's#^PASS_WARN_AGE.*#PASS_WARN_AGE\t5#' /etc/login.defs |