53
Your Inner Sysadmin Chris Tankersley @dragonmantank SunshinePHP 2015 SunshinePHP 2015 1

Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Embed Size (px)

Citation preview

Page 1: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Your Inner Sysadmin

Chris Tankersley

@dragonmantank

SunshinePHP 2015

SunshinePHP 2015 1

Page 2: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

SunshinePHP 2015 2

Page 3: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Who Am I

• PHP Programmer for over 10 years

• Sysadmin/DevOps for around 8 years

• Using Linux for more than 15 years

• https://github.com/dragonmantank

SunshinePHP 2015 3

Page 4: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Here Be Dragons

SunshinePHP 2015 4

Page 5: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Traditional Lamp Stack

SunshinePHP 2015 5

Page 6: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Our Players

SunshinePHP 2015 6

Page 7: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

And of course…

SunshinePHP 2015 7

Page 8: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

The Server

• /bin - Essential user executable files

• /boot - Stuff that makes the OS boot up!

• /dev - Special device stuff you probably won't touch

• /etc - Configuration files

• /home - User home directories

• /sbin - System binaries

• /usr - Multi-user apps and utilities

• /var - Data usually lives here

SunshinePHP 2015 8

Page 9: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Installing Software

• Compile software from scratch

• Use the package manager (yum/apt)

SunshinePHP 2015 9

Page 10: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Learn to love the Command Line

SunshinePHP 2015 10

Page 11: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Learn a CLI text editor

• vi/vim

• emacs

• nano

SunshinePHP 2015 11

Page 12: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Authentication and Authorization

SunshinePHP 2015 12

Page 13: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

sudo

You can give admin access to users (or groups of users) without giving them root.

SunshinePHP 201513

# Add sudo access to a single user to run as rootdragonmantank ALL=(ALL) ALL

# Add sudo access to a full group%admin ALL=(ALL) ALL

You can even restrict what commands the users can run

# Restrict web developers to only restart Apache and MySQL%webdevs 192.168.1.0/255.255.225.0=(root) NOPASSWD:/usr/sbin/service apache2 restart, /usr/sbin/service mysql restart

Page 14: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Jailing Users

Keeps people from getting to things they shouldn't. Protects the users from themselves.

SunshinePHP 2015 14

Page 15: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Jailed Shells

Gives users a full shell but not the entire file system. You can pick and choose what programs the user can have access too. Jailkit makes this incredibly easy to set up.

SunshinePHP 2015 15

Page 16: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Jailed SFTP

Locks the user to a specific base path, but doesn’t give them a shell, much like FTP. You get the security of SSH though! It does require a system user however.

SunshinePHP 2015 16

Page 17: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Jailing SFTP

# In /etc/ssh/sshd_config

Subsystem ftp sftp-internal

# At the bottom of the file

Match User jailedsftp

ChrootDirectory /some/path

AllowTCPForwarding no

X11Forwarding no

ForceCommand internal-sftp

SunshinePHP 2015 17

Page 18: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Docker

SunshinePHP 2015 18

If you do it the non-Docker way

Page 19: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Scripting Languages

SunshinePHP 2015 19

Page 20: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Bash

Most servers use bash as the default shell. Most shells understand bash's syntax. If you find yourself running the same commands over and over, throw it in a bash script.

SunshinePHP 2015 20

Page 21: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Python

Ships with most distros. Great for when you need more power than what bash has.

SunshinePHP 2015 21

Page 22: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

PHP!

Leverage your PHP skills to write shell scripts.

• Symfony Console Component

• Aura CLI

SunshinePHP 2015 22

Page 23: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Locking Down your Code

SunshinePHP 2015 23

Page 24: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Running Apache as a different user

MPM-ITK

SunshinePHP 2015 24

MOD_RUID2

<IfModule mpm_itk_module>AssignUserId [user] [user]

</IfModule>

RMode configRUidGid myuser mygroupRDocumentChRoot /var/www/vhosts/domain.com/ www/public

Page 25: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

PHP-FPM

user = myuser

group = mygroup

chroot = /path/to/my/chroot

SunshinePHP 2015 25

Page 26: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Logs

SunshinePHP 2015 26

Page 27: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Logrotate

Rotates logs out for organization (or other purposes)

SunshinePHP 2015 27

weeklyrotate 4createinclude /etc/logrotate.d/var/log/wtmp {

monthlyminsize 1Mcreate 0664 root utmprotate 1

}

Page 28: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Logwatch

