Heat olive oil in a large skillet or Dutch oven over medium-high heat. Add ground beef and cook, breaking it into small pieces, until browned.
Add chopped onion and cook until softened, about 3 to 4 minutes. Drain excess grease if needed.
Add minced garlic and cook for about 30 seconds.
Stir in tomato paste and cook for about 1 minute.
Add crushed tomatoes, water, Italian seasoning, salt, and black pepper. Stir well.
Bring the sauce to a gentle simmer. Reduce heat to low and simmer for about 25 minutes, stirring occasionally.
Meanwhile, cook spaghetti in salted boiling water according to package directions until al dente. Reserve about 1/2 cup pasta water, then drain.
Toss drained spaghetti with the meat sauce. Add reserved pasta water a little at a time if the sauce needs loosening.
Serve with grated Parmesan and fresh basil or parsley, if desired.