安全-PAM
程序员文章站
2022-03-12 07:57:03
...
PAM
PAM
模块的路径:
[[email protected] /lib64/security]# ls
配置文件的路径:
[[email protected] /etc/pam.d]# ls
了解模块的功能:
在配置文件中,找到模块名,百度
解读pam的配置文件:
从上到下,依次使用模块进行验证检查。
结构:4列
-
绿色 模块类型
auth
account
password
session -
粉色 控制标志
-
红色 模块
-
白色 模块的参数
常用的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。
- 所有的用户访问的位置是 /home/vuser
- 使用者划分权限等级
有的用户可以上传、下载、删除、重命名、创建目录等
有的用户只可以下载 - 如果有需要,可以随时修改用户的访问位置
- 考虑公司的带宽压力,限速最大是100k/s
- 为了避免用户使用下载工具,约束一个IP最多只能建立3个连接
- 最大并发数限制为100个用户同时在线
- 尽可能保证数据完整性
匿名用户
系统普通用户
权限是一样的
用户的访问路径:
匿名用户 /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