/etc/passwd -- 记录了系统中各用户的一些基本属性,root可写,所有用户可读
/etc/shadow -- 记录了所有用户的密码
/etc/group -- 记录了用户组属性
/etc/login.defs -- 密码策略文件
/etc/pam.d/system-auth -- 密码强度
| 配置 | 值 | 含义 |
|---|---|---|
| PASS_MAX_DAYS | 90 | 密码最长有效期 |
| PASS_MIN_DAYS | 10 | 密码修改之间最小的天数 |
| PASS_MIN_LEN | 8 | 密码长度 |
| PASS_WARN_AGE | 7 | 口令失效前多少天开始通知用户修改密码 |
#! /bin/bash
# Author: Sajor
# Date: 2018-10-12
# Function: 实现对用户密码策略的设定,如密码最长有效期等
read -p "设置密码最多可多少天不修改:" A
read -p "设置密码修改之间最小的天数:" B
read -p "设置密码最短的长度:" C
read -p "设置密码失效前多少天通知用户:" D
sed -i '/^PASS_MAX_DAYS/c\PASS_MAX_DAYS '$A'' /etc/login.defs
sed -i '/^PASS_MIN_DAYS/c\PASS_MIN_DAYS '$B'' /etc/login.defs
sed -i '/^PASS_MIN_LEN/c\PASS_MIN_LEN '$C'' /etc/login.defs
sed -i '/^PASS_WARN_AGE/c\PASS_WARN_AGE '$D'' /etc/login.defs
echo "已设置好密码策略......"
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1
#! /bin/bash
# Author: Sajor
# Date: 2018-10-12
# Function: 对用户密码强度的设定,新密码不能和旧密码相同,同时新密码至少8位,还要同时包含大字母、小写字母和数字
sed -i '/pam_pwquality.so/c\password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1' /etc/pam.d/system-auth
#%PAM-1.0 的下面,加入下面的内容,表示当密码输入错误达到3次,就锁定用户150秒,如果root用户输入密码错误达到3次,锁定300秒。锁定的意思是即使密码正确了也登录不了
auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300
pam_tally2 查看被锁定的用户
pam_tally2 --reset -u username 将被锁定的用户解锁
#! /bin/bash
# Author: Sajor
# Date: 2018-10-12
# Function: 对用户登录输入错误密码次数做限制
n=`cat /etc/pam.d/sshd | grep "auth required pam_tally2.so "|wc -l`
if [ $n -eq 0 ];then
sed -i '/%PAM-1.0/a\auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300' /etc/pam.d/sshd
fi
TMOUT=600
/etc/profileread -p "设置账户自动注销时间:" F
sed -i '/^HISTSIZE/a\TMOUT='$F'' /etc/profile

