安全-PAM

PAM

模块的路径:

[root@pam /lib64/security]# ls

配置文件的路径:

[root@pam /etc/pam.d]# ls

了解模块的功能:
在配置文件中,找到模块名,百度

解读pam的配置文件:
从上到下,依次使用模块进行验证检查。

结构:4列

  1. 绿色 模块类型
    auth
    account
    password
    session

  2. 粉色 控制标志

  3. 红色 模块

  4. 白色 模块的参数

    扫描二维码关注公众号,回复: 8606005 查看本文章

常用的pam模块:

1. pam_rootok.so

用户的UID是0,直接返回成功。

[root@pam /etc/pam.d]# vim su
#auth       sufficient  pam_rootok.so

root切换到普通用户,也需要输入用户的密码。

2. pam_wheel.so ***

(1)

[root@pam /etc/pam.d]# vim su
 4 auth        sufficient  pam_wheel.so trust use_uid
	打开注释

[root@pam ~]# usermod -G wheel user1
[root@pam ~]# id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),10(wheel)

(测试时,可以再添加一个user2,不放在wheel组里)

[user1@pam ~]$ su - root
[root@pam ~]# 
	user1 su 切换到root,不要密码;而user2因为没在wheel组,所以切换root时需要输入密码

(2)

[root@pam /etc/pam.d]# vim su
  6 auth        required    pam_wheel.so use_uid
	打开注释

[user1@pam ~]$ id
uid=1000(user1) gid=1000(user1) groups=1000(user1),10(wheel)

[user1@pam ~]$ su -
Password: 
[root@pam ~]# 

[user2@pam ~]$ su -
Password: 
su: Permission denied
	只有在wheel组里面的用户,才可以su切换到root;非wheel组的其它用户无法切换root

加入系统的初始化配置!

线上节点
哪些用户可以ssh

先用普通用户 ssh
再 su - 到root
约束哪些用户可以切换到root

内部节点:没有约束。

3. pam_tally2.so

约束密码的尝试次数,防止暴力破解。

[root@pam /etc/pam.d]# vim sshd
  3 auth       required pam_tally2.so deny=2 even_deny_root root_unlock_time=60 unlock_time=60
	最大尝试次数,2
	失败后锁定1分钟

[root@pam ~]# pam_tally2 -u root
Login           Failures Latest failure     From
root                3    12/17/19 10:38:24  172.16.0.20

解除锁定
[root@pam ~]# pam_tally2 --reset -u 用户名

4. pam_limits.so

资源限制,约束应用程序可以使用的系统资源。

默认的
[root@pam ~]# ulimit -Sn
1024
[root@pam ~]# ulimit -Hn
4096

[root@pam ~]# vim /etc/security/limits.conf 
*   soft    nofile  65535
*   hard    nofile  65535
*   soft    nproc   65535
*   hard    nproc   65535

reboot


ftp虚拟用户 (实验)

需求:
公司需要架设一台ftp-server。

  1. 所有的用户访问的位置是 /home/vuser
  2. 使用者划分权限等级
    有的用户可以上传、下载、删除、重命名、创建目录等
    有的用户只可以下载
  3. 如果有需要,可以随时修改用户的访问位置
  4. 考虑公司的带宽压力,限速最大是100k/s
  5. 为了避免用户使用下载工具,约束一个IP最多只能建立3个连接
  6. 最大并发数限制为100个用户同时在线
  7. 尽可能保证数据完整性

匿名用户
系统普通用户
权限是一样的

用户的访问路径:
匿名用户 /var/ftp
普通用户 家目录


ftp的虚拟用户:
并不真正的存在于系统,而在数据库里保存。

所依赖的数据库有两种:
(1)Berkeley DB
(2)MySQL
可以保存虚拟用户信息

衍生:
普通用户
衍生所有的虚拟用户,虚拟用户的权限默认与普通用户是一致的
针对每个虚拟用户构建权限配置文件

使用Berkeley DB方式构建:

[root@pam ~]# lftp 172.16.0.99
lftp 172.16.0.99:~> cd release/     
lftp 172.16.0.99:/release> get  epel-release-7-6.noarch.rpm 

