文件安全设置 owner、group、other
suid能够让在二进制文件上有执行权限的用户 suid在文件权限上表现为:属主的执行权限位由x变成了s
chmod
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/gshadow
useradd 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/tcsh
passwd 作为普通用户和超级权限用户都可以运行,但作为普通用户只能更改自己的用户密码,但前提是没有被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 bbnumber:2 scname:./variable first:aa second:bb argume:aa bb show parm list:aa bb show process id:24544 show precomm stat:0