sed -i '/pam_wheel.so use_uid/c\auth required pam_wheel.so use_uid ' /etc/pam.d/su
n=`cat /etc/login.defs | grep SU_WHEEL_ONLY | wc -l`
if [ $n -eq 0 ];then
echo SU_WHEEL_ONLY yes >> /etc/login.defs
fi
id root命令可以显示root用户的 uid gid group 信息> id root
uid=0(root) gid=0(root) 组=0(root)
usermod -o -u 0 -g 0 admin
userdel -r 用户名 删除不必要的账号passwd -l 用户名 锁定不必要的账号awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd 查看具有登录权限的用户bash登陆的,比如zsh,可以这么写 awk -F: '($7=="/usr/bin/zsh" || $7=="/bin/bash"){print $1}' /etc/passwdawk -F ':' '($3==0){print $1}' /etc/passwd 查看UID为0的账号,UID为0的用户会自动切换到root用户,所以危害很大awk -F: '($2=="")' /etc/shadow 查看空口令账号,如果存在空口令用户的话必须设置密码# 创建用户帐户
> adduser mageshm
# 使用以下命令创建没有密码的用户“mageshm”:
> passwd -f -u mageshm
Unlocking password for user mageshm.
passwd: Success
#! /bin/bash
# Author: Sajor
# Date: 2018-10-11
# Function: 对系统中的用户做检查,加固系统
echo "系统中有登录权限的用户有:"
awk -F: '($7=="/usr/bin/zsh" || $7=="/bin/bash"){print $1}' /etc/passwd
echo "********************************************"
echo "系统中UID=0的用户有:"
awk -F: '($3=="0"){print $1}' /etc/passwd
echo "********************************************"
N=`awk -F: '(``2==""){print ``1}' /etc/shadow|wc -l`
echo "系统中空密码用户有:$N"
if [ $N -eq 0 ];then
echo "恭喜你,系统中无空密码用户!!"
echo "********************************************"
else
i=1
while [ $N -gt 0 ]
do
None=`awk -F: '(``2==""){print ``1}' /etc/shadow|awk 'NR=='$i'{print}'`
echo "------------------------"
echo $None
echo "必须为空用户设置密码!!"
passwd $None
let N--
done
M=`awk -F: '(``2==""){print ``1}' /etc/shadow|wc -l`
if [ $M -eq 0 ];then
echo "恭喜,系统中已经没有空密码用户了!"
else
echo "系统中还存在空密码用户:$M"
fi
fi
# 改变文件或目录的扩展属性
chattr [+-=] [属性] 文件或目录名
chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...
# 查看文件目录的扩展属性
lsattr 文件或目录名
#! /bin/bash
# Author: Sajor
# Date:2018-10-10
# Function: 锁定创建用户和组的文件,使之无法对用户和组进行操作!
read -p "警告:此脚本运行后将无法添加删除用户和组!!确定输入Y,取消输入N;Y/N:" i
case $i in
[Y,y])
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
echo "锁定成功!"
;;
[N,n])
chattr -i /etc/passwd
chattr -i /etc/shadow
chattr -i /etc/group
chattr -i /etc/gshadow
echo "取消锁定成功!!"
;;
*)
echo "请输入Y/y or N/n"
esac
ps aux|sort -rn -k +3|headps aux|sort -rn -k +4|headPermitRootLogin no
/etc/xinetd.d/telnet
disable=yes
# 开启
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
# 关闭
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
vim /etc/vsftpd/vsftpd.conf
# 如果存在anonymous_enable则修改,如果不存在则手动增加
anonymous_enable=NO
> vim /etc/sysctl.conf
> net.ipv4.tcp_syncookies = 1
# 让命令生效
> sysctl -p
HISTSIZE=100
/etc/profileread -p "设置历史命令保存条数:" E
sed -i '/^HISTSIZE/c\HISTSIZE='$E'' /etc/profile
# vim /etc/rsyslog.conf 在文件中加入如下内容
*.err;kern.debug;daemon.notice /var/log/messages
systemctl restart rsyslog
firewall-cmd --add-port=514/tcp

我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
//1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
有没有一种简单的方法可以判断ruby脚本是否已经在运行,然后适本地处理它?例如:我有一个名为really_long_script.rb的脚本。我让它每5分钟运行一次。当它运行时,我想看看之前运行的是否还在运行,然后停止第二个脚本的执行。有什么想法吗? 最佳答案 ps是一种非常糟糕的方法,并且可能会出现竞争条件。传统的Unix/Linux方法是将PID写入文件(通常在/var/run中)并在启动时检查该文件是否存在。例如pid文件位于/var/run/myscript.pid然后你会在运行程序之前检查它是否存在。有一些技巧可以避免
我正在开发一个Ruby脚本,需要在没有Ruby解释器的情况下部署到系统上。它将需要在使用ELF格式的FreeBSD系统上运行。我知道有一个ruby2exe项目可以编译在Windows上运行的ruby脚本,但是在其他操作系统上这样做容易吗?甚至可能吗? 最佳答案 您是否检查过Rubinius或JRuby是否允许您预编译您的代码? 关于ruby-ruby脚本可以预编译成二进制文件吗?,我们在StackOverflow上找到一个类似的问题: https://
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同
我目前可以将stdout重定向到ruby/rails中的字符串变量,只需在bash中运行命令并将结果设置为我的字符串变量,如下所示。val=%x[#{cmd}]其中cmd是表示bash命令的字符串。但是,这仅捕获stdout,因为我想捕获stderr并将其设置为ruby中的字符串——有什么想法吗? 最佳答案 简单地重定向它:val=%x[#{cmd}2>&1]如果您只想从stderr捕获输出,请在将其复制到fd2后关闭stdout的文件描述符。val=%x[#{cmd}2>&1>/dev/null]