Preventing Program Change

Once I've put a program into an Arduino, is there anyway I prevent the program from being replaced/modified. I want to leave the USB port still available, but I don't want new programs to e uploaded. Suggestions?

Get a suitable AVR programmer and upload your sketch using it. This will remove the bootloader so no more uploads using standard USB connection but you will still be able to program it using a programmer. Next step is to still use a programmer but once your sketch is uploaded disable the serial programming bit (SPIEN) fuse this will also stop programming using the normal AVR programmer so now the only way to program would be to use a high voltage programmer. Not sure if/how you stop these.

Can you tell why ?

People can replace the atmel328 chip with another one so hacking your system by replacing it costs <$10

IIRC there are fuse settings that prevent downloading - you need to check the datasheet -

DavidChipman:
Once I've put a program into an Arduino, is there anyway I prevent the program from being replaced/modified. I want to leave the USB port still available, but I don't want new programs to e uploaded. Suggestions?

You need an ISP programmer to change any chip settings. If you simply use it to upload a program then the bootloader will be killed and you need another programmer to change anything.