禁止某些用户使用ssh 远程登录

禁止某些用户使用ssh 远程登录

 

vim /etc/pam.d/sshd

在第一行加入 auth required pam_listfile.so item=user sense=deny file=/etc/sshdusers onerr=succeed,注意一定要在第一行,因为pam中执行顺序是上面优先

vim /etc/sshdusers

在文件中加入root wp ,root 和wp是两个本地用户

service sshd restart

在另一个终端测试

[root@clone2 ~]# ssh clone1.rhel.com
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied (publickey,gssapi-with-mic,password).

[wp@clone2 ~]$ ssh clone1.rhel.com
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied (publickey,gssapi-with-mic,password).
两个用户都无法使用ssh了。呵呵,目的达到了


                    pam_listfile的使用

说明:
pam_listfile        应用程序对文件的访问控制

[root@station203 pam.d]# uname -a
Linux station203.example.com 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:02 EDT 2007 i686 i686 i386 GNU/Linux

首先先man一下再说。
[root@station203 security]# man pam_listfile
...........省略..............


所属类型:auth、account、password、session


用法:
pam_listfile.so item=[tty|user|rhost|ruser|group|shell] 
        sense=[allow|deny] 
        file=/path/filename
        onerr=[succeed|fail] 
        [apply=[user|@group]]

item:设置访问控制的对象类型。
sense:用来指定当在保存“item”对象的文件中找不到item指定的对象时的动作方式,如果在文件中找不到相应的对象,则执行相

反的动作。
file:指定保存有“item”对象的文件位置。
onerr:用来指定当某类事件(如无法打开配置文件)发生时的返回值。
apply:用指定使用非用户和组类别时,这些规则所适用的对象。当item=[user|ruser|group]时,这个选项没有任何意义,只有当

item=[tty|rhost|shell]时才有意义。


实例:
先安装好vsftp,我用这个软件做试验。
[root@station203 pam.d]# rpm -qa | grep vsftp
vsftpd-2.0.5-10.el5
[root@station203 pam.d]# service vsftpd start            ## 直接启动

[root@station203 pam.d]# vim vsftpd 

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
## 试着解读上面这行。

## 说明,vsftp默认允许localuser登陆ftp,我的系统已经有aaa,bbb两用户。

[root@station203 pam.d]# vim /etc/vsftpd/ftpusers 
## 在最后加上aaa

[root@station203 pam.d]# ftp 192.168.1.203            ## aaa用户测试登陆ftp,输入正确密码,登陆失败
Connected to 192.168.1.203.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.203:root): aaa
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

[root@station203 pam.d]# ftp 192.168.1.203            ## bbb用户测试登陆ftp,输入正确密码,登陆成功
Connected to 192.168.1.203.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.203:root): bbb
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

[root@station203 pam.d]# vim vsftpd                 ## 如果我把sense=deny改成allow会变成什么样子?

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=allow file=/etc/vsftpd/ftpusers onerr=succeed

## 修改好后,vsftp只允许/etc/vsftpd/ftpusers文件中的用户登陆。
## 试验昨晚,改回deny吧。一个插曲,昨天做的pam_succeed_if试验,忘记改回来,结果今天开机root登陆不上,只能进单用户改

回来。

实例二:
[root@station203 pam.d]# useradd -s /bin/csh ccc        ## 新建用户ccc,他的登录shell是csh
[root@station203 pam.d]# passwd ccc
[root@station203 pam.d]# vim /etc/loginshell            ## 创建一个文件,内容如下
/bin/csh
## 注意,这里要写绝对路径
[root@station203 pam.d]# vim system-auth              ## 添加下面这行,想象会怎么样?
auth        required      pam_listfile.so item=shell sense=deny file=/etc/loginshell onerr=succeed

测试:
用ccc用户登陆,失败,查看/var/log/secure时pam_listfile起作用了。
假如我又把这行的sense=deny改成allow会怎么样?

OK,pam_listfile的用法就这些,其他的选项也差不多,不写了。


Pluggable Authentication Modules for Linux 可插拨认证模块
当用户访问服务器,服务程序将请求发送到PAM模块,PAM模块根据服务名称在/etc/pam.d目录下选择一个对应的服务文件,最后根据服务文件的内容选择具体的PAM模块进行处理。

通过ldd查看服务程序在编译时是否使用了libpam.so,决定服务程序是否支持PAM认证。
具体的pam文件放在/lib/security目录下,服务文件放在/etc/pam.d目录下

