盘点|22个基本的Linux安全命令

系统 Linux 服务器
Linux系统的安全性有很多问题——从设置帐户到确保合法用户的权限没有超出工作所需。本文将介绍用于Linux系统日常工作的一些最基本的安全命令。

 如果您正在关注Linux系统的安全性,那么这些命令是您必须知道的。

Linux系统的安全性有很多问题——从设置帐户到确保合法用户的权限没有超出工作所需。本文将介绍用于Linux系统日常工作的一些最基本的安全命令。

 

sudo

使用sudo运行特权命令——而不是将用户切换到根用户,是一种必不可少的良好实践,因为它有助于确保只在需要时使用根特权,并限制错误的影响。您对sudo命令的访问取决于/etc/sudoers和/etc/group文件中的设置。

  1. $ sudo adduser shark 
  2. Adding user `shark' ... 
  3. Adding new group `shark' (1007) ... 
  4. Adding new user `shark' (1007) with group `shark' ... 
  5. Creating home directory `/home/shark' ... 
  6. Copying files from `/etc/skel' ... 
  7. Enter new UNIX password
  8. Retype new UNIX password
  9. passwd: password updated successfully 
  10. Changing the user information for shark 
  11. Enter the new value, or press ENTER for the default 
  12.  Full Name []: shark 
  13.  Room Number []: 
  14.  Work Phone []: 
  15.  Home Phone []: 
  16.  Other []: 
  17. Is the information correct? [Y/n] Y 

例如,如果您运行sudo并询问您是谁,您将得到以root身份运行该命令的确认。

  1. $ sudo whoami 
  2. root 

如果要为用户管理sudo设置,还需要熟悉visudo命令。

visudo

