Suse 12 Manual Guide
Suse 12 Manual Guide
#Install Desktop#
User: Server base and enable GNOME + Compiler tools
Tasks:
1. Update HOSTNAME via YaST
Tasks:
1. Ensure SLES12 ISO image is HTTP-accessible
a. 192.168.75.101 (Ubuntu|HTTPD)
b. 'cd /LinuxCBT && mount -t iso9660 -o loop /LinuxCBT/SLE-12-Server-DVD-x86_64-
GM-DVD1.iso /LinuxCBT/SUSE12'
c. 'df -h /LinuxCBT/SUSE12' - confirm mount
Tasks:
1. Install via SSH
a. Provision an instance on HOST server (ESXi) - reference ISO boot image
a1. 'usessh=1 sshpassword=InstallSUSE12' - indicate at boot prompt
b. boot and obtain connection details: IP and instruction (yast.ssh)
c. Connect from client:
c1. 'ssh -X [email protected]' && 'yast.ssh' - launches TUI interface
NOTE; Default options will launch the server in GUI mode with: 2.5GB footprint
NOTE: YaST installer derived an address via DHCP to carry-out the installation,
however, we indicated the usage of a static address, which will be applied post-
reboot
NOTE: TUI interface is the default in the event of inability to write GUI to client
NOTE: In our case, TUI interface defaulted because we SSHed to the YaST installer
via a third-party HOST
Tasks:
1. Provision GUEST on ESXi
a. Boot Prompt: 'vnc=1 vncpassword=InstallSUSE12'
b. set applicable options: i.e. HTTP source
2. Connect via VNC client: i.e. 'vncviewer' (installed by default)
a. 'vncviewer' -> 192.168.75.28:1 -> supply password
b. continue installation
Tasks:
1. Clone the Node
NOTE: Requires that the Node is shut
a. 'vmkfstools -i INPUT OUTPUT [-d thin]' - clones storage to target
b. 'ssh ESXi' and perform clone
b1. 'ssh [email protected]'
b2. 'mkdir ../linuxcbtsuse4'
b3. 'vmkfstools -i ./linuxcbtsuse3.vmdk ../linuxcbtsuse4/linuxcbtsuse4.vmdk -d
thin'
c. Create a new GUEST container and link it to the new 'linuxcbtsuse4.vmdk' file
NOTE: Usually, we clone the startup disk first
NOTE: However, you can clone any .vmdk file of interest: i.e. '/home', '/opt',
'/etc'
NOTE: Ensure unique network details (IP) prior to simultaneous instantation
Tasks:
A. Explore Tools
1. Spawning a new $SHELL generates a new: pseudo-terminal (pts) device:
'/dev/pts[0..N]'
NOTE: The $SHELL-providing program works with the kernel to supply $SHELL (pts
device): i.e. SSH, Telnet, GNOME Terminal, etc.
a. 'tty' - reveals currently-connected TTY
NOTE: Applies to console-based TTYs as well: i.e. tty[1-7(GUI)]
2. 'whoami' - reveals per-TTY effective permissions
NOTE: $SHELLs attached to TTYs are independent
3. 'w' - reveals connected users to various TTYs
4. 'pwd' - reveals current working directory - relative to the '/' FS
5. 'ls'
a. 'ls -a' - reveals hidden entries: i.e. '.'(cwd), '..'one-level-up
b. 'ls -l' - long format - returns ownership, permissions, timestamp and data
c. 'ls -li' - all of above plus INODE data
6. 'find'
a. 'find ./ -name '*txt*' ' - descends the tree from the cwd to find content
NOTE: 'find' can search based on any metadata associated with files
7. 'touch' - creates || updates file timestamp data
a. 'touch test.txt' - creates an empty file IF NOT EXISTS, OR updates timestamp
8. 'cat' - concatenates content: i.e. aggregates various files into 1 output
stream (linear)
a. 'cat 1.txt 2.txt 3.txt' - aggregates the 3 files into 1 linear output stream
b. 'cat 1.txt 2.txt 3.txt > 1-3.txt'
9. 'mkdir' - creates directory
10. 'rmdir' - removes the directory recursively
11. 'rm -rf' - removes content recursively
NOTE: Be careful, as these tend to be 'generally' unrecoverable
12. 'echo' - dumps whatever you tell it to: STDOUT || file || elsewhere
13. 'history' - dumps a history of recently executed commands
NOTE: per-user based
NOTE: Each command is indexed, beginning with 1, and can be referenced using: '!
NUM': i.e. '!50' - executes command # 50 from your history
i.e. 'ls -la ~/.bash_history' - contains your history
14. 'wc' - counts words
a. 'wc -l' - counts lines
15. '>' - output redirection in clobber-mode(erases any target indicated)
a. 'cat 1.txt 2.txt 3.txt > 1-3.txt'
16. '>>' - append redirection - IF CONTENT EXISTS - ADD ELSE CREATE
b. ' cat 1.txt 2.txt 3.txt >> 1-3.txt'
16. '&&' - Command Chaining using LOGICAL AND
a. 'cat 1.txt 2.txt 3.txt >> 1-3.txt && ls -l'
17. '||' - Command Chaining using LOGICAL OR
a. 'cat 1.txt 2.txt 3.txt >> 1-3.txt || ls -l'
18. ';' - Command Chaining using LOGICAL INDEPENDENCE
a. 'cat 1.txt 2.txt 3.txt >> 1-3.txt ; ls -l' - run B regardless of exit status
of A
NOTE: This runs a series of commands
27. 'ps'
a. 'ps -ef | -aux' - returns PIDs, PPIDs, Users, Processes, TTYs, etc.
b. 'ps -ef | grep 36044' - shows ALL PIDs related to PID=36044
c. 'ps' - reveals the basics of processes launched in the current $SHELL
Tasks:
1. Gzip -> .gz(suffix)
a. 'gzip -c 1GB > 1GB.gz'
NOTE: 10**3 reduction in size: i.e. from 1GB -> ~1024K
'
c5041ae163cf0f65600acfe7f6a63f212101687d41a57a4e18ffd2a07a452cd8175b8f5a4868dd2330b
fe5ae123f18216bdbc9e0f80d131e64b94913a7b40bb5 1GB
'
b. 'gunzip 1GB.gz' - restores the original content
c. 'gzip -d 1GB.gz' - equivalent to 'gunzip...'
# Client Utilities #
Features:
1. Discovery of HOSTs
2. Discovery of Services: i.e. SSH, HTTP, HTTPS, MySQL, etc.
3. Path between HOSTs - 'traceroute', 'mtr'
4. L2 Data -> 'arp'
5. Network Statistics -> 'netstat'
6. Name resolvers: 'dig', 'host', 'nslookup'
Tasks:
1. Explore
a. 'ping' - ICMP (echo -> echo-reply sequences)
a1. 'ping -c 3 192.168.75.1'
a2. 'ping -I eth0 -c 2 192.168.75.1' - enforces the usage of: 'eth0'
a3. 'ping -i 2 -c 10 192.168.75.1' - interval shifts from 1-sec(default) to 2-
secs
b. 'netstat'
b1. 'netstat -rn' - reveals current routing table
'
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.75.1 0.0.0.0 UG 0 0 0 eth0
192.168.75.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
'
NOTE: Typically, a node with 1-NIC, connected to 1-VLAN, has a minimum of: 2-Routes
(as above): including: the default GW and the connected subnet
b2. 'netstat -i' - list available interfaces
b3. 'netstat -an[tu]' - lists (TCP|UDP) sockets in various states: i.e. 'LISTEN',
'ESTABLISHED', etc.
b4. 'netstat -ntl' - lists TCP LISTENERs (where State=LISTEN)
Tasks:
1. Use YaST to provision new $USER resources
a. 'sudo yast'
a1. create new user called: 'linuxcbt2'
b. Examine updated files: i.e. '/etc/{passwd,shadow,group}
b1. '/etc/passwd'
'
linuxcbt2:x:1001:100:LinuxCBT2:/home/linuxcbt2:/bin/bash
'
username:shadow_ref:uid:gid:Description:$HOME:$SHELL
b2. '/etc/shadow'
'
linuxcbt2:$6$ctRaQgRLMqxy$sUg66.fKY4tvB2S5xzrahEYMxFcHcrc9.4T50tukHjKiKCAFIeAPd6SYR
Ljqrn7uVpOz6x2cEKN2ERKGvxx3r.:0:3:45:5:::
'
username:SHA512Password:days_since_epoch_password_last_changed:Days_before_password
_may_be_changed:max_days_keep_password:
days_before_password_expires_warning_is_sent:Days_after_password_expires_account_is
_disabled:days_since_epoch_account_has_been_disabled:
reserved_field
NOTE: Service accounts usually need NOT login to the system, thus:
$SHELL=/bin/false
b4. 'sudo grep wwwrun /etc/shadow'
'wwwrun:*:16357::::::'
c. $SHELL tools
c1. 'useradd'
c2. 'userdel'
c3. 'usermod'
# File Permissions #
Features:
1. Provides Discretionary Access Control (DAC)-based permissions
2. Provides changeable bits that impact permissions for the following sets:
a. Owner (Principal) of the object: i.e. file | directory
b. Group Owner
c. Everyone (catchall)
3. 10-bits describe the type of objects and the effective DAC on the object
a. leading bit: i.e. '-'(regular file), 'd'(directory), 'c'(char devs), 'b'(block
devs)
b. trailing 9-bits govern permissions (DAC) for the various sets:
b1. Owner: rwx=7
b2. Group Owner: rwx=7
b3. Everyone else: rwx=7
c. Each permission is equivalent to a different value, with a total sum of 7
c1. r=4
c2. w=2
c3. x=1
NOTE: If a permission bit is unset, its octal value = 0: i.e. r-x = 4+0+1 = 5 | |
i.e. --- = 0+0+0 = 0
# Symbolic Links #
Features:
1. The ability to link to content in a variety of ways
a. Soft
b. Hard
2. Soft Link creates a shortcut in the 'Windows' sense (link to a named file
object)
NOTE: Caveat includes: failure in the original 'named' file breaks ALL outstanding
Soft Links
NOTE: Advantage includes the traversal of File Systems (FS)
NOTE: Soft Links do NOT update the link counter exposed via commands such as: 'ls
-l' && 'stat', etc. because, the link counter references the number of HARD links
related to the object
3. Hard Link creates a link to the underlying INODE that represents the file by
instantiating a NEW instance of the file sans duplication of data storage
requirements: i.e. FILE1 => 1GB, FILE1a => original 1GB
NOTE: Caveat is that Hard Links may not, by default, traverse File Systems (FS)
Tasks:
1. Create some content and link to in a variety of ways - Soft Links
a. 'ln -s ~linuxcbt/temp/100MB ~linuxcbt/temp/100MB.1' - creates soft link
i.e. '
lrwxrwxrwx 1 linuxcbt users 5 Feb 12 08:37 100MB.1 -> 100MB
'
NOTE: Soft Links are flagged with: leading bit = 'l' and ALL bits enabled, however,
underlying Source File's permissions are effective (or dictate access control)
2. Create some HARD Links
a. 'ln SOURCE DEST'
a. 'ln ~linuxcbt/temp/100MB ~linuxcbt/temp2/100MB'
# System Scheduler #
Features:
1. Facility with which to schedule jobs (items to be executed: i.e. scripts,
binaries, etc.)
2. Implemented via 'cronie' RPM
3. Scans each minute for jobs to execute
NOTE: Thus, CRON is limited to per-minute frequencies as the smallest interval of
job-execution
4. Supports system-wide && per-user schedules
5. Use: '-' &&|| ',' to separate time intervals: 1,11,41,55 * * * * JOB.sh
10-25 0-5 * * * JOB.sh - runs 10th-25th minute in the 0th-5th hours
Tasks:
1. Explore CRON footprint
a. 'rpm -ql cronie'
a1. '/etc/cron.deny' - list of users who may NOT submit jobs to the system
scheduler
a2. '/etc/crontab' - system-wide cron table - jobs that maintain the system
a2a. various jobs that are to execute on various frequencies are indicated:
i.e. hourly,daily,weekly,monthly
NOTE: The difference between: /etc/crontab && per-user cron is the reference of the
$USER in: /etc/crontab
NOTE: You may also sub-divide each time interval: i.e. */1 * * * * JOB.sh - runs
JOB every minute
# rsyslogd #
Features:
1. Logs daemon | device information to files and various targets as needed: i.e.
remote hosts | pipes | programs | etc.
2. Supports: Unix Domain Sockets (/dev/log)
3. Ability to receive and log remotely using 3 protocols:
a. UDP:514 -> Lossful especially under heavier demands, but legacy and still
widely-supported
NOTE: Deprecate UDP:514 in favour of: TCP || RELP
a1. UDP logging entries are denoted as: 'facility.level @TARGET'
b. TCP:514 -> Loses less information that its: UDP:514 counterpart
b1. TDP logging entries are denoted as: 'facility.level @@TARGET'
c. RELP -> Lossless logging protocols that is supported by rsyslogd: >=v3.1.5
c1. RELP logging entries are denoted as: 'facility.level :omrelp:TARGET'
NOTE: 'TARGET' -> IP || HOSTNAME
NOTE: Default LOG location is LOCAL and so long as disk I/O and storage and energy
are sufficient, you should NOT lose data.
d. Default configuration does NOT connect to the Network and must be enabled on a
per-protocol (TCP|UDP|RELP) basis
Tasks:
1. Analyze default rules file: '/etc/rsyslog.conf'
a. Selectors - facilities.levels
NOTE: '*' => wildcard (ALL VALUES SUPPORTED)
a1. Facilities => Denote the source of information
a1a. Common Facilities: MAIL, AUTH, LOCAL0-7, Daemon, etc.
a2. Severity(Level)
a2a. Debug(0), Info(1), Notice(2), Warning(3), Error(4), Critical(5), Alert(6),
Emergency(7)
Note: Messages >= current level are logged
Note: Messages < current level are ignored
NOTE: This applies ONLY when Severity(Level) is specified, with catchall
exceptions: '*.emerg TARGET'
NOTE: 'FACILITY.none' - excepts the 'FACILITY' from being logged to the TARGET
defined on the righ-side of the rule
# Log Rotation #
Features:
1. Rotates and optionally compresses logs based on rules: /etc/logrotate.d
2. Common Criteria include:
a. Time Frequencies including: Hourly, Daily, Weekly, Monthly, Annually
b. File Size: >= 1024k
3. Segments LOGs
4. Default Schedule: '/etc/cron.daily/logrotate' by Cron
NOTE: If Hourly execution is desired, move logrotate entry to cron.hourly schedule
5. Auto-checks existence in PROC table to avoid data-corruption
6. Maintains a state file of ALL rotated/examined/managed files in:
/var/lib/logrotate.status
Tasks:
1. '/etc/logrotate.conf' - houses defaults that scripts in: /etc/logrotate.d
inherit when NOT present or overridden
2. '/etc/logrotate.d' - look at various files: i.e. 'ntp'
Note: 'man logrotate.conf' - returns usable directives
Note: LOGS can be forced into rotation using the '-f' option on the CLI
NOTE: logrotate can be used with any file | set of files that may benefited from
log rotation management, NOT solely typical LOG files: i.e. I/O generated by your
scripts, processes, etc.
#SWAP Configuration #
Features:
1. Virtual Memory
2. Dedicated SWAP Partition
3. Existing Partition implemented as a file
Tasks:
1. Dedicated SWAP partitions and provision SWAP storage for each server
a. 'free -m' reveals SWAP usage
b. Provision virtual storage via ESXi
c. Confirm availability via: 'fdisk -l' (look for new disk: i.e. /dev/sdb)
# BTRFS #
Features:
1. New - Default for SLES12
2. YaST-Integrated
3. Copy-on-Write (COW) FS
4. 2**64 (16 EiB) of storage - i.e. partition, etc.
5. Snapshots:
a. Read-only
b. Writable
6. FS extension|reduction (currently unavailable in YaST)
7. Subvolume support
a. each subvolume managed as a distinct FS with its own: root '/'
b. Quota-support per sub-volume: sandbox capability
8. Checksums:
a. data
b. metadata
10. Compression
11. EXT[234] - Easy migration of content
12. Online FS Defrag
13. Various '*btrfs*' tools are included
14. Multi-Device support: ability to span FS across 1 or more physical|virtual
disks
FYI: https://btrfs.wiki.kernel.org/index.php/Main_Page
Tasks:
1. Explore Installation Defaults
a. 'df -h' - dumps various FSs
b. 'btrfs filesystem show /'
2. Create Subvolumes
Features: Abstract root mount point: i.e. '/projectx' of BTRFS volume into slices
that can wear distinct attributes
a. 'btrfs sub create /projectx/project3'
b. 'mount -o 'subvol=@/project3' UUID="4cbeb658-44d3-42a8-9d3a-72c5bb5e1aa0"
/projectx/project3 '
NOTE: This makes no visible user-space changes to the FS. BTRFS mount points simply
appear as plain-old directories beneath the ROOT volume (default subvolume by
default)
c. '/etc/fstab'
c1. 'UUID_OF_PARENT /projectx/project3 btrfs subvol=@/project3 0 0'
Tasks:
1. Provision LVM from recently added block storage: i.e. /dev/sd[b-d]
a. Using: 'YaST' GUI - provision LVM with: /dev/sdc
NOTE: Error when allocating 50% of the size of the VG to an LG
NOTE: Works after allocating 100% of the size of the VG to the LG
d. Extend VG (volgroup001)
d1. 'vgextend volgroup001 /dev/sdd1' - adds /dev/sdd1 to volgroup001
d2. 'vgdisplay' - confirm additional storage
e. Extend LV (logvol001)
e1. 'sudo lvextend -L 10GB /dev/volgroup001/logvol001 && sudo lvdisplay'
e2. 'sudo resize2fs /dev/volgroup001/logvol001'
e3. 'sudo resize2fs /dev/volgroup001/logvol001'
NOTE: upsizing usually works across FSs
NOTE: downsizing may NOT be supported by your FS
f. Extend LV from YaST GUI
NOTE: YaST GUI, committs ALL steps to resize both LV and underlying FS
g. Reduce (Shrink) LV and FS from YaST GUI
# Software Management #
Features:
1. Package Management
2. Updates - Registration|Subscription
3. Repositories - locations of various packages
a. Default is the media used to install the OS: i.e. ISO image, DVD, CD, HTTP
4. Managed ALL from: YaST
5. RPM may also be used to manage packages
NOTE: Opt to use: YaST instead as it auto-resolves dependencies
6. Common packages are provided to simplify installation: i.e. GNOME, 32-bit,
Development, etc.
Tasks:
1. Basic RPM usage
a. 'rpm -qa ' dumps ALL installed RPM packages
b. 'rpm -qi package_name' - returns metadata
c. 'rpm -Uvh package_name' - installs package
2. YaST
a. Install: 'whois'
b. 'rpm -qa | grep whois'
c. 'rpm -qi whois'
d. 'which whois'
e. 'whois linuxcbt.com'
NOTE: Create your internal respository using first ISO DVD and publish via HTTP or
otherwise and configure clients to reference the repo(s)
# Interface Configuration #
Features:
1. YaST
a. Static
b. Dynamic
c. Aliases
d. Routes
e. DNS
f. Hostname
g. etc.
Tasks:
1. Explore YaST for Interface configuration
a. 'sudo ifconfig' - dumps active interface(s) configuration: i.e. eth0, lo
NOTE: 'ifconfig' can be used to effect temporary changes to network config from the
$SHELL
NOTE: Use 'yast' to effect permanent changes
b. 'yast'
Ideally, nodes that are within the same autonomous domain should trust each other
as peers or client/server relationship...
Tasks:
1. Configure ALL 3 servers as peers
NOTE: Peers may set each other's clocks
NOTE: Client/Server relationship allows the server to serve the client the current
time
NOTE: IF problems synching/restarting NTPD, toggle AppArmor status to: 'complain'
on NTPD instance as it is blocking...
#DHCP Server#
Features:
1. Dynamic IP configuration
Tasks:
1. Setup linuxcbtsuse3 as DHCP server and serve addresses to: linuxcbtsuse[12]
# DNS Server #
Features:
1. L4 (Names) -> L3 (IPs)
2. Glue of the Net
3. Forward
4. Reverse
5. Replication
Tasks:
1. Explore
2. Setup Master for zone: linuxcbt.internal on: linuxcbtsuse1
3. Replicate zone: linuxcbt.internal to: linuxcbtsuse[23]
4. Create reverse zone for: IPv4 -> 75.168.192.in-addr.arpa.
5. Replicate reverse zone to various nodes: .141-.142
6. Test:
a. 'dig @192.168.75.14[0-2] -x 192.168.75.3' - confirm reverse resolution
Tasks:
1. Explore
2. Test anonymous
3. Enable anonymous upload
4. Jail authenticated users
NOTE: $USER must NOT be able to write to their $HOME directory as it becomes the
ROOT of the FTP jail: i.e. chown root.users /home/linuxcbt
5. Disable anonymous
# VNC Administration #
Features:
1. Remote Administration - GUI
Tasks:
1. Enable on each server node
NOTE: Enables: TCP:5[89]01
Tasks:
1. Connect ALL SUSE nodes to Ubuntu based Repo
NOTE: Repo HTTP server references ISO-mounted image: ensure ISO always mounts
(persists)
Tasks:
1. Setup HTTPD Server
NOTE:
DocumentRoot: http://192.168.75.140 (/srv/www/htdocs)
Alias /icons/ -> /usr/share/apache2/icons/ - escapes 'DocumentRoot'
ScriptAlias /cgi-bin/ -> /srv/www/cgi-bin
2. Check Setup
a. 'systemctl status apache2'
3. Virtual Hosts
Features:
a. IP-based - one-to-one mapping between site and IP
b. Host-Header Based - sites may share IPs
Tasks:
1. Create siteN.linuxcbt.internal: i.e. site[1-3].linuxcbt.internal - IP-based
2. 'apache2ctl -S' - dumps VHost configuration
3. Host-Header Based
a.
Tasks:
1. Install NMap
a. Done
2. Usage
a. non-privileged - limits to TCP:Connect and more revealing reconnaissance
a1. 'nmap -v localhost 192.168.75.6' - looks for discrepancies between loopback
and routed interface
a2. 'nmap -v -oN `date +%F`.nmap.001.scan localhost 192.168.75.6' - archives
scan to LOG
a3. 'nmap -v -sP localhost 192.168.75.6' - PING ONLY
a4. 'nmap -v -sP 192.168.75.0/24' - quickly finds nodes on the current subnet
a5. 'nmap -v -iL FILENAME' - sources targets from file
Tasks:
1. Setup keypair
a. 'gpg gen-key' - generates usage keys
b. 'gpg --export -a | ssh 192.168.75.6 "gpg --import" ' - via SSH exports and
imports the key
c. 'gpg --list-keys' - confirm both parties have keys
3. Encrypt Notes File and send to recipient
a. 'gpg --encrypt -r KEY_ID FILE' - generates .asc || .gpg(binary) form
4. Decrypt ...
a. 'gpg -d FILE' - dumps to STDOUT
#TCPDump#
Features:
1. Packet Capturing
2. Analysis - Playback
3. Uses standard: libpcap : i.e. WireShark, Snort, TCPDump
4. Provides 3 Qualifiers to Filter traffic: both during and post-capture
a. Type - host|net|port
b. Direction - src, dst, src or dst, src and dst
c. Protocol - ip, tcp, udp, etc.
NOTE: Use qualifiers liberally during capture to reduce the overall footprint of
the capture file
NOTE: Promiscuous mode access to interface(s) is required to use TCPDump
Usage:
1. 'tcpdump -v' - dumps packets to STDOUT
a. Reveals tons of traffic pertaining:
a1. Other virtual hosts that share the same broadcast domain
a2. Unicast traffic: i.e. SSH session and other traffic to other nodes
a3. Broadcast traffic
NOTE: Returns TCP/IP header with name resolution where applicable
b. 'tcpdump -v -n' - disables name resolution
# WireShark #
Features:
1. Capture
2. Graphical Analysis of captures
3. Libpcap (Default)
4. Supports multiple capture formats
Tasks:
1. Parse captures
a.
# SuSEFirewall2 #
Features:
1. IPTables (NetFilter) Front-End
2. Facilitates common zones:
a. INTERNAL
b. DMZ
c. EXTERNAL
NOTE: Zones are IPTables Chains
Tasks:
1. Explore current setup
a. LOCAL
Tasks:
1. Generate SSH usage keys per node
a. 'ssh-keygen ' - defaults to RSA in the: $HOME/.ssh/id_{[dr]sa,[dr]sa.pub}
NOTE: A usage password (to use the key pair) is optional, however, it makes the key
more secure in the event it is obtained by an unauthorized user
NOTE: After enabling PKI-only for 'root' user, subsequent keys will need to be
copied using other means: i.e. different account: i.e. 'linuxcbt', etc.
# Hardening #
Features:
1. Tightens policy for key areas
a. Password
b. accounts
c. etc.
Tasks:
1. Explore
2. Set tighter policy