[root@pam ~]# rpm -ivh epel-release-7-6.noarch.rpm

[root@pam ~]# yum install -y vsftpd libdb4 libdb4-utils

[root@pam /etc/vsftpd]# vim vsftpd.conf
anonymous_enable=NO			<---添加
	##拒绝匿名用户
#pam_service_name=vsftpd
pam_service_name=vsftpd.vu		<--- 添加
	##修改ftp的pam配置文件(需要创建文件)
user_config_dir=/etc/vsftpd/vuser_dir		<---添加
	##虚拟用户的权限控管目录(需要创建对应目录)
guest_enable=YES		<---添加
	##允许虚拟用户
guest_username=vuser		<---添加
	##衍生虚拟用户的普通用户名(vuser是虚拟用户的统称,在数据库中创建)
max_clients=100		<---添加
	##最大客户端数量
max_per_ip=3		<---添加
	##每个IP的最大连接数
anon_max_rate=100000		<---添加
	##最大带宽 byte/s

(1)准备pam配置文件
[root@pam /etc/vsftpd]# vim vuser.txt
f1
123
f2
234
	奇数行是用户名,偶数行是密码

转变成数据文件格式:
[root@pam /etc/vsftpd]# db_load -T -t hash -f vuser.txt vuser.db

[root@pam /etc/vsftpd]# vim /etc/pam.d/vsftpd.vu
auth    required    /usr/lib64/security/pam_userdb.so   db=/etc/vsftpd/vuser
account required    /usr/lib64/security/pam_userdb.so   db=/etc/vsftpd/vuser

(2)控管虚拟用户的权限
[root@pam /etc/vsftpd]# mkdir vuser_dir
[root@pam /etc/vsftpd]# cd vuser_dir/
[root@pam /etc/vsftpd/vuser_dir]# vim f1		<--- 以下内容可按需求权限填写
local_root=/home/vuser
	##访问目录
allow_writeable_chroot=YES
	##允许在根目录下执行写操作
anon_world_readable_only=NO
	##允许浏览(下载)
write_enable=YES
	##写开关
anon_upload_enable=YES
	##允许上传
anon_other_write_enable=YES
	##允许删除
anon_mkdir_write_enable=YES
	##允许创建目录

[root@pam /etc/vsftpd/vuser_dir]# cp f1 f2

(3)创建用户
[root@pam ~]# useradd -s /sbin/nologin vuser

启动服务:
[root@pam ~]# systemctl start vsftpd
[root@pam ~]# systemctl enable vsftpd

客户机用ftp测试

客户端测试:

[root@centos7-bj ~]# ftp 172.16.0.101
Connected to 172.16.0.101 (172.16.0.101).
220 (vsFTPd 3.0.2)
Name (172.16.0.101:root): f1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> lcd /etc
Local directory now /etc
	切换目录
ftp> put passwd
local: passwd remote: passwd
227 Entering Passive Mode (172,16,0,101,132,90).
150 Ok to send data.
226 Transfer complete.
1780 bytes sent in 0.000123 secs (14471.54 Kbytes/sec)
	上传

ftp> mkdir d1
257 "/d1" created
	创建目录

[root@pam /home/vuser]# ls
d1  passwd
[root@pam /home/vuser]# touch file1

ftp> get file1
local: file1 remote: file1
227 Entering Passive Mode (172,16,0,101,243,102).
150 Opening BINARY mode data connection for file1 (0 bytes).
226 Transfer complete.
	下载

ftp> rename file1
(to-name) f1
350 Ready for RNTO.
250 Rename successful.
	重命名文件
ftp> rename d1
(to-name) dir1
350 Ready for RNTO.
250 Rename successful.
	重命名目录

ftp> delete f1
250 Delete operation successful.
	删除文件
ftp> rmdir dir1
250 Remove directory operation successful.
	删除目录

-------------------------
增加用户:
[root@pam /etc/vsftpd]# tail -4 vuser.txt
f3
345
f4
456

