您的位置:首页 > 运维架构 > Shell

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

2014-05-30 23:28 591 查看
特殊权限位

    

    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

#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell编程 linux suid sgid