码迷,mamicode.com
首页 > 其他好文 > 详细

特殊权限及文件系统访问控制列表笔记及习题答案

时间:2015-04-20 19:02:32      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:程序

特殊权限

passwd:s


SUID  : 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者

chmod u+s FILE

chmod u-s FILE

如果FILE本身原有执行权限,则SUID显示为s;否则显示S

SGID  : 运行某程序时,相应进程的属组是程序文件自身的属主,而不是启动者所属的基本组

chmod g+s FILE

chmod g-s FILE

Sticky:  在一个公共目录,每个人都可以创建文件,删除自己的文件, 但不能删除别人的文件

chmod o+t DIR

chmod o-t DIR  通常是对目录而言

分别代表: SUID SGID Sticky

000   0  0        0

001         0     0        1 

010         0     1        0

011

100

101

110

111



chmod 1755 /backup/test 代表 有sticky位

chmod 2755 /backup/test 代表 SUID  & Sticky


练习:

创建一个目录/tmp/project,保证 三个用户 hadoop, hive, richie 能同是编辑该目录上的所有文档,但是只能删除自己的文档

1. 创建公共组developteam

2. 创建用户,将用户的附加组加入developteam

3. 把/tmp/project目录的属组改成公共组developteam : chown -R /tmp/project /tmp/project

4. 把/tmp/project目录赋予sticky权限: chmod o+t /tmp/project

文件访问控制列表(facl)


FACL: Filesystem Access Control List


利用文件扩展属性保存额外的访问控制权限


setfacl 

-m 设定       # -u: -g 则是为某目录创建默认的特殊文件访问控制列表

u:UID:perm

eg: setfacl -m:mygroup:rw FILENAME(GROUPNAME)

g:GID:perm

-x 取消


getfacl


练习:

每个五秒钟,就来查看hadoop用户是否已经登陆,如登陆,显示其已经登陆,并推出

sleep


几个命令:

w 比who的信息更详细

who

last: 显示/var/log/wtmp文件, 显示用户登陆历史及系统重启信息

-n # 显示最近#n的相关信息

lastb: 显示用户错误的登陆尝试,是 /var/log/btmp文件的信息

-n # 显示最近#n的相关信息

lastlog:  显示每一个用户最近一次的成功登陆信息

-u USERNAME 显示特定用户的最近一次成功登陆信息

basename

$0: 执行脚本时的脚本路径及名称

mail  收发邮件

eg: mail -s "how are you " root < etc/fstab

hostname 显示主机名

如果当前主机的主机名不是www.richie.com,就该其为www.richie.com

如果当前主机的主机名是localhost,就将其改为www.richie.com

如果当前主机的主机名为空, 或者为(none),或者为localhost,就将其改为www.richie.com

答案: [ -z `hostname` ]|| [ `hostname` == ‘(none)‘ -o `hostname` == ‘localhost‘ ] &&  hostname www.richie.com


生成随机数

RANDOM: 0-32768


随机数生成器: 熵池取值

/dev/random    熵池空后,会用户阻塞进程,等待用户输入更多随机数

/dev/urandom  熵池空后,会模拟生成随机数填满熵池

写一个脚本: 利用RANDOM生成10个随机数,并找出其中的最大值和最小值

#!/bin/bash

#

declare -i max=0

declare -i min=0

declare -i current=0

for I in {1..10};do

  current=$RANDOM

  if [ $I -lt 10 ];then

    echo -n "$current,"

  else

    echo -n $current

  fi 

 [ $I = 1 ] && min=$current

  if [ $max -lt $current ];then

    max=$current

  fi 

  if [ $min -gt $current ];then

    min=$current

  fi

done

echo -e " \nMAX: $max"

echo "MIN: $min"

面向过程

控制结构

顺序结构

选择结构

循环结构

选择结构:

if: 单分支、双分支、多分支

if CONDITION;then

statement

fi


if CONDITION;then

statment

...

else

statement

...

fi


if CONDITION1;then

statment

...

elif CONDITION2

statement

...

else 



case语句: 选择结构


case SWITCH(要引用变量的值) in

value1)

statement

...

;;

value2)

statement

...

;;

*)

statement

...

;;

esac



只接受参数start,stop,restart,status其中之一


写一个脚本, 可以接受选项及参数,而后能获取每一个选项,及选项的参数: 并能根据选项及参数做出特定的操作,比如:

adminusers.sh --add tom,jerry --del tom,biair -v|--verbose


#!/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,其用法格式为:

show

logged.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) 

#!/bin/bash

#

declare -i SHOWNUM=0

declare -i SHOWUSERS=0


for I in `seq 1 $#`; do

  if [ $# -gt 0 ]; then

    case $1 in

    -h|--help)

      echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"

      exit 0 ;;

    -v|--verbose)

      let SHOWUSERS=1

      shift ;;

    -c|--count)

      let SHOWNUM=1

      shift ;;

    *)

      echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"

      exit 8 ;;

    esac

  fi

done


if [ $SHOWNUM -eq 1 ]; then

  echo "Logged users: `who | wc -l`."

  if [ $SHOWUSERS -eq 1 ]; then

    echo "They are:"

    who

  fi

fi

Linux终端


终端类型:

console: 控制台

pty: 物理终端(VGA)

tty: 虚拟终端(VGA)

ttyS: 串行终端

pts/#: 伪终端


本文出自 “Richier” 博客,请务必保留此出处http://richier.blog.51cto.com/1447532/1636024

特殊权限及文件系统访问控制列表笔记及习题答案

标签:程序

原文地址:http://richier.blog.51cto.com/1447532/1636024

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!