ULA

安全

调优

虚拟化

存储

集群

sudo 与 su

相同点:

使用普通帐号登录系统,避免直接误操作,降低root密码被泄漏风险

区别:

sudo 在使用普通帐号执行管理操作的时候,euid的身份可以是任何身份(根据配置文件设定),切换到目标euid身份时候,输入的不是目标身份的密码,而是自身的密码。

tom ---sudo root--->输入的是tom自己的密码。

sudo会记录下所有通过sudo执行的任何操作。/var/log/secure

使用sudo

# visudo 编辑配置文件 <---建议: 工具能够自动识别语法是否正确是否有效。

或者 自己 # vim /etc/sudoers <---不建议

真实身份 在哪里=(euid)允许的操作

webadmin ALL=(root)ALL

tom ALL=(root)ALL,!/sbin/fdisk

maryALL=/sbin/ifconfig,/sbin/fdisk,/sbin/route

[mary@www ~]$ sudo fdisk /dev/sda

[sudo] password for mary:

[tom@www ~]$ route add default gw 10.1.1.1

SIOCADDRT: 不允许的操作

[tom@www ~]$ sudo route add default gw 10.1.1.1

[sudo] password for tom:

拒绝root远程登录ssh,只允许普通帐号登录ssh,然后登录后可以sudo执行一些管理操作。

sudo

降低误操作的机会。

在执行一些管理操作的时候,输入自己的密码

所有操作都会记录下来 /var/log/secure

ssh --> :

man ssh

man sshd --> 得到 man sshd_config

# vim /etc/ssh/sshd_config

PermitRootLogin no

# service sshd restart

# useradd tomadmin

# passwd tomadmin 设定一个复杂的密码

# visudo

tomadmin ALL=(root)ALL,!/bin/rm <---可以执行任何命令,但除了/bin/rm 命令

测试

ssh 10.1.1.21 -l tomadmin

sudo /sbin/fdisk 提示输入tomadmin的密码后,才能完成操作。

==============================================================

pam

可热插拔的验证模块

在rhel系统中,pam 的组成

配置文件/etc/pam.d/服务进程名字

模块/lib/security/<---32位系统存放模块的默认路径

/lib64/security/

四个阶段: 每个阶段完成用户验证和登录的不同功能

认证阶段auth: 对用户在登录的时候的用户名和密码的正确性进行判断

帐号阶段account : 判断用户是否已经被禁用,是否有效。

密码阶段 : 实现对密码的管控,例如修改密码,密码的复杂度控制

会话阶段 : 用户登录成功之后,会话就开始了,直到退出登录,整个过程都有该阶段的模块进行管控。

模块调用使用控制标记:

required必要条件。本条件必须通过,否则最后肯定是失败,如果该条件失败,并不会马上返回失败的结果,不会终止判断,而是把同一个阶段后续的剩下的各个模块还会继续判断,最后不管后续的模块结果如何,最终的结果还是失败。如果成功,那还会继续判断同一个阶段后续模块。

requisite必要条件。本条件必须通过,否则最后肯定是失败,如果该条件失败,会马上返回失败的结果,马上终止判断。如果成功,那还会继续判断同一个阶段后续模块。

sufficient充要条件。如果出现在它之前的必要条件都成立,而它也成立,那么马上终止判断,返回成功的结果。如果它本身验证失败,它马上会变成可选条件,不影响整个判断结果。

optional可选条件。 一般仅作记录日志

实际操作:现在对linux系统的登录程序login进行针对用户和时间的登录限制。

使用模块pam_time.so

一,检查某个程序是否支持pam

1、检查login程序是否支持PAM

  1. root@hdp0:~# ldd `which login` | grep libpam

  2. libpam.so.0 => /lib/libpam.so.0 (0xb76e2000)

  3. libpam_misc.so.0 => /lib/libpam_misc.so.0 (0xb76de000)

2、在/etc/pam.d/下修改login配置文件

在login配置文件中,在auth的定义之后,加入account的一条验证

account requisite pam_time.so

3、pam_time.so这个模块需要定义另外一个配置文件time.conf

在/etc/security/time.conf中定义限制的具体用户和时间

  1. vim /etc/security/time.conf

  2. login;tty3;fenix;Th2100-2300 //作用程序是login,作用在tty3上,fenix允许在周四2100-2300间登录

  3. login;!tty3;!fenix;!Th2100-2300 //作用程序是login,作用在tty3以外,对用户fenix之外产生影响,允许登录时间是周四2100-2300之外