visudo命令允许您在文本编辑器中打开文件并检查语法更改,从而更改/etc/sudoers文件。使用“sudo visudo”运行命令,并确保理解语法。特权可以由用户或组分配。在大多数Linux系统上,/etc/sudoers文件已经配置了如下所示的组,这些组允许将特权分配给在/etc/group文件中设置的组。在这些情况下,您根本不需要使用visudo命令—只需熟悉以这种方式授予根特权的组,并更新/etc/group文件。

  1. %admin ALL=(ALLALL 
  2. %sudo ALL=(ALL:ALLALL 
  3. %wheel ALL=(ALL:ALLALL 

注意组名前面有%符号。

您可以像这样在/etc/group文件中显示提供sudo访问的组,因为它可能是这些文件之一:

  1. $ egrep "admin|sudo|wheel" /etc/group 
  2. sudo:x:27:shs,jdoe 

给某人sudo特权最简单的方法是将他们添加到/etc/group.中的授权组中但是,这意味着它们可以作为根用户运行任何命令。如果你想让一些用户对有限的命令集拥有根权限(例如,添加和删除帐户),你可以定义你想让他们能够通过命令别名运行的命令:

  1. Cmnd_Alias ACCT_CMDS = /usr/sbin/adduser, /usr/sbin/deluser 

然后让用户或组能够运行这些命令使用sudo命令与这些命令之一:

  1. nemo ALL=(ALL) ACCT_CMDS 
  2. %techs ALL=(ALL:ALL) ACCT_CMDS 

第一行允许用户“nemo”使用sudo运行twp (adduser和deluser)命令,而第二行将相同的特权分配给/etc/group文件中“tech”组中的任何人。

who和w

who和w命令将向您显示谁已经登录到系统中,但是w将显示更多信息,例如登录位置、登录时间和空闲时间。

  1. $ w 
  2.  18:03:35 up 9 days, 22:48, 2 users, load average: 0.00, 0.00, 0.00 
  3. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT 
  4. joe tty2 /dev/tty2 27Apr18 9days 7:34 0.09s /usr/lib/x86_64-linux 
  5. shs pts/1 192.168.0.15 09:50 7.00s 0.28s 0.00s w 

如果不喜欢运行visudo命令时调用的默认编辑器,请使用“sudo update-alternatives - config editor”命令。它将提供许多编辑器作为选项并更改您的设置。

last

last命令显示了用户最近的登录信息,当您试图跟踪更改或其他活动时,它通常非常有用。

  1. last nemo 
  2. nemo pts/1 192.168.0.15 Wed May 2 07:01 - 08:29 (01:27) 
  3. wtmp begins Tue May 1 10:21:35 2018 

尼莫有一段时间没有登录了。他可能在度假(也许是钓鱼?)或者刚刚离开公司。这类信息可以帮助您决定是否需要对此进行后续工作。

find

find命令用于许多类型的搜索。当涉及到安全性时,您可能会发现自己在寻找没有所有者(没有对应的帐户)或既可写又可执行的文件。Find命令很容易组合,但是需要熟悉它的许多选项,以便定义您要查找的内容。这两个命令中的第一个将找到当前没有定义所有者的文件。第二种方法是找到任何人都可以运行和修改的文件。

  1. $ sudo find /home -nouser 
  2. $ sudo find / -perm -o=wx 

请记住,第二个命令中的-o指的是“其他”组——不是所有者,也不是与文件关联的组。

file

file命令查看一个文件,并根据其内容(而不是名称)确定文件的类型。许多文件(如jpeg文件)在标识它们的文件的开头附近包含标识符。下面示例中的“.jpg”文件显然不是真正的jpeg文件,而是可执行文件——尽管它的名称不同。

  1. jdoe@stinkbug:~$ ls -l 
  2. total 24 
  3. -rw-r--r-- 1 root root 0 Apr 13 09:59 empty 
  4. -rwxr-xr-x 1 jdoe jdoe 18840 May 10 17:39 myphoto.jpg 
  5. -rwx------ 1 jdoe jdoe 24 May 2 07:06 trythis 
  6. jdoe@stinkbug:~$ file myphoto.jpg 
  7. myphoto.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之前,它添加较少的标准位置,特别是之前”。(当前目录)。

  1. $ which date 
  2. /usr/local/bin/date <=== probably not what we wanted 

你可以检查用户的搜索路径,切换到用户和呼应:

  1. shs@stinkbug:~$ sudo su - nemo 
  2. nemo@stinkbug:~$ echo $PATH 
  3. /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin 

即使用户的搜索路径是在/etc/profile或/etc/bash这样的系统文件中设置的bashrc,它们可能已经被本地设置更改。

  1. $ which date 
  2. /usr/local/bin/date <=== probably not what we wanted 

你可以检查用户的搜索路径,切换到用户和呼应:

  1. shs@stinkbug:~$ sudo su - nemo 
  2. nemo@stinkbug:~$ echo $PATH 
  3. /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin 

即使用户的搜索路径是在/etc/profile或/etc/bash这样的系统文件中设置的bashrc,它们可能已经被本地设置更改。

ss

ss命令是研究套接字的工具,允许您执行诸如显示监听端口和活动连接之类的操作。在不添加一些约束的情况下,ss将显示比您希望看到的更多的信息。毕竟,操作系统的许多部分都是通过套接字进行通信的。如果您希望生成已建立连接或监听端口的列表(即这样的命令将被证明非常有用)。

建立连接:

  1. $ ss -t 
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port  
  3. ESTAB 0 224 192.168.0.20:ssh 192.168.0.15:56647 
  4. $ ss | grep ESTAB | grep tcp 
  5. tcp ESTAB 0 64 192.168.0.20:ssh 192.168.0.15:64885 

监听端口 :

  1. $ ss -ltn 
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port  
  3. LISTEN 0 128 *:22 *:* 
  4. LISTEN 0 5 127.0.0.1:631 *:*  
  5. LISTEN 0 50 *:445 *:* 
  6. LISTEN 0 50 *:139 *:* 
  7. LISTEN 0 128 *:5355 *:* 
  8. LISTEN 0 128 :::22 :::* 
  9. LISTEN 0 5 ::1:631 :::* 
  10. LISTEN 0 50 :::445 :::* 
  11. LISTEN 0 128 :::5355 :::* 
  12. LISTEN 0 50 :::139 :::* 

注意,端口631 (CUPS)只监听环回接口(127.0.0.1)。

ufw

如果您在Linux系统上运行防火墙——这是控制对系统访问的重要步骤,用于启动/停止、启用/禁用、修改和显示状态或活动规则的命令非常关键。下面是ufw的一些示例命令——你会在许多Ubuntu系统上找到的“简单防火墙”:

  1. $ sudo ufw status verbose 
  2. Status: active 
  3. Logging: on (low) 
  4. Default: deny (incoming), allow (outgoing), disabled (routed) 
  5. New profiles: skip 
  6. To Action From 
  7. -- ------ ---- 
  8. 22 ALLOW IN 192.168.0.0/24 

该防火墙是活动的,只允许从本地网络连接到 ssh。

以下命令将 1)设置上述规则,2)禁用防火墙。

  1. $ sudo ufw allow from 192.168.0.0/24 to any port 22 
  2. $ sudo ufw disable 

了解如何为iptables列出防火墙规则也很重要。这些命令将为您提供一个完整的netfilter规则列表:

  1. sudo iptables -vL -t filter 
  2. sudo iptables -vL -t nat 
  3. sudo iptables -vL -t mangle 
  4. sudo iptables -vL -t raw 
  5. sudo iptables -vL -t security 

ip

ip命令允许您在网络接口上显示信息。在下面的例子中,我们看到了环回和公共接口。

  1. $ ip a 
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 
  3.  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
  4.  inet 127.0.0.1/8 scope host lo 
  5.  valid_lft forever preferred_lft forever 
  6.  inet6 ::1/128 scope host 
  7.  valid_lft forever preferred_lft forever 
  8. 2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 
  9.  link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff 
  10.  inet 192.168.0.20/24 brd 192.168.0.255 scope global dynamic enp0s25 
  11.  valid_lft 59794sec preferred_lft 59794sec 
  12.  inet6 fe80::f233:4f72:4556:14c2/64 scope link 
  13.  valid_lft forever preferred_lft forever 

ip route

ip路由命令将显示您的路由表:

  1. $ ip route 
  2. default via 192.168.0.1 dev enp0s25 proto static metric 100 
  3. 169.254.0.0/16 dev enp0s25 scope link metric 1000 
  4. 192.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命令,并且应该准备在需要时使用它们。例子包括:

  1. $ kill 1234 
  2. $ pkill bad 
  3. $ killall badproc 

passwd

当涉及到系统安全性时,passwd命令可能是一个明显的命令,但它也不应该从任何安全性要点列表中被忽略。对于密码更改,特别是当用户来来往往或更改角色时,有一个合理的策略是很重要的。

然而,passwd命令不仅仅用于更改密码。您还可以使用它与sudo特权来更改其他用户的密码、锁定/解锁或过期帐户、检查帐户状态并更改决定密码何时过期或时间密码警告的设置。

查看手册页(man passwd)了解详细信息,并使用以下命令:

  1. $ sudo passwd nemo  <== change nemo's password 
  2. $ sudo passwd -e dory <== expire dory's password (forces her to reset it) 
  3. $ sudo passwd -i shark <== disable shark's account 

pwck

pwck命令对/etc/passwd和/etc/shadow文件进行一些完整性检查——确保出现了必需的字段、文件和目录等等。

  1. $ sudo pwck 
  2. user 'squash': directory '/home/squash' does not exist 
  3. user 'squash': program '/bin/bsh' does not exist 

setfacl & getfacl

不要让rwxr-x- type权限的简单显示诱使您认为这就是在Linux系统上文件权限的全部。使用setfacl和getfacl命令,您可以让不属于文件所有者、不属于相关组成员(您不希望他们成为)的人访问文件。假设您希望nemo能够读取概述ufw设置说明文件的文件,但仅此而已。使用如下命令修改文件的访问控制列表(ACL):

  1. $ setfacl -m u:nemo:r ufw-setup 

然后getfacl命令将显示所做的更改:

  1. $ getfacl ufw-setup 
  2. # file: ufw-setup 
  3. # owner: shs 
  4. group: shs 
  5. user::rwx 
  6. user:nemo:r-- <=== 
  7. group::rw- #effective:r-- 
  8. mask::r-- 
  9. other::--- 

sestatus & apparmor

sestatus和apparmor命令可以显示SELinux和apparmor工具的状态,这些工具使用强制访问控制在应用程序之间提供隔离。如果您正在使用这些工具之一,您应该知道如何显示它们的状态。

sestatus

  1. $ sudo sestatus 
  2. SELinux status: enabled 
  3. SELinuxfs mount: /sys/fs/selinux 
  4. SELinux root directory: /etc/selinux 
  5. Loaded policy name: targeted 
  6. Current mode: enforcing 
  7. Mode from config file: enforcing 
  8. Policy MLS status: enabled 
  9. Policy deny_unknown status: allowed 
  10. Max kernel policy version: 28 

apparmor

  1. $ sudo apparmor_status 
  2. apparmor module is loaded. 
  3. 18 profiles are loaded. 
  4. 18 profiles are in enforce mode. 
  5.  /sbin/dhclient 
  6.  /usr/bin/evince 
  7.  /usr/bin/evince-previewer 
  8.  /usr/bin/evince-previewer//sanitized_helper 
  9.  /usr/bin/evince-thumbnailer 
  10.  /usr/bin/evince-thumbnailer//sanitized_helper 
  11.  /usr/bin/evince//sanitized_helper 
  12.  /usr/lib/NetworkManager/nm-dhcp-client.action 
  13.  /usr/lib/NetworkManager/nm-dhcp-helper 
  14.  /usr/lib/connman/scripts/dhclient-script 
  15.  /usr/lib/cups/backend/cups-pdf 
  16.  /usr/lib/snapd/snap-confine 
  17.  /usr/lib/snapd/snap-confine//mount-namespace-capture-helper 
  18.  /usr/sbin/cups-browsed 
  19.  /usr/sbin/cupsd 
  20.  /usr/sbin/cupsd//third_party 
  21.  /usr/sbin/ippusbxd 
  22.  /usr/sbin/tcpdump 
  23. 0 profiles are in complain mode. 
  24. 3 processes have profiles defined. 
  25. 3 processes are in enforce mode. 
  26.  /sbin/dhclient (705) 
  27.  /usr/sbin/cups-browsed (30173) 
  28.  /usr/sbin/cupsd (26828) 
  29. 0 processes are in complain mode. 
  30. 0 processes are unconfined but have a profile defined. 

你还应该知道如何启动和停止这些工具。

  1. $ sudo /etc/init.d/apparmor start 
  2. $ sudo /etc/init.d/apparmor stop 
  3. $ sudo /etc/init.d/apparmor restart 

对于SELinux,不同的模式代表什么:

  1. enforcing -- SELinux security policy is enforced 
  2. permissive -- SELinux prints warnings instead of enforcing 
  3. disabled -- SELinux is fully disabled 

Linux系统上的许多命令可以帮助您管理安全性。上面的描述是为了介绍这些命令,而不是解释关于它们如何工作或如何使用的所有内容。

责任编辑:武晓燕 来源: 今日头条
相关推荐

2018-08-16 13:56:32

2022-09-09 16:38:09

Linux

2014-05-30 10:11:33

Linux 命令

2015-03-25 10:36:57

lsLinux

2022-09-28 08:40:04

杀死一个终端进程

2018-08-20 19:00:56

Linux性能检测命令

2013-05-20 10:42:12

2011-02-16 09:26:49

2013-12-06 17:39:49

Linuxps命令

2010-08-23 09:20:11

Linux命令

2016-06-22 09:30:58

Linux命令新手

2010-02-03 11:01:26

Linux mount

2009-07-31 16:14:27

linux cd命令Linux基本命令

2018-06-26 08:42:55

Linux密码学公钥

2010-03-23 15:52:41

Linux shell

2010-01-06 11:24:27

Linux命令

2010-02-04 10:11:05

Linux mount

2010-08-31 14:57:30

2016-12-29 12:42:45

Linux操作命令

2009-07-05 11:25:39

点赞
收藏

51CTO技术栈公众号