What are some essential concepts I need to know as an inexperienced server administrator? [closed]
I (as this title implies) am very new to this server configuration stuff. I have recently been pushed to learn how to configure developing/production environments. My history with actual server/network configuration is limited to programming. I am proficient with PHP/MySQL/JavaScript.
I am picking up on server-related stuff at a fast pace and jumping into some rather complicated stuff.
I executed my first LAMP install (on Ubuntu) about a month ago and I have...
- successfully installed/configured Apache. This includes setting up virtual hosting, setting up folder permissions. My understanding of Apache is decent. I'd still like to get into mod_rewrite more...
- Successfully installed/configured Postfix. I had a bit of help with this one from my partner - who is also not all that experienced in this realm. I followed this tutorial pretty much exactly. I have elaborated on this tutorial a bit, in that I am utilizing an SMTP relay through Gmail.
- Successfully installed/configured OpenSSL. (via the Ubuntu community wiki tutorial). This was a bit less challenging and more brief than Postfix... But my server can now generate and validate certificates for itself, in addition to using a third party authority to validate certificates.
- A decent base of using the command-line. SSH'ing, vi, pico, some directory/file making junk. and other little odds and ends. (perhaps a nice cheat sheet would help?)
Any other server-admin-related processes are slipping my mind right now, but they are probably very minor.
I should mention that I will be specializing in Linux based (likely Ubuntu) servers via Amazon EC2. This will not be my career path - just a temporary utility. I will personally be focusing on the web-based application end of development. I figure I can't go wrong learning how to configure my environment... right?
I am a bit concerned though, as I have no "formal" education in this subject matter (or really in any web-related subject). I rely heavily on forums or Q&A sites such as this one, to ensure my education is complete.
Large or small. It makes no difference to me. It's my understanding that everyone has those 'holy crap, I wish I knew about this a while ago!' moments.
The problem I'm facing is I lack a base. I am confident that I can learn how to do most of the moderate and some advanced stuff.
Short of repetition and just immersing myself in material. What do I need to know?
Which concepts do I need to know in-and-out?
For example: security essentials, how to set up a decent system to securely FTP (file transfer, whatever), filesystem organization, which Linux distribution should I use.
Thanks - any input or direction given is greatly appreciated!
Sorry if this is a bit general and vague.
EDIT: I will be focusing on Internet-based applications that will most definitely be using some kind of SQL database.
You should know how to do backups and more importantly test whether the restore is functioning probably. So you can get back files when you accidentally deleted some.
When you administer multiple servers, take a look at configuration management tools like Puppet.
Keep a log of your changes and the reasons why you made them. In ITIL terms it is done in a cmdb, but you could start with a simple textfile, wiki, ...
Get a monitoring solution like Nagios so you know what your systems are doing.
Automate as much as possible. you will be thankful for every script you have when things get messy.
This isn't everything for sure, but I'm certain you will get a lot of other good answers.
Edit1: here are some blogs which might help to get you a starting point:
- http://administratosphere.wordpress.com/
- http://www.thegeekstuff.com/
- http://www.cyberciti.biz/
- http://www.agileweboperations.com/
- http://agilesysadmin.net/
And some books:
* Linux System Administration Handbook
* The Art of UNIX Programming
Edit2: here is a overview of different Linux distributions:
- http://agilesysadmin.net/opensource-os-recommendations
Your backups are only as good as your restores.
I'd say that one important lead you can take is to truly get your head around all the various forms of virtualisation (server, desktop, storage, network etc.) as it's one area where I've really started to see some of the 'old guard' struggling.
I'm not talking about the hands-on side of things, more the required separation of functionality from physicality - once you've 'got it' you'll see the benefit career-wise - I'm surprised how many people either can't understand it at all or fall back to old ways by default.
You also need to develop very 'clean', product/tech-gnostic, fault-finding skills - these will be more valuable long-term than any specific skills you might have right now as the kit and software we use changes all the time but basic logical thought processes rarely do.
Best of luck.
Don't use FTP. Use SCP (sshd/ssh to transfer files).
Your question, as you said, is vague. That makes it hard to give any specific details. I mean, what are your end goals? I'm an administrator for servers, but I don't do much at all with our Cisco CallManager/PBX system. System administration falls into sub-disciplines, and while there's crossover, most of learning about system administration comes from actively pursuing the needs of your users and business and experiencing issues to solve and reading books, magazines, blogs, etc.
You should probably know about backups. You need to have a system that allows you to restore the computer from bare metal if necessary, so to speak. But it depends on your needs. Do you have a lot of dynamic data? Do you need 24/7 uptime and accessibility?
Security depends on how what you're running and who you're allowing access to the server. Keep up with updates, disallow unneeded services, scan with nmap and auditing tools, etc. to assess it, but also be aware of simple things like user password requirements, trust given to users, and it also depends on what you're running on the server. For example, SQL could be the latest version, but if you're not sanitizing input from the web server, you could have injection attacks.
If you have a specific usage scenario others on the site may be able to give you more information relevant to your situation. Otherwise, the only thing I could suggest is to get Linux books from your local bookstore and read, read, read. Check out security blogs from gurus like Bruce Schneier.
The Practice of System and Network Administration. This book is a must-have.