网站首页 > 技术文章 正文
Linux系统的安全性涉及很多方面,从设置帐户到确保用户合法,限制比完成工作所需的更多权限。这里是关于Linux系统日常工作的一些最基本的安全命令。
sudo
使用sudo运行特权命令,而不是将用户切换到root,是一个必不可少的良好实践,因为它有助于确保在需要时仅使用root权限并限制错误的影响。对sudo命令的访问权限取决于/etc/sudoers和/etc/group文件中的设置。
$ sudo adduser sharkAdding 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 successfullyChanging the user information for sharkEnter 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 whoamiroot
如果为用户管理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/groupsudo: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.00USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATjoe tty2 /dev/tty2 27Apr18 9days 7:34 0.09s /usr/lib/x86_64-linuxshs pts/1 192.168.0.15 09:50 7.00s 0.28s 0.00s w
last
last命令显示用户最近的登录信息,在尝试跟踪更改或其他活动时通常很有用。
$ last nemonemo 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
$ sudo sestatusSELinux status: enabledSELinuxfs mount: /sys/fs/selinuxSELinux root directory: /etc/selinuxLoaded policy name: targetedCurrent mode: enforcingMode from config file: enforcingPolicy MLS status: enabledPolicy deny_unknown status: allowedMax kernel policy version: 28
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系统上的许多命令可以帮助管理安全性。上面的描述旨在介绍这些命令,但不解释有关它们如何工作或可以使用的所有内容。
原文链接:
https://www.networkworld.com/article/3272286/open-source-tools/22-essential-security-commands-for-linux.html
猜你喜欢
- 2024-10-09 用最快速度,打造「最强 Webpack 前端工具链」,强势运行
- 2024-10-09 苹果iPhone 15 Pro系列手机静音拨片将改为Action按钮
- 2024-10-09 盘点|22个基本的Linux安全命令 linux教程安全性
- 2024-10-09 0207-使用Oozie API接口向Kerberos环境的CDH集群提交Shell作业
- 2024-10-09 什么是CSRF攻击? 简述csrf攻击的基本原理
- 2024-10-09 DELMIA软件物流仿真:操作对象显示与隐藏功能介绍与使用方法
- 2024-10-09 机器人机械臂ROS通讯机制发布订阅多线程
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)