Depends on how you intend to access your storage, really.
If you absolutely need it to be accessible as a network drive then I think you have to go for a VPN + CIFS solution. CIFS is the file-sharing protocol used by Windows for its file sharing, and it's implemented by the SAMBA suite for POSIX systems. Unfortunately, due to a number of reasons exposing CIFS directly to the internets either is not really possible or advisable (the protocol relies on using a port mapper and has a long trace of security problems), so I would say if you're about to use it, install a VPN on your Debian box (PPTP or IPSec or OpenVPN — personally I think the latter is the best bet) and access your CIFS shares hosted on Debian over it.
If you just want to be able to exchange files with the remote system and are okay with not having networking drives in your Explorer, then there are more options:
- FTP server (password-protected; optionally SSL-protected) — old and low-security, but accessible from any Windows host without installing anything.
- SSH server. High security, usually even comes pre-installed. Requires third-party software on the Windows side, like WinSCP (or its plugin for FAR or Total Commander). PuTTY, which is a de-facto standard Windows client for accessing hosts via SSH, comes with two command line tools,
psftp which are like Unix
cp and SSH's
sftp commands (the latter is a FTP-like client using SSH); this is only for hard-core users, obviously.
Yet another approach is to use some specialized ("Dropbox-like" solution), for instance SparkleShare or OwnCloud. Obviously, these are not just file-exchange things, and require somewhat complicated setup on the server (the latter requires a DBMS running, for instance).
Update (2013-03-28): I should add that personally I would go for SSH. The reasons:
- SSH is the de-facto standard way to access Unix systems over the network for interactive work. I mean, one typically rents a VPS to run something like LAMP on it or something like this. Sooner or later one would need to just get a remote shell on the server, and this means using SSH (and supposedly PuTTY — on the client machine).
- SSH can be set up (and should, actually) in such a way as to only allow pubkey-based authentication (instead of password-based). Basically this means you would generate a pair of keys (public and private), put the public part into the
~/.ssh/authorized_keys file on your server and encrypt the local (private) key with a password. Each time you connect (or once per login session, if a key agent (PuTTY has one) is used) the password is asked to decrypt the private key; the authentication then proceeds using these keys. This scheme has very-very low statistical chance of being brute-forced (well, unless a critical flaw appears in the SSHv2 protocol or its particular implementation).
- WinSCP is really feature-rich and its plugins for popular "classic" file managers just work. If all fails, PuTTY's tools might be used to exchange files.
- One minor point I did not mention is that many programmer's tools (like the
netrw plugin for Vim), web-development oriented IDEs (like Aptana) support semi-transparent editing of files "in place" over SSH or SFTP.