In no particular order:
The big thing is to learn concepts! Technology changes fast but understanding why backups are important and how they should work or why access control is important doesn’t.
Honestly, this is by far one of the best books I’ve read and should help get you started:
UNIX and Linux System Administration Handbook https://www.amazon.co.uk/dp/0134277554
There are tons of good resources available for free online. What helped me the most was a tutorial series done by TutoriaLinux on YouTube. About a year ago I was like you, trying to make a shift from a help desk kind of role mainly supporting Windows to a Linux Sys Admin role and his series really helped me learn the basics of system administration on Linux. Here is a link to a playlist he put together that should help you get started:
I also recommend The Unix and Linux System Administration Handbook. This is hands down one of the best Linux system administration books out there. Covers a ton of material and it’s an enjoyable read which is important when reading a 500+ page book. Not too pricey either, you can pick it up for about $25 dollars on Amazon.
UNIX and Linux System Administration Handbook (5th Edition) https://www.amazon.com/dp/0134277554/ref=cm_sw_r_cp_api_i_Yyf-Cb8YQVC2V
I’ve been self hosting for many years now. I started out with huge power hungry server that ran everything. This was in the 90s. I then moved on to a Raspberry Pi running every piece of software I needed, and as my needs grew, I added more Raspberry pi’s.
Storage has always been handled on a separate machine running on a different network, sharing only the needed resources with the (internet facing) server.
My current setup is:
NAS running Debian 9, with 32GB ram and ~22TB storage, serving files via Samba and NFS. It also runs a lot of stuff in docker containers, namely my PostgreSQL database, Kerberos KDC, and other infrastructure.
My Internet facing host is a NUC7. It’s one of the smaller models, since it doesn’t need much horsepower. It has 8GB ram, and run services in FreeBSD jails (because I’m not clever/foolish/stupid/ignorant enough to run Docker on an internet facing machine). The machine itself sits on a DMZ network, and all traffic is routed through the firewall and IDS/IPS system.
It runs Emby, Nextcloud, Resilio Sync, Jupyter Hub, and a few Django/Flask apps I’ve written, and it never struggles with memory or CPU. All data is stored on the NAS, served via Kerberized NFSv4.
If you’re just staring out, I would recommend starting by not putting anything on the internet until you’ve got the basics figured out. While most Linux distributions have fairly decent defaults, there is still room for misconfiguring something, which lets someone get in and delete all your stuff, or mine bitcoin, etc.
Instead, start by serving data through a VPN connection. It’s probably your safest bet.
Then learn about firewalls, securing an installation, things like rkhunter, debsecan, logwatch, fail2ban, etc.
Oh, and stay away from self hosting mail. It is _ a ton_ of work to stay off of the various spam lists, and if you have a dynamic up, chances are that most of your emails are going to bounce anyway. If you chose to go for it anyway, take a look at something like Mailcow (https://mailcow.email), which is a dockerized mailserver “in a box”, with sane defaults.
If you’re new to Linux/Unix administration, I’d recommend you buy a copy of Unix and Linux System Administration Handbook which will give great knowledge of many of the current technologies.
Not exactly 100% what you were asking for but here's a bunch of websites and books I've found super helpful.
Many people may disagree with me, but as a Linux user on the younger side of the spectrum, I have to say there was one thing that really worked for me to finally switch for good- books.
There's tons of wikis and forums and of course Reddit to ask questions, but it is hard to get good answers. You may end up paying for books (unless you look on the internet for books) but it doesn't beat having a hard copy in front of you. It boils down to a time vs money trade off. The only wiki I would follow is one directly from the developers that act as documentation, not a community wiki. Also worth nothing certain wikis are more tied to linux and the kernel than others, meaning some are comparable/interchangable with the distro you may be using. Still, a novice would not easily put this together.
Forums are also useless unless you have the configuration mentioned in the post or that forum curates tutorials from a specific build they showcase and you as a user decided to build your system to their specifications. There's way too many variables trying to follow online guides, some of which may be out of date.
This i've realized is very true with things like Iommu grouping and PCI Passthrough for kernel based virtual machines. At that point you start modifying in your root directory, things like your kernel booting parameters and what drivers or hardware you're gonna bind or unbind from your system. While that does boil down to having the right hardware, you have to know what you're digging into your kernel for if you dont follow a guide with the same exact parts that are being passthrough or the cpus or chipsets are different.
Books are especially handy when you have a borked system, like you're in a bash prompt or an initramfs prompt or grub and need to get into a bootable part of the system. Linux takes practice. Sometimes its easier to page through a book than to search through forums.
Another thing about being an intermediate or expert Linux user is that you don't care much about distros or what other users or communities do. It wont matter as under the hood it's all the same, spare the desktop and the package managers. Once you're out of that mentality you just care about getting whatever you want done. I'm not one of those guys that's super gung-ho FOSS and open source. I just use what gets the job done. Also from a security perspective, yes Linux is in theory MORE secure but anything can be hardened or left vulnerable. It's more configuration tied than many uses and forums or threads lead it on to be.
My workload involves talking to servers and quite a bit of programming and scripting, in a variety of capacities. That's what led me to linux over the competitors, but I'm not so prudent to never ever want to use the competitor again or have a computer with it. With understanding Linux more, I use it more as a tool than to be part of the philosophy or community, though that enthusiasm pushes for new developments in the kernel.
I'm assuming you're a novice but comfortable enough in linux to get through certain things:
In any computer related thing, always TEST a deployment or feature first- From your linux system, use KVM or Virtualbox/vmware to spin up a few linux VMs, could even be a copy of your current image. This way any tweaks or things you want to test or try out is in an environment you can start over in.
The quickest way to "intermediate-expert" Linux IMO is learning system administration.
My go to book for this is "The Unix and Linux System Administration Handbook 5th edition"
This edition is updated recently to cover newer kernel features such as could environments and virtualization. This book also helps when learning BSD based stuff such as MacOS or FreeBSD.
Another good read for a "quick and dirty" understanding of Linux is "Linux Basics for Hackers" It does focus on a very niche distro and talks about tools that are not on all Linux systems BUT it does a good concise overview of intermediate things related to Linux (despite being called a beginners book).
There's also "How Linux works" but I cannot vouch for this book from personal use, I see it posted across various threads often. Never read this particular one myself.
If you want a more programming oriented approach, if you're confortable with the C language, then you can always look at these books:
The Linux Programming Interface
Unix Network Programming VOL 1.
Advanced Programming in the Unix Environment
These books would take you to understanding the kernel level processes and make your own and modify your own system.
As many have mentioned, you can go into these things with "Linux from scratch" but it's also feasible to do Linux from scratch by copy/pasting commands. Unless you tinker and fail at certain things (hence do it on a vm before doing it to the main system) you won't learn properly. I think the sysadmin approach is "safer" of the two options but to each their own.
man pages really are good enough once you got the basics down. They were 20 years ago, and I don’t think the quality has decreased. If you want truly great man pages, FreeBSD is the place to go.
To get the basics down, start with something like this
Once you understand that, follow up with something like this
Young people today.. they pick Arch to “learn something” (or just to be cool - I can’t decide), and when the learning part starts, they want the answers served without any effort.
There’s nothing wrong with wanting to learn, just don’t expect to be finished in 4 hours.
I’ve spent 20 years as a Unix system administrator and/or developed systems running on Unix. Before I had kids I spent a few years working on Stampede Linux. My first Linux distribution was “Yggdrasil Plug&Play Linux fall ‘93”. I still learn new stuff frequently, and it usually starts with something I find on the internet, which then get tried on my own machine, and finally i use man pages for troubleshooting/fine tuning.
If that fails, I do what everybody else does, i ask google, and if I still can’t solve the issue, I will ask somewhere. Last issue I had was Debian <-> FreeBSD NFSv4 mounts with Kerberos that would freeze frequently. I spent a couple of weeks debugging that before asking, and learned a great deal in the process. After google started returning only purple links, I finally asked on a couple of forums.
Running a home server connected to the internet is no small task.
A book like Linux and Unix System Administration Handbook will help you a lot! (https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554)
You’ll need, as a minimum:
A firewall to limit access to only the services you want to expose. SSH might be tempting to enable, but if you can, try to avoid exposing it, and if you must, consider exposing it through a VPN connection instead.
Good security on your server, with frequent software updates. Frequent means daily or more.
Strong passwords on everything. Use 2FA everywhere possible.
Consider using Docker or Snaps for container isolation. If using FreeBSD, jails are great. To fully use isolation, look into AppArmor, docker networks and cgroups. Only use containers when you understand how they work.
Use logwatch to get periodic emails about the state of your machine.
Use fail2ban to catch people trying to brute force their way in.
Sounds like a lot of work ? That’s because it is.
The absolutely best route would be to setup a VPN and expose services only on the internal network.
Hey man you've got to start somewhere! I'm disappointed your colleagues bust on you in what sounds like a negative way for not knowing your stuff--I'd still tell you "RTFM" on any and all Linux questions both because I want you to learn and I'm a terrible person...
All joking aside, you're definitely a sysadmin and you should be proud of your promotion even if you're a junior admin! Rather than dwelling on how awful and the work is, consider how much you're learning. Have you been working on developing any new skills since the boot camp? Are your coworkers all much older and/or more experienced?
For the Windows stuff, pick up PowerShell in a Month of Lunches, on the *nix side, the UNIX and Linux System Administration Handbook is great. But yeah it's totally normal you'd feel overwhelmed and even more normal to ask your coworkers things.
Yes. It's getting in touch with many different applications and services because you need them for some project. That's how you learn. Of course if you want to learn KVM virtualization you can read a book about it and do some project on that specific topic.
If you want to get an overview of Linux and Unix administration and many different pieces of software, you could look into this book:
(DM me on how to get it)
There almost certainly no configuration management system or orchestration system guides that are going to be useful without at least a base understanding of the systems you will be managing.
If you want some base knowledge maybe start with something like this
UNIX and Linux System Administration Handbook (5th Edition)
I can definitely recommend this book
I'm a big fan of:
Disclaimer: I know 2 of the authors, but the book is still solid.
From the level it sounds like you are at, for all intents and purposes (at this point anyhow) it is basically all the same, learn the Linux command line and that will set you up for a "UNIX" system.
These days most companies use Linux anyway, learn shell-scripting and system administration.
Buy this book
Ignore the GUI of a Linux system and learn to install Linux on an old PC and run services like a web-server, database etc remotely (over SSH) using a distribution like Debian (choose the server option).
Once you've mastered that then install Arch linux.
Once you've mastered all that then try the same with OpenBSD and FreeBSD.
Sounds like your off to a good start.
If you're the book type: UNIX and Linux System Administration Handbook is a great reference to always have near you, and a good book for experts and learners alike. It's basically the gold standard for all-around knowledge basics in this position.
That said, it's not imposter syndrome you're dealing with... at least not mostly.
You are aware of your ability to improve, and that's a good thing. Too many people think that because they have a homelab or have used linux for years on their machine makes them an expert.
it doesn't. You will deal with chalanges that you never run into in a small lab environment because now everything is 100 times bigger, and you have many people and services interacting with anything. The convoluted tangled mess of connections gets real, very quickly.
Understand that there are things you don't know. This will be the case for the rest of your career here. Always learning, always changing, always adapting to new ways of doing things. Just let it all wash over you for a while and take in what you can.
If something specific comes up, learn that. Just go with what comes at you and learn on the go. That's the real skill it takes to be a linux admin. you gotta be able to be handed something completely new to you, read up on what it does, and then work with it. Then you get handed another new thing.
Over time your experience in all these things all kind of blends together into a solid base of knowledge of how things work, as most of the time conventions transfer between different systems and different software. Over time you get better at guessing/expecting what something is and what it does.
If you feel like you're drowning in too much information, just accept it for a while, go get a cup of coffee, and try reading through it a little more. Eventually the dots get connected and you can press on further.
The linux world is MASSIVE and complex. You can never learn it all, and you shouldn't make that your goal.
Your goal should be to learn what you need to do things right now, and then move to the next task, only learning as much as you need to get the job done.
Also, make sure to take notes! sounds like you've already realized you can't keep it all in your head. your documentation will be your lifesaver, or your undoing depending on how useful it is to you later when you need to reflect on what you did a month or 5 years ago.
Sounds like you are doing well enough so far to jump in and start getting to know your new place. Don;t be afraid to ask a lot of questions, doing things right is much more important than simply looking like you know what youre doing.
This is one of the jobs that rewards you for learning a little bit every day, and if you like learning it's probably going to be motivating to do that too. You've got a lot to learn just stepping in the door, but it sounds like youre already aware of that and up to the task, so get ready and good luck!
UNIX and Linux System Administration Handbook
* The Go Programming Language
* Building Microservices
Plan to do next:
* Designing Data-Intensive Applications
* Designing Distributed Systems
* Unix and Linux System Administration 5th ed, but probably just gonna skip/read chapters of interest, i.e. I wanna get a better understanding of SystemD.
Read last month:
* Learning React
Good for a quick intro but I probably wouldn't read cover-to-cover again, some sections are old, but overall an OK book.
* React Design Patterns and Best Practices
Really liked this one, picked a tonne of new ideas and approaches that are hard to find otherwise for a newbie in JS scene. These two books, some time spent reading up on webpack and lots of github/practice code made me not scared of JS anymore and not feeling the fatigue. I mean, I was one of the people who dismissed everything frontend related, big node_modules, electron, complicated build systems etc. But now I sort of understand why and am on the different side of the fence.
* Flexbox in CSS
Wanted to understand what's the new flexbox layout is about since it's been a while when I've done some serious CSS work. Long story short I made it about half of this and dropped it - not any more useful than MDN docs and actually playing with someone's codepen gave me better understanding in 5 minutes than 3 hours spent with this book.
This one: https://toptalkedbooks.com/amzn/0134277554 ?
https://toptalkedbooks.com/amzn/0134277554 just my two cents