欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

安全-PAM

程序员文章站 2022-03-12 07:57:03
...

PAM

模块的路径:

[[email protected] /lib64/security]# ls

配置文件的路径:

[[email protected] /etc/pam.d]# ls

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

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

结构:4列

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

  2. 粉色 控制标志

  3. 红色 模块

  4. 白色 模块的参数


常用的pam模块:

1. pam_rootok.so

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

[[email protected] /etc/pam.d]# vim su
#auth       sufficient  pam_rootok.so

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

2. pam_wheel.so ***

(1)

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

[[email protected] ~]# usermod -G wheel user1
[[email protected] ~]# id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),10(wheel)

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

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

(2)

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

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

[[email protected] ~]$ su -
Password: 
[[email protected] ~]# 

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

加入系统的初始化配置!

线上节点
哪些用户可以ssh

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

内部节点:没有约束。

3. pam_tally2.so

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

[[email protected] /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分钟

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

解除锁定
[[email protected] ~]# pam_tally2 --reset -u 用户名

4. pam_limits.so

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

默认的
[[email protected] ~]# ulimit -Sn
1024
[[email protected] ~]# ulimit -Hn
4096

[[email protected] ~]# 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方式构建:

[[email protected] ~]# 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 

[[email protected] ~]# rpm -ivh epel-release-7-6.noarch.rpm

[[email protected] ~]# yum install -y vsftpd libdb4 libdb4-utils

[[email protected] /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配置文件
[[email protected] /etc/vsftpd]# vim vuser.txt
f1
123
f2
234
	奇数行是用户名,偶数行是密码

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

[[email protected] /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)控管虚拟用户的权限
[[email protected] /etc/vsftpd]# mkdir vuser_dir
[[email protected] /etc/vsftpd]# cd vuser_dir/
[[email protected] /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
	##允许创建目录

[[email protected] /etc/vsftpd/vuser_dir]# cp f1 f2

(3)创建用户
[[email protected] ~]# useradd -s /sbin/nologin vuser

启动服务:
[[email protected] ~]# systemctl start vsftpd
[[email protected] ~]# systemctl enable vsftpd

客户机用ftp测试

客户端测试:

[[email protected] ~]# 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
	创建目录

[[email protected] /home/vuser]# ls
d1  passwd
[[email protected] /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.
	删除目录

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

[[email protected] /etc/vsftpd]# db_load -T -t hash -f vuser.txt vuser.db

[[email protected] /etc/vsftpd/vuser_dir]# cp f1 f3
[[email protected] /etc/vsftpd/vuser_dir]# cp f1 f4

[[email protected] ~]# systemctl restart vsftpd

用mysql做数据库:

配置mysql:
[[email protected] ~]# yum install -y mariadb mariadb-server mariadb-devel

[[email protected] ~]# systemctl start mariadb
[[email protected] ~]# systemctl enable mariadb

MariaDB [(none)]> create database vftp;
MariaDB [(none)]> grant all on vftp.* to [email protected]'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模块:
[[email protected] ~]# yum install -y gcc gcc-c++ pam-devel

[[email protected] ~]# 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 

[[email protected] ~]# tar zxf pam_mysql-0.7RC1.tar.gz -C /usr/local/src
[[email protected] ~]# cd /usr/local/src/pam_mysql-0.7RC1/

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

[[email protected] /usr/lib64/security]# ls pam_mysql.so 
pam_mysql.so

修改pam的配置文件:
[[email protected] ~]# 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

[[email protected] /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
[[email protected] /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

[[email protected] ~]# systemctl restart vsftpd

客户端测试:
[[email protected] ~]# 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");

[[email protected] /etc/vsftpd/vuser_dir]# cp tom john

[[email protected] ~]# 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

上一篇: PAM

下一篇: PAM