Por mais estranho que pareça,
ln -si ../../../GIT/Settings/session ./.mozilla/firefox/foo.default/
fará o que você quiser. A regra básica aqui é que você deve especificar seus alvos de link em relação ao local onde você está colocando o link.
Em sistemas de arquivos Unix e Unix-like, um link simbólico é na verdade um arquivo especial cujo conteúdo é um caminho. Digitar ln path filename
cria um link simbólico no nome do arquivo cujo conteúdo é caminho . Então, se, por exemplo, você digitar
ln foo bar/baz
então o seu sistema irá criar um link chamado bar / baz contendo o caminho "foo". Esse link, no entanto, será quebrado - quando você tentar desreferenciar o link, o kernel o desreferencia em relação ao diretório de link - neste caso, bar. Seu kernel irá procurar por bar / foo, que não existe.
Se, por outro lado, você digitar
ln ../foo bar/baz
então o seu sistema irá criar um link chamado bar / baz contendo o caminho "../foo". Ao desreferenciar este link, seu kernel irá procurar por bar /../ foo, que existe (e é de fato o que você quer).