4、对PAM的应用是立刻生效,可以切换到其他tty上进行测试。

例子1: 禁止所有普通用户本地登录系统

1、该功能是哪个程序完成,就能确定pam配置文件

/bin/login ---> /etc/pam.d/login

2、确定要完成这个验证功能需要使用哪个模块?<---学习pam的最终要的一点

可以通过查看本地所有的pam模块,通过它的名字来猜。

# find /usr/share/man -iname "pam_*"

/usr/share/man/man5/pam_env.conf.5.gz

/usr/share/man/man5/pam_krb5.5.gz

/usr/share/man/man3/pam_acct_mgmt.3.gz

...

# find /usr/share/man -iname "pam_*" | grep login

/usr/share/man/man8/pam_loginuid.8.gz

/usr/share/man/man8/pam_nologin.8.gz

# man pam_nologin

或者直接上网查询

或靠经验

3、根据模块的使用手册,编辑程序对应pam配置文件

注意:

模块应该在哪个阶段使用

模块应该用什么控制标记

顺序(需要根据模块的作用、控制标记来慎重选择)

shell> /etc/pam.d/login

#%PAM-1.0

auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so

auth include system-auth

account required pam_nologin.so <---注意顺序

account required pam_time.so

account include system-auth

。。。。

# touch /etc/nologin

实验完毕,记得把该文件删除,否则以后普通用户无法登录

例子2:root只能从安全终端登录

1、该功能是哪个程序完成,就能确定pam配置文件

/bin/login ---> /etc/pam.d/login

2、确定要完成这个验证功能需要使用哪个模块?<---学习pam的最终要的一点

# find /usr/share/man/ -iname "pam_*" | grep tty

/usr/share/man/man8/pam_tty_audit.8.gz

/usr/share/man/man8/pam_securetty.8.gz

shell> vim /etc/pam.d/login

#%PAM-1.0

auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so

默认就有

....

# cp /etc/securetty securetty.bak

# cat /etc/securetty

tty3 <---只保留tty3,那么root只能在tty3登录

例子3:限制登录时间

限制tom只能在上班时间0800-1800 ,ssh登录系统.

sshd --> /etc/pam.d/sshd ---> /etc/pam.d/system-auth 或者 password-auth

shell> vim /etc/pam.d/sshd

#%PAM-1.0

auth required pam_sepermit.so

auth required pam_tally2.so deny=3 unlock_time=180 even_deny_root

auth include password-auth

account required pam_time.so 《---必须在include system-auth

account include password-auth <---rhel5:是system-auth

# vim /etc/security/time.conf

sshd;*;tom;Wk0800-1800 & !Wd0000-2400

例子4:资源限制:squid、apache

命令临时在某个终端进行有限的控制,这个控制是直接在某个终端马上临时生效:

# ulimit -a

# ulimit -HSn 65536

如果想永久生效,就修改pam的对应的配置文件

# find /usr/share/man/ -iname "pam_*" | grep limit

/usr/share/man/man8/pam_limits.8.gz

# vim /etc/pam.d/system-auth

。。。

session required pam_limits.so <---默认就有

。。。

# vim /etc/security/limits.conf

squid hard nofile 204800 <---针对某个具体的用户限制

squid soft nofile 204800

apache soft nproc 65535

apache hard nproc 65535

apache soft nofile 65535

apache hard nofile 65535

root soft nproc 65535

root hard nproc 65535

* hard nproc 65535 <---匹配任何普通用户

* soft nproc 65535

* hard nofile 65535

* soft nofile 65535

如果是图形界面的化,需要ctrl + alt + <--- 重启图形界面才生效

如果是文本终端,就需要重新登录就生效

重启肯定可以生效

例子5:使用pam_tally 或者 pam_tally2 模块限制 sshd的登录。实现连续3次登录失败,锁定帐号5分钟

shell> vim /etc/pam.d/sshd

#%PAM-1.0

auth required pam_sepermit.so

auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=300

auth include password-auth

。。。

命令:

# pam_tally2 -u root

Login Failures Latest failure From

root 18 08/10/13 15:50:32 10.1.1.211

# pam_tally2 -u root -r 把登录失败的次数重置为0

rhel5是这个命令

# failure

例子5:

配置vsftpd服务,使用虚拟帐号登录,所有的虚拟帐号和密码都存放在mysql数据库