[root@pam /etc/vsftpd]# db_load -T -t hash -f vuser.txt vuser.db

[root@pam /etc/vsftpd/vuser_dir]# cp f1 f3
[root@pam /etc/vsftpd/vuser_dir]# cp f1 f4

[root@pam ~]# systemctl restart vsftpd

用mysql做数据库:

配置mysql:
[root@pam ~]# yum install -y mariadb mariadb-server mariadb-devel

[root@pam ~]# systemctl start mariadb
[root@pam ~]# systemctl enable mariadb

MariaDB [(none)]> create database vftp;
MariaDB [(none)]> grant all on vftp.* to vftpuser@'localhost' identified by '12345';
MariaDB [(none)]> flush privileges;

MariaDB [(none)]> use vftp
MariaDB [vftp]> create table userinfo (name varchar(30),passwd varchar(30));
MariaDB [vftp]> insert into userinfo values("tom","123");
MariaDB [vftp]> insert into userinfo values("jerry","234");

安装vftpd连接mysql所需要的pam模块:
[root@pam ~]# yum install -y gcc gcc-c++ pam-devel

[root@pam ~]# lftp 172.16.0.99
lftp 172.16.0.99:~> cd tar          
cd ok, cwd=/tar                     
lftp 172.16.0.99:/tar> get pam_mysql-0.7RC1.tar.gz 

[root@pam ~]# tar zxf pam_mysql-0.7RC1.tar.gz -C /usr/local/src
[root@pam ~]# cd /usr/local/src/pam_mysql-0.7RC1/

[root@pam /usr/local/src/pam_mysql-0.7RC1]# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security/
	检查安装环境,指定安装参数
[root@pam /usr/local/src/pam_mysql-0.7RC1]# make
[root@pam /usr/local/src/pam_mysql-0.7RC1]# make install

[root@pam /usr/lib64/security]# ls pam_mysql.so 
pam_mysql.so

修改pam的配置文件:
[root@pam ~]# vim /etc/pam.d/vsftpd.vu 
#auth   required    /usr/lib64/security/pam_userdb.so   db=/etc/vsftpd/vuser
#account    required    /usr/lib64/security/pam_userdb.so   db=/etc/vsftpd/vuser
auth    required    /usr/lib64/security/pam_mysql.so    user=vftpuser passwd=12345 host=localhost d
b=vftp table=userinfo usercolumn=name passwdcolumn=passwd crypt=0
account required    /usr/lib64/security/pam_mysql.so    user=vftpuser passwd=12345 host=localhost db=vftp table=userinfo usercolumn=name passwdcolumn=passwd crypt=0

[root@pam /etc/vsftpd/vuser_dir]# cat tom 
local_root=/home/vuser
allow_writeable_chroot=YES
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
[root@pam /etc/vsftpd/vuser_dir]# cat jerry 
local_root=/home/vuser
allow_writeable_chroot=YES
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES

[root@pam ~]# systemctl restart vsftpd

客户端测试:
[root@centos7-bj ~]# ftp 172.16.0.101
Connected to 172.16.0.101 (172.16.0.101).
220 (vsFTPd 3.0.2)
Name (172.16.0.101:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

增加用户:

MariaDB [vftp]> insert into userinfo values("john","123");

[root@pam /etc/vsftpd/vuser_dir]# cp tom john

[root@centos7-bj ~]# ftp 172.16.0.101
Connected to 172.16.0.101 (172.16.0.101).
220 (vsFTPd 3.0.2)
Name (172.16.0.101:root): john
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

总结:
两种数据库的对比
优点:mysql数据库增删用户比较方便,只需要数据表插入用户名和密码,然后创建对应用户的管控文件即可
缺点:mysql需要单独安装一个服务,Berkeley DB就不需要了。

故障参考:

mariadb方式ftp访问提示访问失败
检查pam.d/vsftpd.vu文件内对应数据库的参数是否正确,字母是否有缺失.如passwd,password

发布了57 篇原创文章 · 获赞 3 · 访问量 1002

猜你喜欢

转载自blog.csdn.net/weixin_42502744/article/details/103578583
pam