Linux系统的安全性涉及很多方面,从设置帐户到确保用户合法,限制比完成工作所需的更多权限。这里是关于Linux系统日常工作的一些最基本的安全命令。
sudo
使用sudo运行特权命令,而不是将用户切换到root,是一个必不可少的良好实践,因为它有助于确保在需要时仅使用root权限并限制错误的影响。对sudo命令的访问权限取决于/etc/sudoers和/etc/group文件中的设置。
$ sudo adduser shark Adding user `shark' ... Adding new group `shark' (1007) ... Adding new user `shark' (1007) with group `shark' ... Creating home directory `/home/shark' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for shark Enter the new value, or press ENTER for the default Full Name []: shark Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Y 复制代码
例如,如果运行sudo并询问你是谁,将确认以root身份运行该命令。
$ sudo whoami root 复制代码
如果为用户管理sudo设置,还需要熟悉visudo命令。
visudo
visudo命令允许通过在文本编辑器中打开文件并检查更改的语法来更改//etc/sudoers文件。 使用“sudo visudo”运行命令,并确保理解语法。权限可以由用户或组分配。在大多数Linux系统上,/etc/sudoers文件已经配置了如下所示的组,这些组允许将权限分配给/etc/group文件中设置的组。在这些情况下,根本不需要使用visudo命令,只需熟悉以这种方式赋予root权限的组,并对/etc/group文件进行更新。
%admin ALL=(ALL) ALL %sudo ALL=(ALL:ALL) ALL %wheel ALL=(ALL:ALL) ALL 复制代码
请注意,组名称前面带有%符号。
可以在/etc、group文件中显示提供sudo访问权限的组,因为它可能是以下之一:
$ egrep "admin|sudo|wheel" /etc/group sudo:x:27:shs,jdoe 复制代码
给予某人sudo特权的最简单方法是将它们添加到/etc/group中的授权组。但是,这意味着它们可以以root身份运行任何命令。如果希望某些用户对一组有限的命令具有root权限(例如,添加和删除帐户),可以定义希望它们能够通过命令别名运行的命令,如下所示:
Cmnd_Alias ACCT_CMDS = /usr/sbin/adduser, /usr/sbin/deluser 复制代码
然后让用户或组使用sudo运行这些命令,并使用以下命令之一:
nemo ALL=(ALL) ACCT_CMDS %techs ALL=(ALL:ALL) ACCT_CMDS 复制代码
第一行允许用户“nemo”使用sudo运行twp(adduser和deluser)命令,而第二行则为/etc/group文件中“tech”组中的任何人分配相同的权限。
who和w
who和w命令显示谁登录系统,虽然w显示更多信息,例如他们登录的位置,登录时间以及他们空闲的时间。
$ w 18:03:35 up 9 days, 22:48, 2 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT joe tty2 /dev/tty2 27Apr18 9days 7:34 0.09s /usr/lib/x86_64-linux shs pts/1 192.168.0.15 09:50 7.00s 0.28s 0.00s w 复制代码
last
last命令显示用户最近的登录信息,在尝试跟踪更改或其他活动时通常很有用。
$ last nemo nemo pts/1 192.168.0.15 Wed May 2 07:01 - 08:29 (01:27) wtmp begins Tue May 1 10:21:35 2018 复制代码
Nemo一段时间没有登录了。他可能正在度假(也许是钓鱼?)或刚刚离开公司。这种信息可用于决定是否需要对此进行跟进。
find
find命令用于许多类型的搜索。在安全性方面,可能会发现自己在寻找没有owner(没有相应帐户)或者都是可写和可执行文件的文件。find命令很容易编写,但需要熟悉它的许多选项来定义要查找的内容。以下两个命令中的第一个将查找当前没有定义所有者的文件。 第二个将找到可能任何人都可以运行和修改的文件。
$ sudo find /home -nouser $ sudo find / -perm -o=wx 复制代码
请记住,第二个命令中的-o引用“其他”组,不是所有者,不是与文件关联的组。
file
file命令查看文件并根据其内容而不是其名称确定文件的类型。许多文件(如jpeg文件)在标识它们的文件的开头附近包含标识符。以下示例中的“.jpg”文件显然不是真正的jpeg文件,而是可执行文件 ,尽管它的名称包含jpg。
jdoe@stinkbug:~$ ls -ltotal 24-rw-r--r-- 1 root root 0 Apr 13 09:59 empty-rwxr-xr-x 1 jdoe jdoe 18840 May 10 17:39 myphoto.jpg-rwx------ 1 jdoe jdoe 24 May 2 07:06 trythisjdoe@stinkbug:~$ file myphoto.jpgmyphoto.jpg: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=5d19f7a492405ea9b022a9aa8151f6fb4143633d, stripped 复制代码
which
which命令标识在键入其名称时将运行的可执行文件。这并不总是你的想法。如果特洛伊木马程序已插入文件系统中的某个位置,该位置显示在合法帐户之前的搜索路径中,则会运行该木马程序。这是一个很好的理由,以确保搜索路径包含/usr/bin之类的目录,然后添加较少的标准位置,特别是在“.”(当前目录)之前。
$ which date/usr/local/bin/date <=== probably not what we wanted 复制代码
可以通过切换到用户并回显用户来检查用户的搜索路径:
shs@stinkbug:~$ sudo su - nemonemo@stinkbug:~$ echo $PATH/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin 复制代码
即使用户的搜索路径设置在/etc/profile或/etc/bash.bashrc等系统文件中,它们也可能已被本地设置更改。
$ which date/usr/local/bin/date<=== probably not what we wanted 复制代码
SS
ss命令是一个用于调查套接字的工具,允许执行显示侦听端口和活动连接等操作。在不添加某些约束的情况下,ss将显示比可能想要查看的信息更多的信息。毕竟,操作系统的许多部分都通过套接字进行通信。如果要生成已建立的连接或侦听端口列表(即外部系统可用的服务),这些命令将非常有用。
建立连接:
$ ss -tState Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 224 192.168.0.20:ssh 192.168.0.15:56647$ ss | grep ESTAB | grep tcptcp ESTAB 0 64 192.168.0.20:ssh 192.168.0.15:64885 复制代码
监听端口:
$ ss -ltnState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:*LISTEN 0 5 127.0.0.1:631 *:* LISTEN 0 50 *:445 *:*LISTEN 0 50 *:139 *:*LISTEN 0 128 *:5355 *:*LISTEN 0 128 :::22 :::*LISTEN 0 5 ::1:631 :::*LISTEN 0 50 :::445 :::*LISTEN 0 128 :::5355 :::*LISTEN 0 50 :::139 :::* 复制代码
请注意,端口631(CUPS)仅侦听环回接口(127.0.0.1)。
ufw
如果在Linux系统上运行防火墙 ,这是控制系统访问的重要步骤,则用于启动/停止,启用/禁用,修改和显示状态或活动规则的命令至关重要。以下是ufw的一些示例命令,可以在许多Ubuntu系统上找到的“简单防火墙”:
$ sudo ufw status verboseStatus: activeLogging: on (low)Default: deny (incoming), allow (outgoing), disabled (routed)New profiles: skipTo Action From-- ------ ----22 ALLOW IN 192.168.0.0/24 复制代码
此防火墙处于活动状态,仅允许来自本地网络的连接进行ssh。
以下命令将1)设置上面显示的规则和2)禁用防火墙。
$ sudo ufw allow from 192.168.0.0/24 to any port 22$ sudo ufw disable 复制代码
iptables
了解如何列出iptables的防火墙规则也很重要。 这些命令将提供netfilter规则的完整列表:
sudo iptables -vL -t filtersudo iptables -vL -t natsudo iptables -vL -t manglesudo iptables -vL -t rawsudo iptables -vL -t security 复制代码
ip
ip命令允许显示网络接口上的信息。 在下面的示例中,我们看到了环回和公共接口。
$ ip a1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 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 forever2: enp0s25: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff inet 192.168.0.20/24 brd 192.168.0.255 scope global dynamic enp0s25 valid_lft 59794sec preferred_lft 59794sec inet6 fe80::f233:4f72:4556:14c2/64 scope link valid_lft forever preferred_lft forever 复制代码
ip route
ip route命令将显示路由表:
$ ip routedefault via 192.168.0.1 dev enp0s25 proto static metric 100169.254.0.0/16 dev enp0s25 scope link metric 1000192.168.0.0/24 dev enp0s25 proto kernel scope link src 192.168.0.20 metric 100 复制代码
kill,pkill和killall
正如在“有多种方法可以杀死Unix进程”中所看到的,Unix和Linux系统提供了一个方便的命令选择,用于终止进程,无论希望它们死亡的原因。可以按进程ID或名称终止。可以一次单独或一组进程。在任何情况下,都可以使用各种kill命令,并且应该准备好根据需要使用它们。 例子包括:
$ kill 1234$ pkill bad$ killall badproc 复制代码
passwd
虽然passwd命令在系统安全性方面可能是一个明显的命令,但它也不应该从任何安全性要点列表中省略。拥有合理的密码更改策略,尤其是在用户来去或更改角色时,这一点非常重要。
但是,passwd命令不仅用于更改密码。还可以将其与sudo权限一起使用,以更改其他用户的密码,锁定/解锁或过期帐户,检查帐户状态以及更改确定密码何时到期或设置时间密码警告的设置。
查看手册页(man passwd)了解详细信息并使用以下命令:
$ sudo passwd nemo<== change nemo's password$ sudo passwd -e dory <== expire dory's password (forces her to reset it)$ sudo passwd -i shark <== disable shark's account 复制代码
pwck
pwck命令对/etc/passwd和/etc/shadow文件进行完整性检查,确保存在必需的字段,存在文件和目录等。
$ sudo pwckuser 'squash': directory '/home/squash' does not existuser 'squash': program '/bin/bsh' does not exist 复制代码
setfacl&getfacl
不要轻易显示rwxr-x ---类型权限,会让你想象这就是Linux系统上的文件权限。使用setfacl和getfacl命令,可以授予不是文件所有者且不是关联组(并且不希望它们)访问文件的成员。假设希望nemo具有对文件的读取权限,该文件概述了ufw设置说明文件,但仅此而已。 使用这样的命令修改文件的访问控制列表:
$ setfacl -m u:nemo:r ufw-setup 复制代码
然后getfacl命令将显示已进行的更改:
$ getfacl ufw-setup# file: ufw-setup# owner: shs# group: shsuser::rwxuser:nemo:r-- <===group::rw- #effective:r--mask::r--other::--- 复制代码
sestatus&apparmor
sestatus和apparmor命令可以显示SELinux和apparmor工具的状态,这些工具使用强制访问控制在应用程序之间提供隔离。如果使用这些工具中的一个或另一个,应该知道如何显示其状态。
sestatus
https://www.networkworld.com/article/3272286/open-source-tools/22-essential-security-commands-for-linux.html 复制代码
apparmor
$ sudo apparmor_statusapparmor module is loaded.18 profiles are loaded.18 profiles are in enforce mode. /sbin/dhclient /usr/bin/evince /usr/bin/evince-previewer /usr/bin/evince-previewer//sanitized_helper /usr/bin/evince-thumbnailer /usr/bin/evince-thumbnailer//sanitized_helper /usr/bin/evince//sanitized_helper /usr/lib/NetworkManager/nm-dhcp-client.action /usr/lib/NetworkManager/nm-dhcp-helper /usr/lib/connman/scripts/dhclient-script /usr/lib/cups/backend/cups-pdf /usr/lib/snapd/snap-confine /usr/lib/snapd/snap-confine//mount-namespace-capture-helper /usr/sbin/cups-browsed /usr/sbin/cupsd /usr/sbin/cupsd//third_party /usr/sbin/ippusbxd /usr/sbin/tcpdump0 profiles are in complain mode.3 processes have profiles defined.3 processes are in enforce mode. /sbin/dhclient (705) /usr/sbin/cups-browsed (30173) /usr/sbin/cupsd (26828)0 processes are in complain mode.0 processes are unconfined but have a profile defined. 复制代码
还应该知道如何启动和停止这些工具。
$ sudo /etc/init.d/apparmor start$ sudo /etc/init.d/apparmor stop$ sudo /etc/init.d/apparmor restart 复制代码
而对于SELinux,各种模式代表什么:
enforcing -- SELinux security policy is enforcedpermissive -- SELinux prints warnings instead of enforcingdisabled -- SELinux is fully disabled 复制代码
Linux系统上的许多命令可以帮助管理安全性。上面的描述旨在介绍这些命令,但不解释有关它们如何工作或可以使用的所有内容。
原文:http://os.51cto.com/art/201808/581401.htm