How to change surface textures?

How do you assign textures to specific surfaces and objects? Can you make custom textures?