安全管理及开发基础技术
文件安全设置
owner、group、othersuid能够让在二进制文件上有执行权限的用户
suid在文件权限上表现为:属主的执行权限位由x变成了schmod
U:所有者 G:组 O:其它 A:所有用户
Umask
文件夹的基本码是rwxrwxrwx(777),文件的基本码是rw-rw-rw-(666).
umask 022
新建文件夹或文件的权限是由所谓基本码减去称之为umask的屏蔽位
新建文件夹是777-022=755(rwxr-xr-x),新建文件是666-022= 644(rw-r–r–)用户管理、组管理
smit security AIX 安全管理菜单
smit users 用户管理菜单
smit mkuser 增加一个用户
smit chuser 改变用户属性
rmuser –p team01 删除用户rm –r /home/team01
不会删除用户主目录,手动删除
sync
强制把内存中数据写回硬盘,防止数据丢失,linux系统关机不能直接把电源UID
区分用户的角色,每个用户的UID的值是唯一的
root的UID是0,拥有系统最高权限虚拟用户bin daemon adm ftp mail:不具备登录系统能力,系统自身拥有,而非后来添加,也可以添加
root用户:
普通真实用户:只能操作自己目录内容用户与用户组对应关系
一对一 多对一 一对多 多对多用户配置文件:
/etc/passwd /etc/shadow
用户组配置文件:
/etc/group /etc/gshadowuseradd user001 添加用户
passwd user001 为用户设置密码
usermod 修改用户登录名 目录 命令
ls –ld /home/user001/
more /etc/passwd | grep user001 more 来读取 /etc/passwd 文件,并且通过grep 来抽取 user001字段
useradd –D –s /bin/tcsh
more /etc/default/useradd 添加用户时的默认SHELL /bin/bash 改为 /bin/tcshpasswd
作为普通用户和超级权限用户都可以运行,但作为普通用户只能更改自己的用户密码,但前提是没有被root用户锁定;如果root用户运行passwd ,可以设置或修改任何用户的密码passwd –l user001 锁定用户密码
su user001 切换到user001
passwd user001 更改密码
passwd –d user001 清除用户密码,清除后无需密码可登录
passwd –S user001 查询用户密码状态userdel
名称 删除userdel –r 名称 删除用户 家目录 本地邮件存储目录、文件
Pwunconv :
是pwcov 的逆向操作,它可以将/etc/shadow产生的shadow密码译码,然后回写到/etc/passwd中,同时也将/etc/shadow文件中 的密码字段删除,来取消shadow password的功能;
Pwcov :同步用户从/etc/passwd 到/etc/shadow/etc/skel
存放用户启动文件的目录
添加用户时,这个目录下的文件自动复制到新添加的用户的家目录下
文件都是隐藏文件
来为用户提供一个统一、标准的、默认的用户环境/etc/login.defs
文件是当创建用户时的一些规划
是否需要家目录
UID和GID的范围;
用户的期限等等QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail 注:创建用户时,要在目录/var/spool/mail中创建一个用户mail文件;
PASS_MAX_DAYS 99999 注:用户的密码不过期最多的天数;
PASS_MIN_DAYS 0 注:密码修改之间最小的天数;
PASS_MIN_LEN 5 注:密码最小长度;
PASS_WARN_AGE 7 注:
UID_MIN 500 注:最小UID为500 ,也就是说添加用户时,UID 是从500开始的;
UID_MAX 60000 注:最大UID为60000;
GID_MIN 500 注:GID 是从500开始;
GID_MAX 60000
CREATE_HOME yes 注:是否创用户家目录,要求创建;/etc/passwd
以user001 这个账号登录时
系统首先会查阅 /etc/passwd 文件,看是否有user001 这个账号,
然后确定user001的UID,通过UID 来确认用户和身份,
如果存在则读取/etc/shadow 影子文件中所对应的user001的密码;
如果密码核实无误则登录系统,读取用户的配置文件;
user001:x:500:500:user001 sun:/home/user001:/bin/bash
第一字段:用户名(也被称为登录名);在上面的例子中,我们看到 这两个用户的用户名分别是 user001 和linuxsir;
第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow 文件中;
第三字段:UID ;
第四字段:GID;
第五字段:用户名全称,这是可选的,可以不设置,在user001这个用户中,用户的全称是user001 sun ;而linuxsir 这个用户是没有设置全称;
第六字段:用户的家目录所在位置;user001 这个用户是/home/user001 ,而linuxsir 这个用户是/home/linuxsir ;
第七字段:用户所用SHELL 的类型,user001和linuxsir 都用的是 bash ;所以设置为/bin/bash ;/etc/shadow
文件是/etc/passwd 的影子文件
这两个文件是应该是对应互补的;
shadow内容包括用户及被加密的密码以及其它/etc/passwd 不能包括的信息,比如用户的有效期限等
只有root权限可以读取和操作
-r——– 1 root root 1.5K 10月 16 09:49 /etc/shadow
例子:
user001: 1 VE.Mq2Xf2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::linuxsir: 1 IPDvUhXP 8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
第一字段:用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起;这个字段是非空的;
第二字段:密码(已被加密),如果是有些用户在这段是x,表示这个用户不能登录到系统;这个字段是非空的;
第三字段:上次修改口令的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;
第四字段:两次修改口令间隔最少的天数;如果设置为0,则禁用此功能;也就是说用户必须经过多少天才能修改其口令;此项功能用处不是太大;默认值是通过/etc/login.defs文件定义中获取,PASS_MIN_DAYS 中有定义;
第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_MAX_DAYS 中定义;
第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;
第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;
第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;
第九字段:保留字段,目前为空,以备将来Linux发展之用;Linux下批量生成用户
(1)先编辑一个文本用户文件,每一列按照/etc/passwd密码文件的格式书写,要注意每个用户的用户名、UID、宿主目录都不可以相同,其中密码栏可以留做空白或输入x号。一个范例文件user.txt内容如下:
user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
user003::602:100:user:/home/user003:/bin/bash
(2)以root身份执行命令/usr/sbin/newusers,从刚创建的用户文件user.txt中导入数据,创建用户:
# /usr/sbin/newusers < user.txt
然后可以执行命令vi /etc/passwd检查/etc/passwd文件是否已经出现这些用户的数据,并且用户的宿主目录是否已经创建。
(3)执行命令/usr/sbin/pwunconv,将/etc/shadow产生的shadow密码解码,然后回写到/etc/passwd中,并将/etc/shadow的shadow密码栏删掉。这是为了方便下一步的密码转换工作,即先取消shadow password功能。
# pwunconv
(4)编辑每个用户的密码对照文件,范例文件passwd.txt内容如下:
user001:密码
user002:密码
user003:密码
(5)以root身份执行命令/usr/sbin/chpasswd,创建用户密码,chpasswd会将经过/usr/bin/passwd命令编码过的密码写入/etc/passwd的密码栏。
# chpasswd < passwd.txt
(6)确定密码经编码写入/etc/passwd的密码栏后,执行命令/usr/sbin/pwconv
将密码编码为shadow password,并将结果写入/etc/shadow。
# pwconv
批量生成用户列表!/bin/bash COUNTER=1 ID=701 while [ ! $COUNTER -gt 150 ] do if [ $COUNTER -lt 10 ] then echo "stu00$COUNTER::$ID:$ID::/home/stu00$COUNTER:/bin/bash" else if [ $COUNTER -lt 100 ] then echo "stu0$COUNTER::$ID:$ID::/home/stu0$COUNTER:/bin/bash" else echo "stu$COUNTER::$ID:$ID::/home/stu$COUNTER:/bin/bash" fi fi COUNTER=$[COUNTER+1] # 或者 let COUNTER=$[COUNTER]+1 ID=$[ID+1] Done
生成密码
!/bin/bash COUNTER=1 ID=701 while [ ! $COUNTER -gt 150 ] do if [ $COUNTER -lt 10 ] then echo "stu00$COUNTER:a0b0c0d0" else if [ $COUNTER -lt 100 ] then echo "stu0$COUNTER:a0b0c0d0" else echo "stu$COUNTER:a0b0c0d0" fi fi COUNTER=$[COUNTER+1] ID=$[ID+1] done
与安全相关的文件
Finger :
查看用户信息工具
finger -s
注解:不加任何参数,也没有指定查询哪个用户,finger 会以默认以短格-s 来输出登录本机的所有用户的用户名
id
查看用户的UID、GID及所归属的用户组
id 用户名
查看对应用户chfn :
更改用户信息工具
Su :用户切换工具
su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下
su 加参数 - ,表示默认切换到root用户,并且改变到root用户的环境;sudo
把某些超级权限有针对性的下放, 把某些超级权限有针对性的下放
当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户.
前提是要通过sudo的配置文件/etc/sudoers来进行授权/etc/sudoers
文件中每行为一个规则,
前面带有#号可以当作是说明的内容,并不执行;
如果规则很长,一行列不下时,可以用\号来续行
规则可分为两类;
一类是别名定义: User_Alias,Host_Alias,Runas_Alias,Cmnd_Alias,分别是用户别名,主机别名,运行用户别名,命令别名
方法 Alias_Type alias_name = name1, name2, name3, 例如:
User_Alias User1 = user001, user002, user003。
另一类是授权规则:
授权用户 主机=命令动作user001 ALL=/bin/chown, /bin/chmod
如果我们在/etc/sudoers 中添加这一行,表示user001 可以在任何可能出现的主机名的系统中,可以切换到root用户下执行 /bin/chown 和/bin/chmod 命令,
通过sudo -l 来查看user001 在这台主机上允许和禁止运行的命令;
值得注意的是,在这里省略了指定切换到哪个用户下执行/bin/shown 和/bin/chmod命令;在省略的情况下默认为是切换到root用户下执行;同时也省略了是不是需要user001用户输入验证密码,如果省略了,默认为是需要验证密码。user001 ALL=(root) NOPASSWD: /bin/chown, /bin/chmod
表示的是user001 可以在任何可能出现的主机名的主机中,
可以切换到root下执行 /bin/chown ,不需要输入user001用户的密码;
并且可以切换到任何用户下执行/bin/chmod 命令,但执行chmod时需要user001输入自己的密码
别名定义并不是必须的,但授权规则是必须的PAM框架
将应用程序与具体的认证机制分离,使得系统改变认证机制时,不再需要修改采用认证机制的应用程序,而只要由管理员配置应用程序的认证服务模块,极大地提高了认证机制的通用性与灵活性。
使用PAM,具体应用程序唯一需要做的事情是咨询PAM,了解用户是否被授权使用该程序,然后由PAM给出结果。
PAM提供了对所有服务进行认证的中央机制,适用于login,远程登录, su等应用程序
配置文件一般存放/etc/pam.d/目录下ldd
which cmd
| grep libpam :查看某个程序是否支持PAM
/usr/bin/ldd /bin/login |grep libpam :
检查login程序是否支持PAM
account required pam_time.so: 在auth的定义之后,加入account的一条验证
vi /etc/security/time.conf
Login;*user001;!Th2100-2300 : pam_time.so这个模块需要定义另外一个配置文件/etc/security/time.conf, 需要在其中定义限制的具体用户和时间, //作用程序是login,对用户user001产生影响,允许登录时间是周四2100-2300之外关于木马程序的一个简单例子
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误touch variable
vi variable脚本内容如下:
#!/bin/sh echo "number:$#" echo "scname:$0" echo "first :$1" echo "second:$2" echo "argume:$@" echo "show parm list:$*" echo "show process id:$$" echo "show precomm stat: $?" 保存退出 赋予脚本执行权限 # chmod +x variable 执行脚本 # ./variable aa bb
number:2
scname:./variable
first:aa
second:bb
argume:aa bb
show parm list:aa bb
show process id:24544
show precomm stat:0