Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

Just created a new virtual Ubuntu server and I'm in the process of hardening it for production use. I currently have a root account. I want to do the following:

  • Create a new user (let's call them jim for the rest of this). I want them to have a /home/ directory.
  • Give jim SSH access.
  • Allow jim to su to root but not perform sudo operations.
  • Turn off root SSH access.
  • Move SSHd off to a non-standard port to help stop brute-attacks.

My problem lies with the first two items. I've already found useradd but for some reason, I can't log in as a user created with it over SSH. Do I need to beat SSHd to allow this?

share|improve this question
    
Hi! I can help you in servers, I don't know what is your problem with SSH, because for me with default config never refuses my connection. You may see man 5 nologin, this writes, that if /etc/nologin exists, you can log in with root only. Try login normally, then write the results. –  B. Roland Dec 8 '10 at 16:22
    
What's the user's shell? Is it /bin/bash? Check that out in /etc/password. Make sure it's not /dev/null or /bin/false. –  LFC_fan Dec 8 '10 at 16:24
    
Yes LFC_fan, or /etc/nologin too. Use (sudo) cat /etc/passwd | grep jim –  B. Roland Dec 8 '10 at 16:31
    
@B. Roland I do have a /etc/nologin file but it's empty. I deleted it and restarted ssh but it's still just responding Permission denied, please try again. when I try and log in. –  Oli Dec 8 '10 at 16:42
    
@LFC_fan it's /bin/bash –  Oli Dec 8 '10 at 16:42

5 Answers 5

up vote 18 down vote accepted

Edit (as root) /etc/ssh/sshd_config. Append the following to it:

Port 1234
PermitRootLogin no
AllowUsers jim

Port 1234 causes SSH to listen on port 1234. You can use any unused port from 1 to 65535. It's recommended to choose a privileged port (port 1-1024) which can only be used by root. If your SSH daemon stops working for some reason, a rogue application can't intercept the connection.

PermitRootLogin disallows direct root login.

AllowUsers jim allows user jim to login through SSH. If you do not have to login from everywhere, you can make this more secure by restricting jim to an IP address (replace 1.2.3.4 with your actual IP address):

AllowUsers jim@1.2.3.4

Changes to the configuration file /etc/ssh/sshd_config are not immediately applied, to reload the configuration, run:

sudo service ssh reload
share|improve this answer
2  
+1: Note: these instructions are still applicable to newer versions of Ubuntu (e.g. 13.04). If you do want root login, however, (perhaps you're still setting up the server), you must set PermitRootLogin to yes and also add root to AllowUsers. –  JRG-Developer Oct 15 '13 at 18:57

I could be wrong but I always have to install the server daemon before I can connect (At least on desktop) ssh is installed by default but that is just the client

this command installs the server

sudo apt-get install openssh-server

You can change the port and stop root login by editing

/etc/ssh/sshd_config

This requires you to restart the service though.

sudo service ssh restart

share|improve this answer
    
This is a virtual server (VPS) so SSH is installed by default. It's my only interface to the server. And you can reload configuration via sudo /etc/init.d/ssh reload instead, but good information nonetheless. –  Oli Dec 8 '10 at 16:54

There will be clues in /var/log/auth.log for why SSH (or PAM) is rejecting the login attempt. Additional clues may be found by using the -v option with the ssh client. Several common situations, some mentioned in the other answers:

  • the user account lacks a password, or is otherwise disabled (see man passwd, try resetting the password or checking the contents of /etc/shadow).
  • /etc/ssh/sshd_config is configured to disallow the login (DenyUsers, AllowUsers, PasswordAuthentication, PubkeyAuthentication, UsePAM etc, see man sshd_config).
  • the user's shell is not listed in /etc/shells.
  • various permission problems on directories or files related to SSH operation: /etc/ssh, /home/jim/.ssh, /home/jim/.ssh/*, etc.

I'd also recommend using adduser (instead of useradd) for adding new users; it is a little more friendly about various default account settings.

As long as the user is not part of the admin group, they will not be able to sudo to root. For them to use su, you will need to set a root password (passwd root), after which I recommend setting PermitRootLogin=no in /etc/ssh/sshd_config.

share|improve this answer
    
Thanks a lot for great answer- specially "adduser" helped a lot! –  vishal.biyani Aug 21 '13 at 11:47

Jim will not have SSH access until you have set a password. As root execute:

grep -i "jim" /etc/shadow | awk -F':' '{ print $2 }'

If this command returns a "!" character then login is disabled for this account. Executing passwd jim as root will prompt you for a new and confirmed password string after which the grep command above should return a hashed string representing the password for jim.

Also be sure to verify that jim has a login shell, set by default, and a home directory that exists.

Please note lekensteyn's post for information on modifying SSH server settings.

share|improve this answer

SSH is very picky about the directory and file permissions. Make sure that:

  1. The directory /home/username/.ssh has permission "700" and is owned by the user (not root!)
  2. The /home/username/ssh/authorized_keys has permission "600" and is owned by the user

Copy your public key into the authorized_keys file.

sudo chown -R username:username /home/username/.ssh
sudo chmod 0700 /home/username/.ssh
sudo chmod 0600 /home/username/.ssh/authorized_keys

There is NO need to add the user to /etc/ssh/ssh_config.

share|improve this answer
    
My problem was chown, I created ~./ssh as root and never gave the user ownership. –  Gerve Apr 9 at 18:05

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.