Linux运维第9天:Linux下suid,sgid,acl,shell编程

来源:互联网 发布:私人摄像头直播软件 编辑:程序博客网 时间:2024/06/05 16:35
特殊权限位
    


    SUID:运行某程序时,相应进程的属主就是文件本身属主,而不是发起者
        chmod u+s filename
        chmod u-s filename
            原来有x权限会变为s
            否则为S
    SGID:同上,创建文件(夹)时属组会变为被设置该位的目录的属组
        chmod g+s filename 
    Sticky:在一公共目录,每个人都能删除别人的文件,但不能删除别人的文件
        chmod o+t DIR 
        chmod o-t DIR 
    
    3位重新组一个权限 4,2,1     5755,2555
    
文件系统访问列表
    
    setfacl:
        -m:设定 
            u:username:perm 
            g:groupname:perm
            d:u:username:perm
            d:g:groupname:perm
        -x:取消
            u:username
            g:groupname
    getfacl:
        mask:最大权限
        
    
w
who
whoami
last /var/log/wtmp 用户登录历史及系统重启历史
    -n 
lastb /var/log/btmp 失败的登录尝试
lastlog 每个用户最近一次的登录记录
    -u:username 
basename
dirname
mail
hostname
    可以修改主机名


$RANDOM
    0-32768
随机数生成器:熵池
可能会取空
/dev/random
/dev/urandom
    
终端类型
    console:控制台
    pty:物理终端(VGA)
    tty:虚拟控制台(VGA)
    ttys:串行终端
    pts/n:伪终端
    
case语句:选择结构


case SWITCH in
value1)
    ...
    ;;
value2)
    ...
    ;;
value3)
    ...
    ;;
*)
    ...
    ;;
esac


a-z
A-Z
0-9
[abc]


#!/bin/bash
#
DEBUG=0
ADD=0
DEL=0


for I in `seq 0 $#`; do
  if [ $# -gt 0 ]; then
      case $1 in
      -v|--verbose)
        DEBUG=1
        shift ;;
      -h|--help)
        echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
        exit 0
        ;;
      --add)
        ADD=1
        ADDUSERS=$2
        shift 2
        ;;
      --del)
        DEL=1
        DELUSERS=$2
        shift 2
        ;;
      *)
        echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
        exit 7
        ;;
    esac
  fi
done


if [ $ADD -eq 1 ]; then
  for USER in `echo $ADDUSERS | sed 's@,@ @g'`; do
    if id $USER &> /dev/null; then
      [ $DEBUG -eq 1 ] && echo "$USER exists."
    else
      useradd $USER
      [ $DEBUG -eq 1 ] && echo "Add user $USER finished."
    fi
  done
fi


if [ $DEL -eq 1 ]; then
  for USER in `echo $DELUSERS | sed 's@,@ @g'`; do
    if id $USER &> /dev/null; then
      userdel -r $USER
      [ $DEBUG -eq 1 ] && echo "Delete $USER finished."
    else
      [ $DEBUG -eq 1 ] && echo "$USER not exist."
    fi
  done
fi


练习:写一个脚本showlogged.sh,其用法格式为:
showlogged.sh -v -c -h|--help
其中,-h选项只能单独使用,用于显示帮助信息;-c选项时,显示当前系统上登录的所有用户数;如果同时使用了-v选项,则既显示同时登录的用户数,又显示登录的用户的相关信息;如
Logged users: 4. 


They are:
root     tty2         Feb 18 02:41
root     pts/1        Mar  8 08:36 (172.16.100.177)
root     pts/5        Mar  8 07:56 (172.16.100.177)
hadoop   pts/6        Mar  8 09:16 (172.16.100.177)


练习:写一个脚本
通过命令行传递一个文件路径参数给脚本:
    如果参数多了或少了,报错;
    如果参数指定的路径对应的是目录而不是文件,报错;
而后,检查路径指定的文件是否为空或不存在,如果是,则新建此文件,并在文件中生成如下内容
#!/bin/bash

而后,使用vim编辑器打开此文件,并让光标处于这个文件的最后一行;






写个脚本,按如下方式执行:
mkscript.sh -v|--version VERSION -a|--author AUTHOR -t|--time DATETIME -d|--description DESCRIPTION -f|--file /PATH/TO/FILE -h|--help 


    1.此脚本能创建或打开-f选项指向的文件/PATH/TO/FILE;如果其为空文件,能自动为其生成第一行;如果文件不空,且第一行不是#!/bin/bash,则中止此脚本,并报错“The file is not a bash script.";否则,则直接使用vim 打开此文件;
    提示:/PATH/TO/FILE,要判断其目录是否存在;如果不存在,则报错;


    2.如果为空文件,自动生成的第一行内容为:
    #!/bin/bash
    3.如果为空文件,且使用了-a选项,则在文件中添加“# Author: -a选项的参数”,比如:
    # Author: Jerry
    4.如果为空文件,且使用了-t选项,则在文件中添加“# Date: 脚本执行-t选项后指定的时间”,比如:
    # Date: 2013-03-08 18:05
    5.如果为空文件,且使用了-d选项,则在文件中添加“# Description: -d选项的内容”,比如:
    # Description: Create a bash script file head.
    6.如果为空文件,且使用了-v选项,则在文件添加“# Version: -v后跟的参数”,比如:
    # Version: 0.1
    6.-h选项只能单独使用,用于显示使用帮助;
    7.其它选项,显示帮助信息;


说明:
这是一个用于创建脚本的脚本,它可以自动帮助创建一个bash脚本的文件头,这样,以后使用此脚本来创建其它脚本将变得比较高效。比如:
#!/bin/bash
# Author: Jerry(jerry@magedu.com)
# Date: 2013-03-08 18:05
# Description: Create a bash script file head.
# Version: 0.1
#
0 0
原创粉丝点击