Script that runs every so often and scans a bunch of logs so you get a pretty e-mail with a summary of events

SunshinePHP 2015 28

--------------------- httpd Begin ------------------------

0.17 MB transferred in 792 responses (1xx 0, 2xx 786, 3xx 0, 4xx 6, 5xx 0)199 Content pages (0.09 MB),593 Other (0.09 MB)

Requests with error response codes400 Bad Request

/w00tw00t.at.ISC.SANS.DFind:): 1 Time(s)404 Not Found

/MyAdmin/scripts/setup.php: 1 Time(s)/phpmyadmin/scripts/setup.php: 1 Time(s)/w00tw00t.at.blackhats.romanian.anti-sec:): 1 Time(s)/webdav/: 2 Time(s)

---------------------- httpd End -------------------------

Page 29: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

OSSEC

Actually a Host Intrusion Detection system, but it does this by watching logs. Will alert you immediately to problems, and even shut down the attacks.

SunshinePHP 2015 29

OSSEC HIDS Notification.2012 Oct 24 11:38:10

Received From: maple->/var/log/auth.logRule: 5712 fired (level 10) -> "SSHD brute force trying to get access to the system."Portion of the log(s):

Oct 24 11:38:09 maple sshd[1062]: Failed password for invalid user alias from 199.167.138.44 port 59988 ssh2Oct 24 11:38:07 maple sshd[1062]: Invalid user alias from 199.167.138.44Oct 24 11:38:06 maple sshd[1059]: Failed password for invalid user recruit from 199.167.138.44 port 59884 ssh2

Page 30: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Preventing Intruders

SunshinePHP 2015 30

Page 31: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

hosts.deny and hosts.allow

Set of files to allow or deny access to the machine or certain apps/ports on the machine

SunshinePHP 2015 31

Page 32: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

IPTables

A firewall that is generally available on Linux machines that can be configured many different ways to allow or block or mangle traffic

SunshinePHP 2015 32

Page 33: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

OSSEC

IDS that was logs and will use hosts.deny and iptables to block stuff automatically for you!

SunshinePHP 2015 33

Page 34: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Configuration Management

SunshinePHP 2015 34

Page 35: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

What is Configuration Management?

Process by which you figure out what goes on your servers, how you want them set up, and keeping track of that information. Files are usually stored in source control on one server and pushed to clients.

SunshinePHP 2015 35

Page 36: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Why do you need it?

• Ever needed to keep track of when files get changed?

• Ever needed to roll back a change?

• Ever needed to push the same change to a bunch of servers

• Ever needed to set up a server exactly the same way as another server?

SunshinePHP 2015 36

Page 37: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

General CM Workflow

SunshinePHP 2015 37

Write a Manifest file

Client checks and compiles the manifests

Client makes changes based on manifests

Page 38: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Ansible

• https://serversforhackers.com/getting-started-with-ansible/

SunshinePHP 2015 38

Page 39: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Puppet

• http://www.erikaheidi.com/page/vagrant

SunshinePHP 2015 39

Page 40: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Server Monitoring

SunshinePHP 2015 40

Page 41: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Quick Poll

• Who here knows that their server is up right now?

• Are all of the required services running?

• Are there enough resources currently available?

SunshinePHP 2015 41

Page 42: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Service Monitoring with Monit

SunshinePHP 2015 42

Page 43: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Host Monitoring with Icinga

SunshinePHP 2015 43

Page 44: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Software Tools

SunshinePHP 2015 44

Page 45: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

tmux/screen

Command line multiplexer

SunshinePHP 2015 45

Page 46: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

tail

Look at the newest entries in a log, or even watch log files as they are generated

SunshinePHP 2015 46

Page 47: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

curl

Command line program for transferring data via a URL

SunshinePHP 2015 47

Page 48: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

iftop

Displays a breakdown of bandwidth usage by host

SunshinePHP 2015 48

Page 49: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

htop

Slightly better interface for checking memory and CPU usage

SunshinePHP 2015 49

Page 50: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

tcpdump

Allows you to view and record data transmitted over the network. Couple this with wireshark and you can inspect the packets!

SunshinePHP 2015 50

Page 51: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Servers for Hackers

Chris Fidao

@fideloper

http://serversforhackers.com

SunshinePHP 2015 51

Page 52: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Questions?

SunshinePHP 2015 52

Page 53: Your Inner Sysadmin - Tutorial (SunshinePHP 2015)

Thank You!

http://[email protected]

@dragonmantank

https://joind.in/13421

SunshinePHP 2015 53