22個必須學習的Linux安全命令

Linux系統的安全性涉及不少方面,從設置賬戶到確保用戶合法,限制比完成工做所需的更多權限。這裏是關於Linux系統平常工做的一些最基本的安全命令。html

sudolinux

使用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身份運行該命令。bash

$ sudo whoami root 複製代碼

若是爲用戶管理sudo設置,還須要熟悉visudo命令。網絡

visudoapp

visudo命令容許經過在文本編輯器中打開文件並檢查更改的語法來更改//etc/sudoers文件。 使用「sudo visudo」運行命令,並確保理解語法。權限能夠由用戶或組分配。在大多數Linux系統上,/etc/sudoers文件已經配置了以下所示的組,這些組容許將權限分配給/etc/group文件中設置的組。在這些狀況下,根本不須要使用visudo命令,只需熟悉以這種方式賦予root權限的組,並對/etc/group文件進行更新。ssh

%admin ALL=(ALL) ALL %sudo ALL=(ALL:ALL) ALL %wheel ALL=(ALL:ALL) ALL 複製代碼

請注意,組名稱前面帶有%符號。tcp

能夠在/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系統上的許多命令能夠幫助管理安全性。上面的描述旨在介紹這些命令,但不解釋有關它們如何工做或可使用的全部內容。

原文:http://os.51cto.com/art/201808/581401.htm

相關文章
相關標籤/搜索