[转帖]22个必须学习的Linux安全命令
22个必须学习的Linux安全命令
http://os.51cto.com/art/201808/581401.htm
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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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系统上的许多命令可以帮助管理安全性。上面的描述旨在介绍这些命令,但不解释有关它们如何工作或可以使用的所有内容。
[转帖]22个必须学习的Linux安全命令的更多相关文章
- linux学习11 Linux基础命令及命令历史
一.Linux系统上的文件类型 1.- :常规文件:在其它程序中用f表示.比如我们用ls -l命令查看的第一个内容 [root@localhost ~]# ls -l total -rw------- ...
- Linux学习(四)-Linux常用命令
1.运行级别类 1.1运行级别说明: 0:关机 1:单用户[可用于找回丢失密码] 2:多用户状态没有网络服务 3:多用户状态有网络服务 4:系统未使用保留给用户 5:图形界面 6:系统重启 常用运行级 ...
- 每天学习一个Linux命令-目录
在工作中总会零零散散使用到各种Linux命令,从今天开始详细的学习一下linux常用命令,坚持每天一个命令,学习的主要参考资料为: 1.竹子-博客(https://www.cnblogs.com/pe ...
- Linux Bash命令关于程序调试详解
转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...
- linux常用命令:rmdir 命令
今天学习一下linux中命令: rmdir命令.rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的.(注意,rm - r dir命令可代替rmdir,但是有很大危险性.)删 ...
- linux常用命令系列
自己开始接触linux系统已经两年了,刚到现场进行系统维护的时候,只知道ls和cd命令,所以我被迫开始学习linux,虽然现在每天都在linux系统上进行一些操作,但是感觉自己半路出家一样:可能知道某 ...
- Linux chage命令详解
原文 chage命令用于密码实效管理,该是用来修改帐号和密码的有效期限,接下来通过本文给大家介绍Linux chage命令相关知识,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧 lin ...
- 《马哥出品高薪linux运维教程》wingkeung学习笔记-linux基础入门课程
计算机原理概念: 1.CPU和内存中的存储单元通信线路称为总线(BUS),总线是被指令和数据复用的,所以也称为前端总线. 2.计算机中计算频率的时间标准即晶体振荡器原理,精确计算时间长度,根据相同的时 ...
- Linux学习之路--常用命令讲解
Linux常用命令讲解 1.命令格式:命令 [-选项] [参数] 超级用户的提示符是# 一般用户的提示符是$ 如:ls -la /usr说明: 大部分命令遵从该格式多个选项时,可以一起写 eg:ls ...
随机推荐
- idea tomcat 热部署方法
https://jingyan.baidu.com/article/db55b609d2a1564ba20a2f61.html 还好有热部署,不然每次都要重启服务,实在是太浪费时间了~ 注意事项: 在 ...
- [VB.NET][C#]二维向量的基本运算
前言 在数学中,几何向量指具有大小(Magnitude)和方向的几何对象,它在线性代数中经由抽象化有着更一般的概念.向量在编程中也有着及其广泛的应用,其作用在图形编程和游戏物理引擎方面尤为突出. 基于 ...
- Print Spooler 服务自动停止
1)先在服务里停止并禁用Print Spooler : 2)删除此文件夹下的所有文件,C:\Windows\System32\spool\PRINTERS\ : 3)删除注册表 HKEY_LOCAL_ ...
- VB.NET 仿Edge风格的TabControl控件
原本是想写个Chrome内核的浏览器,但是.net语言下比较好用类库的并不多,尝试过CefSharp.Xilium.CefGlue,都发现很多坑,所以这个项目就烂尾了,现在将还有点用的代码发出来给大家 ...
- node.js主从分布式爬虫
前言 前文介绍过用Python写爬虫,但是当任务多的时候就比较慢, 这是由于Python自带的http库urllib2发起的http请求是阻塞式的,这意味着如果采用单线程模型,那么整个进程的大部分时间 ...
- ADO.net中DataTable的应用
一.思维导图 二.知识点描述 (1)构造函数 DataTable() 不带参数初始化DataTable类的新实例 DataTable(string tableName) 用指定的表名初始化DataT ...
- swoole中退出、异常与错误的处理笔记
关于PHP这方面的知识 可以看 https://www.cnblogs.com/zyf-zhaoyafei/p/6928149.html 进行补课 然后下面记录一下使用swoole的时候需要注意的地方 ...
- [mysql] 归档工具pt-archiver,binlog格式由mixed变成row
pt-archiver官方地址:https://www.percona.com/doc/percona-toolkit/3.0/pt-archiver.html 介绍:归档数据,比如将一年前的数据备份 ...
- 阿里云oracle启动失败
1.监听启动失败: 将$ORACLE_HOME/network/admin 中的listener.ora中的主机名改为localhost 2.sqlplus中startup启动失败 ,出现ORA-00 ...
- C# Js 时间格式化问题
C# 后台: .ToString("dd-MMM-yyyy", System.Globalization. DateTimeFormatInfo.InvariantInfo) eg ...