出于安全原因禁用用户外壳


58

我们为需要精细权限的自动化任务创建了多个用户帐户,例如跨系统的文件传输,监视等。

我们如何锁定这些用户帐户,以便这些“用户”没有外壳并且无法登录?我们希望避免有人可以以这些用户帐户之一的身份进行SSH登录的可能性。

Answers:


63

您可以使用该usermod命令来更改用户的登录外壳。

usermod -s /sbin/nologin myuser

要么

usermod -s /usr/sbin/nologin myuser

如果您的操作系统不提供/ sbin / nologin,则可以将shell设置为NOOP命令,例如/ bin / false:

usermod -s /bin/false myuser

1
/bin/false似乎比/bin/true
jw013

@ jw013我更新了答案,但两者都可以正常工作。
jordanm 2012年

1
请注意,nologin实际上在Debians 上可以找到/usr/sbin/nologin
xebeche

这是我的第一个想法,不幸的是,设置时禁用了某些用户帐户的“有效”使用nologin
Javier

2
@ jw013其实我有/usr/local/bin/maybe/dev/urandomLY这两个之间进行选择。也许我应该使用它:D
hegez

21

更改登录Shell并不一定会阻止用户进行身份验证(某些服务中会检查用户的Shell是否在中提到/etc/shells)。

人们可能仍然可以对您的系统提供给Unix用户的各种服务进行身份验证,并且即使没有直接运行任意命令,人们仍然可能被授权执行某些操作。

将shell更改为/bin/false/usr/sbin/nologin将仅阻止它们在可用于运行命令的那些服务上运行命令(控制台登录,ssh,telnet,rlogin,rexec ...),因此仅影响某些服务的授权

对于ssh例如,仍然允许他们做端口转发。

passwd -l将禁用密码身份验证,但仍然可以允许用户使用其他身份验证方法(例如authorized_keysssh)。

随着pamLinux上至少,你可以使用pam_shells模块来限制与允许的壳(中提到的那些在认证或授权的用户/etc/shells)。对于ssh除了其他身份验证方法(如)外,您还需要account身份验证sshd使用方面pam 授权()级别上进行操作authorized_keys,也可以使用中的sshd_config指令/etc/ssh/sshd_config(如AllowUsers和朋友)来进行操作。

请注意,在全局pam授权中添加一些限制可能会阻止cron以这些用户身份运行作业。


谢谢。然后,在以下模式下,您会建议什么:我需要创建一个用户,该用户需要通过sftp或sshfs访问其主文件夹,但他必须不能使用Shell登录。那有可能吗?我很喜欢PAM模块可能是goto解决方案,但我对此并不了解:|
Stphane


4

您编辑/etc/passwd文件,并将用户shell从/bin/bash或更改/bin/sh/sbin/nologin


8
答案是正确的,但绝不建议手动编辑/ etc / passwd。
jordanm 2012年

3
为什么?只要我一直是专业的系统管理员,这就是我们一直在做的事情。(大约20年了)实际上,并不是所有的linux / unix发行版都具有修改/ etc / passwd或/ etc / group的工具。它们在手工编辑中没有任何危害。
Mark Cohen 2012年

6
通过手工编辑而不是单个用户,更容易犯“破坏所有人的登录”错误。
jordanm 2012年

2
@jordanm:vipw可以防止这种错误。
eudoxos

4

首先,使用禁用密码passwd -l username

另请注意man页面中passwd的选项-l

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.

1
这可能是不希望的。例如,他们可能需要在系统帐户上输入密码才能访问电子邮件。
jordanm 2012年

1
一些电子邮件系统允许使用自己的密码机制。我将Dovecot和Exim与仅电子邮件密码一起使用。这允许在服务器上使用Webmail,而我不会使用系统密码。虚拟电子邮件域不与服务器密码系统耦合,因此需要自己的密码。
BillThor 2012年

2

您可以使用chsh命令:

~# chsh myuser

根据要求输入新的外壳详细信息:

Login Shell [/bin/sh]: /bin/nologin

或更短的版本:

~# chsh myuser -s /bin/nologin

0

为了防止日志用户通过SSH甚至认证,使端口转发(如描述这里斯特凡),我修改用户是类似系统的nobody用户:

  • /etc/shadow(带有*!!位于适当字段中)阻止了密码身份验证
  • 禁用外壳/etc/passwd(例如/sbin/nologin在适当的区域)
  • 只读主目录/etc/passwd(例如/在适当的字段)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.