使用的pam模块在笔记目录Sec_01中找到pam_mysql-0.7RC1.tar.gz

想办法,看文档,找资料学会pam_mysql.so的使用

vsftpd的虚拟帐号配置,可以上网找资料,或者man vsftpd.conf来实现

virtual

guest

一、安装mysql-server , mysql开发包(头文件和库文件)

rhel5:

# yum install mysql-server mysql-devel mysql -y

rhel6:

# yum install mysql-server mysql-devel mysql-libs mysql -y

二、安装pam_mysql

# yum install pam-devel openssl-devel cyrus-sasl-devel -y

--with-pam-mods-dir=/lib64/security/ <---如果是32位系统,就可以忽略这个参数

# ./configure --with-pam-mods-dir=/lib64/security/

# make && make install

...

Libraries have been installed in:

/lib64/security/

...

三、通过查看源码包里的README文档,需要在数据库建立相应表结构和数据

# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# old-passwords <---一定要把旧格式的密码取消

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

# service mysqld start

登录数据库之后,建立数据库建立表和相应数据

mysql> create database vsftpd default charset utf8;

mysql> use vsftpd

mysql> create table user (

-> id int unsigned not null primary key auto_increment,

-> name varchar(32) not null,

-> password varchar(64) not null

-> status boolean default true );

mysql> insert into user values (null,'vuser1',password('123'),true);

mysql> insert into user values (null,'vuser2',password('321'),true);

mysql> insert into user values (null,'vuser3',password('321'),false);

mysql> grant all on vsftpd.* to ftp@'localhost'

-> identified by '123';

mysql> grant all on vsftpd.* to ftp@'127.0.0.1'

-> identified by '123';

测试ftp帐号是否可以连接数据库

四、建立pam配置文件

shell> vim /etc/pam.d/myftpd

#%PAM-1.0

auth required pam_mysql.so user=ftp passwd=123 host=/var/lib/mysql/mysql.sock db=vsftpd table=user usercolumn=name passwdcolumn=pass

word crypt=2 where=status=true

account required pam_mysql.so user=ftp passwd=123 host=/var/lib/mysql/mysql.sock db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=2 where=status=true

启动该服务仅仅是为了使用后面的某个命令去测试上面写myftpd的pam配置文件是否有效

# /etc/rc.d/init.d/saslauthd restart

# testsaslauthd -s myftpd -u vuser1 -p 123

0: OK "Success."

测试我们编写/etc/pam.d/myftpd是否有效,使用文件中的模块和信息连接数据库,验证vuser1帐号是否有效

# testsaslauthd -s myftpd -u vuser3 -p 321

0: NO "authentication failed" <---由于vuser3是被禁用的

五、开始配置vsftpd服务,让其支持虚拟帐号,并且使用我们自定义的myftpd配置文件进行帐号验证

# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES <----默认虚拟帐号使用的是匿名帐号的权限,所以要启用支持匿名登录

....

pam_service_name=myftpd 把原来的vsftpd修改成我们自定义pam配置文件

guest_enable=YES

guest_username=apache

user_sub_token=$USER

根据参数要求,修改apache用户的家目录

# usermod -d '/var/www/$USER' apache

或者修改/etc/passwd文件

apache:x:48:48:Apache:/var/www/$USER:/sbin/nologin

要为每个虚拟帐号建立他们的独立的ftp根目录

# mkdir -p /var/www/vuser{1,2,3}

# chown apache:apache -R /var/www/vuser*

# service vsftpd restart

可以验证登录了,使用虚拟帐号。但是发现权限很低,是匿名帐号的权限

如果想实现所有的虚拟帐号的权限都比价高,可以随意在他们的目录下上传、下载文件,可以仅仅修改以下参数:

virtual_use_local_privs=YES 虚拟帐号就具有普通用户登录之后的权限,而不是匿名用户的权限

chroot_local_user=YES 锁定他们的目录

另外一种实现的修改权限的方法:适合大多数的虚拟帐号权限都很低,个别需要有特殊的权限,采用子配置文件的方法。

user_config_dir=/etc/vsftpd/user_conf/

假设想让vuser1具有独立一套权限:

# vim /etc/vsftpd/user_conf/vuser1

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

anon_upload_enable=YES

anon_world_readable_only=NO

本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1275961,如需转载请自行联系原作者

