There are a number of ways to do this, the best are probably very much like real boats, that is, real (old) boats rigged simply, without store bought hardware.
Gaff sails on a real boat might use wooden “hoops”.
Segments of CPVC plastic pipe can become “hoops” for the model. 3/4” CPVC pipe fits well for Schooner Irene’s 5/8” diameter masts. Be sure to consider placing the hoops over the mast before adding fittings (gooseneck / halyard blocks / cheeks for standing rigging). You will then have to work around the hoops when staining or varnishing the mast, and sew the hoops to the sail afterwards.
Marconi sails, like the mainsail on Irene’s original rig, require another solution because hoops obviously would not be able to slide past the spreaders.
In this case, I have rigged a “jack line”. This is a small diameter line (I used #18 tarred nylon seine twine) set up tight along the after side of the mast from the gooseneck to nearly the top of the mast. Tiny “dress hooks” which can slide up and down the jack line are sewn to the sail. Holding the jack line close to the mast when sailing might require several loops of thread (barely visible) around the mast.
Jib sail on Irene – Segments of plastic tube (old ball point pen perhaps) sewn to the sail can slide over the headstay.
Rope lacing was also common in the past, used on gaff rigs and sprit rigs like Emma’s. There is a proper way to do this, the line passing through the sail then back around same side of mast it came from, and on to the next point on the sail.
Emma’s Sprit Sail can also be held to the mast by a number of simple individual loops of heavy thread (or light twine), tied with a square knot. This too, is realistic.
Working with nylon or polyester thread or twine, I like to put a drop of super glue (CA) on all the knots.