diff options
author | Matt Johnston <matt@ucc.asn.au> | 2013-04-17 22:29:18 +0800 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2013-04-17 22:29:18 +0800 |
commit | 54a76342f5e4df4e6510b38815bb95ad44d6ef36 (patch) | |
tree | a85289d5b2a8f49fb32e04825f634de0c549feb9 /svr-auth.c | |
parent | 154a65fc31922d612a44c0a839c2a7c27f722390 (diff) |
If running as non-root only allow that user to log in
Diffstat (limited to 'svr-auth.c')
-rw-r--r-- | svr-auth.c | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -226,6 +226,7 @@ static int checkusername(unsigned char *username, unsigned int userlen) { char* listshell = NULL; char* usershell = NULL; + int uid; TRACE(("enter checkusername")) if (userlen > MAX_USERNAME_LEN) { return DROPBEAR_FAILURE; @@ -255,6 +256,18 @@ static int checkusername(unsigned char *username, unsigned int userlen) { return DROPBEAR_FAILURE; } + /* check if we are running as non-root, and login user is different from the server */ + uid = geteuid(); + if (uid != 0 && uid != ses.authstate.pw_uid) { + TRACE(("running as nonroot, only server uid is allowed")) + dropbear_log(LOG_WARNING, + "Login attempt with wrong user %s from %s", + ses.authstate.pw_name, + svr_ses.addrstring); + send_msg_userauth_failure(0, 1); + return DROPBEAR_FAILURE; + } + /* check for non-root if desired */ if (svr_opts.norootlogin && ses.authstate.pw_uid == 0) { TRACE(("leave checkusername: root login disabled")) |