PAM服务文件格式
eg:
auth required pam_security.so
auth required pam_stack.so service=system-auth
service表示调用子服务文件

Module-type:
auth 检查用户和密码,分配权限
account 检查账号是否过期,是否有权登录
session 从用户登录成功到退出的会话控制
password 控制用户改密码的过程
control-flag:
required 要求矣须通过,否则结束退出
requisite 如果不通过还可继续向下认证,后面有一通过即可。
sufficient 通过则不需要向下认证
optional 可选项

常用PAM服务文件
login -------/etc/pam.d/login
ipop3d -------/etc/pam.d/pop
vsftpd -------/etc/pam.d/ftp(编译安装)或/etc/pam.d/vsftpd(rpm安装)
sshd -------/etc/pam.d/sshd
su -------/etc/pam.d/su
imap -------/etc/pam.d/imap

/lib/security目录下,各个pam模块的作用,可参考/usr/share/doc/pam-0.99.3.0下的帮助文件。
相同类型Module-type组成一个堆栈。

常用PAM模块
pam_access.so 控制访问者地址与账号名称
pam_listfile.so 控制访问者的账号名称或登录位置
pam_limits.so 控制为用户分配的资源
pam_rootok.so 对管理员(uid=0)无条件允许通过
pam_userdb.so 设定独立用户账号数据库认证

pam_access.so模块的使用―――控制访问sshd服务的主机和用户
1.修改需使用这个模块的服务文件,如sshd: /etc/pam.d/sshd添加
account required pam_access.so
2.修改模块的配置文件
/etc/security/access.conf
- : redhat : ALL EXCEPT 192.168.0. (格式)
3.测试
ssh
ssh
pam_access.so根据主机、IP、用户、拒绝或允许访问。

pam_listfile.so的应用 (比pam_access.so更加详细控制)
1.首先查看它的帮助文件,看它的具体格式,参数如何
#less /usr/share/doc/pam-0.99.3.0/txts/README.pam_listfile
item user,tty,group 说明列表文件中的内容
sense allow,deny 拒绝或允许文件中的用户
file 指定一个文件,内容根据item项来添加
onerr succeed,fail 当模块本身产生错误时,返回的值,如无法打开file指定的文件,一般设为succeed
2.将模块应用到sshd服务
将上面添加的pam_access.so清掉,然后在/etc/pam.d/sshd中添加(第一行)
auth required pam_listfile.so item=user sense=deny file=/etc/denyuser onerr=succeed
注意添加的位置顺序,否则看不到效果
3.创建编缉列表文件
#echo “redhat” >/etc/denyuser
4.测试
#ssh -l redhat 192.168.0.22 失败
#ssh -l chinaitlab 192.168.0.22 成功

#w 显示已登录的用户及最近的一次操作

pam_limits.so的应用
1.查看帮助文件,确认它的配置文件位置,参数模式
#less /usr/share/doc/pam-0.99.3.0/txt/README.pam_limits

用户名或组名
soft软限制
hard硬限制(不能达到的)
限制的内容,fsize文件大小,nproc最大进程数,maxlogins用户登录次数
2.将模块应用到sshd服务,修改服务文件
#vi /etc/pam.d/sshd 添加:
session required pam_limits.so
session 控制用户进程的登录次数,文件大小,通过控制用户的会话进程来限制用户使用的资源
3.编缉pam_limits.so的配置文件/etc/security/limits.conf
redhat hard maxlogins 2
限制redhat登录到sshd服务的次数,不能达到2。
4.测试
#ssh -l redhat 192.168.0.22 第1个
#ssh -l redhat 192.168.0.22 第2个
表示同时最多可以有1个redhat用户登录

pam_rootok.so的应用
#chfn 改变用户的finger信息
普通用户使用这个命令修改信息时,需要输入密码才能使用,而root用户则不需要。
分析:
#more /etc/pam.d/chfn
第一行为auth sufficient pam_rootok.so
因为chfn的pam服务文件的第一行应用了pam_rootok.so模块,所以当root用户使用chfn时不需验证,不需要再往下,直接通过。

pam_userdb.so模块需要一个db数据库储存用户信息,具体如何使用可参考前面的vsftpd虚拟用户。

在使用PAM模块时,注意参考README.pam帮助

你可能感兴趣的:(shell,安全,网络,linux)