linux指南之五

安全管理及开发基础技术

  1. 文件安全设置
    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–)

  2. 用户管理、组管理

    smit security AIX 安全管理菜单
    smit users 用户管理菜单
    smit mkuser 增加一个用户
    smit chuser 改变用户属性
    rmuser –p team01 删除用户

    rm –r /home/team01

    不会删除用户主目录,手动删除

    sync
    强制把内存中数据写回硬盘,防止数据丢失,linux系统关机不能直接把电源

  3. 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

  4. passwd
    作为普通用户和超级权限用户都可以运行,但作为普通用户只能更改自己的用户密码,但前提是没有被root用户锁定;如果root用户运行passwd ,可以设置或修改任何用户的密码

    passwd –l user001 锁定用户密码
    su user001 切换到user001
    passwd user001 更改密码
    passwd –d user001 清除用户密码,清除后无需密码可登录
    passwd –S user001 查询用户密码状态

  5. userdel
    名称 删除

    userdel –r 名称 删除用户 家目录 本地邮件存储目录、文件

  6. Pwunconv :
    是pwcov 的逆向操作,它可以将/etc/shadow产生的shadow密码译码,然后回写到/etc/passwd中,同时也将/etc/shadow文件中 的密码字段删除,来取消shadow password的功能;
    Pwcov :同步用户从/etc/passwd 到/etc/shadow

  7. /etc/skel
    存放用户启动文件的目录
    添加用户时,这个目录下的文件自动复制到新添加的用户的家目录下
    文件都是隐藏文件
    来为用户提供一个统一、标准的、默认的用户环境

  8. /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 注:是否创用户家目录,要求创建;

  9. /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 ;

  10. /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发展之用;

  11. 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
  12. 与安全相关的文件

    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输入自己的密码
    别名定义并不是必须的,但授权规则是必须的

  13. 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之外

  14. 关于木马程序的一个简单例子

    $# 是传给脚本的参数个数
    $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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值