sudo -u foo -H touch bar
Você está tentando assumir a conta do usuário foo, que não tem acesso de login (especificamente, um shell). Isso não vai funcionar: -)
Você pode controlar o diretório inicial do usuário como root. por exemplo,
sudo touch /home/foo/bar
sudo chown foo.foo /home/foo/bar
Para conseguir o que você quer, ou se você puder, su
para root e faça isso, ou;
Você pode fazer uma substituição única do shell para o usuário foo
su -s /bin/bash foo
Para chegar a um bash shell rodando como o usuário foo, e faça suas mudanças lá. Qual é o que você provavelmente está querendo fazer em primeiro lugar.
Nota:
Um usuário com / sbin / nologin geralmente é uma conta do sistema. As contas do sistema devem ser gerenciadas pelo usuário raiz ou por um usuário com privilégios sudo (um membro do grupo wheel em versões recentes do RHEL / CentOS). Eu te dei um método primeiro, porque geralmente é assim que é feito, não do jeito que você está fazendo. Isso não quer dizer que você está fazendo do jeito errado - sempre há mais de um: -)