lLinux系统安全sudo+pam相关推荐

  1. 华为openEuler 21.09创新版本系统,“sudo dnf update“更新报错,EPOL...

    华为open Euler 21.09创新版本系统,"sudo dnf update"更新报错,EPOL- 华为open Euler 21.09 :下载地址 需要安装可自行下载,这里 ...

  2. linux系统的sudo apt-get命令大全

    为什么80%的码农都做不了架构师?>>>    APT的使用(Ubuntu Linux软件包管理工具一) apt-cache search # ------(package 搜索包) ...

  3. Linux系统安全之pam后门安装使用详解

    一.查看系统pam版本: [root@redkey ~]# rpm -qa | grep pam pam-1.1.1-4.el6.x86_64 二.下载对应版本的pam模块 http://www.li ...

  4. mac重装系统后sudo命令不好使

    说明:执行前缀带sudo命令时,会报如下错误: sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set 解决方案: ...

  5. Segmentation fault (core dumped) -llinux系统内存错误报错信息

    目录 1 问题原因 (1)内存访问越界 (2)多线程程序使用了线程不安全的函数. (3)多线程读写的数据未加锁保护. (5)堆栈溢出. 2 使用GDB查看core文件 3 使用GDB调试程序 返回目录 ...

  6. Llinux系统下安装GNOME桌面

    yum check-update yum -y install Ivm2 device-mapper yum -y groupinstall GNOME 输入以上命令行下载GNOME桌面,下载完成后输 ...

  7. Llinux系统(Centos/Ubuntu/Debian)弹性云系统盘扩容方法

    windows系统请参考:Windows(2003/2008/2012)弹性云系统盘扩容方法 -西部数码帮助中心  windows数据扩盘容量请参考:VPS/云主机磁盘(系统盘数据盘)升级扩容 -西部 ...

  8. ARM+llinux系统移植3G拨号上网收发短信(一)【转】

    本文转载自:http://blog.csdn.net/hanmengaidudu/article/details/17099737 一.      PPP移植 各项工作具体说明 向Linux内核添加3 ...

  9. ARM+llinux系统移植3G拨号上网收发短信(一)

    一.      PPP移植 各项工作具体说明 向linux内核添加3G模块的驱动(USB转串口驱动)和PPP协议的支持,然后编译内核并下载到开发板.当然如果之前已经移植好内核,那么只需要增加几个选项就 ...

最新文章

  1. day3----str常用操作方法
  2. pytorch基础函数学习
  3. 读取配置文件失败_还在为Find_Package失败而烦恼吗?
  4. CodeSmith--SchemaExplorer类结构详细介绍
  5. html5.0用什么编程语言,HTML5.0,求好心人详解,谢谢
  6. DN值、地表反射率、 表观反射率、发射率、辐射亮度、亮温名词解释
  7. java 位与 取模_【Java基础】14、位与()操作与快速取模
  8. 学习前端的阶段性总结
  9. 现代科学家运用电极计算机,纳米技术在现代生活中的应用
  10. “黎明”号新任务继续“锁定”谷神星
  11. 最后1天,购票渠道即将关闭!Unite 2018开发者大会全日程公布
  12. # DZY Love Math 系列
  13. 2020年下半年教师资格幼儿园《综合素质》真题与参考答案
  14. Xcode 错误整理
  15. 红帽linux改root密码,Redhat 7.6 主机强制修改root密码及配置网关
  16. BUUCTF Misc杂项前十二道题的思路和感悟
  17. 推荐一款不错的 Go 持续分析工具
  18. ESP8266-Arduino编程实例-PCF8563实时时钟(RTC)驱动
  19. 移动互联网引发大融合与大变革
  20. Splashtop 与 Acronis 集成,提供可扩展的远程支持

热门文章

  1. 物联网核心安全系列——车载物联网的加密防盗版
  2. VB6监视/操作剪贴板示例(VB6.0代码)
  3. SpringBoot实战(十四):Spring Boot Admin 集成安全模块
  4. 等级考试(四):二级C++---回首往昔考试历程
  5. 你也能用英伟达GAN造脸了:官方实现有了,高清数据集也开源了
  6. 强化学习工具Horizon开源:Facebook曾用它优化在线视频和聊天软件
  7. 马上开始的机器学习顶会ICML该关注什么?论文集、精彩Workshop都在这里
  8. 谷歌有只AI,自动给黑白视频上色,走到哪它都认识你
  9. 频率学派还是贝叶斯学派?聊一聊机器学习中的MLE和MAP
  10. 加州无人车路测新添Lyft,中国公司Roadstar和长安也要去跑一跑