|
21、文件系统访问控制列表FACL
2021年07月23日 |
|
练习:写一个脚本 写一个脚本,显示当前系统上shell为-s指定类型的用户,并统计其用户总数。-s选项后面跟的参数必须是/etc/shells文件中存在的shell类型,否则不执行此脚本。另外,此脚本还可以接受–help选项,以显示帮助信息。脚本执行形如: ./showshells.sh -s bash 显示结果形如: BASH,3users,they are: root,redhat,gentoo #!/bin/bash # if [ $1 == ‘-s’ ]; then ! grep “${2}$” /etc/shells &> /dev/null && echo “Invalid shell.” && exit 7 elif [ $1 == ‘–help’ ];then echo “Usage: showshells.sh -s SHELL | –help” exit 0 else echo “Unknown Options.” exit 8 fi NUMOFUSER=`grep “${2}$” /etc/passwd | wc -l` SHELLUSERS=`grep “${2}$” /etc/passwd | cut -d: -f1` SHELLUSERS=`echo $SHELLUSERS | sed ‘s@[[:space:]]@,@g’` echo -e “$2, $NUMOFUSER users, they are: \n$SHELLUSERS” ${变量名} 21.1 文件系统访问控制列表: tom: tom, tom基本组 jerry: other:r– 想让jerry访问tom创建的文件,并且不让其他人访问 FACL:Filesystem Access Control List(文件系统访问控制列表) 利用文件扩展保存额外的访问控制权限 jerry: rw- 21.1.1 FACL配置 (1)setfacl(设置FACL) -m: 设定 u:UID:perm g:GID:perm -x:取消 u:UID g:GID (2)getfacl(查看FACL) 21.2 几个命令: w: 查看当前登录到系统上的用户及其在处理的事情 who: 查看当前登录到系统上的用户及其登录信息 [root@Daniel-LASV ~]# who root pts/0 2021-06-10 01:58 (116.228.4.126) [root@Daniel-LASV ~]# w 01:59:05 up 215 days, 18:16, 1 user, load average: 0.03, 0.01, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 116.228.4.126 01:58 1.00s 0.00s 0.00s w [root@Daniel-LASV ~]# 每隔5秒钟,就来查看hadoop是否已经登录,如登录,显示其已经登录,并退出; sleep : 让进程延迟几秒钟 whoami: 当前系统的有效用户 last: 显示/var/log/wtmp文件,显示用户登录历史及系统重启历史 -n #: 显示最近#次的相关信息 [root@Daniel-R480 tmp]# last -4 root pts/1 localhost Thu Jun 10 09:54 still logged in root pts/0 localhost Thu Jun 10 09:03 still logged in root pts/1 localhost Wed Jun 9 17:16 – 09:54 (16:37) root pts/0 localhost Wed Jun 9 17:04 – 09:03 (15:59) wtmp begins Wed Jun 9 14:30:27 2021 lastb: /var/log/btmp文件,显示用户错误的登录尝试 -n #: [root@Daniel-SHSH ~]# lastb -3 root ssh:notty 65.78.170.48 Tue Jun 8 21:12 – 21:12 (00:00) root ssh:notty 65.78.170.48 Tue Jun 8 21:12 – 21:12 (00:00) root ssh:notty 65.78.170.48 Tue Jun 8 21:12 – 21:12 (00:00) btmp begins Sat Jun 5 01:06:32 2021 lastlog: 显示每一个用户最近一次的成功登录信息; -u USERNAME: 显示特定用户最近的登录信息 [root@Daniel-R480 tmp]# lastlog -u daniel Username Port From Latest daniel pts/1 Thu Jun 10 09:58:18 +0800 2021 basename: $0: 执行脚本时的脚本路径及名称 [root@Daniel-R480 ~]# basename ./quit.sh quit.sh mail: 查看邮件 [root@Daniel-SHSH ~]# mail No mail for root hostname: 显示主机名 [root@Daniel-SHSH ~]# hostname Daniel-SHSH [root@Daniel-SHSH ~]# echo $HOSTNAME Daniel-SHSH [root@Daniel-R480 ~]# hostname test [root@Daniel-R480 ~]# hostname test [root@Daniel-R480 ~]# su – root Last login: Thu Jun 10 09:58:28 CST 2021 on tty1 [root@test ~]# 如果当前主机的主机名不是www.magedu.com,就将其改为www.magedu.com 如果当前主机的主机名是localhost,就将其改为www.magedu.com 如果当前主机的主机名为空,或者为(none),或者为localhost,就将其改为www.magedu.com [ -z `hostname` ] || [ `hostname` == ‘(none)’ o `hostname` == ‘localhost’ ] && hostname www.magedu.com 生成随机数 RANDOM: 0-32768 [daniel@Daniel-R480 ~]$ echo $RANDOM 20744 linux下的随机数生成器:熵池 /dev/random: /dev/urandom: 终端类型: console:控制台 pty:物理终端(通过VGA连接) tty:虚拟终端(通过vga连接) ttys:串行终端 pts/#:伪终端 写一个脚本,利用RANDOM生成10个随机数,并找出其中的最大值,和最小值; #!/bin/bash # declare -i MAX=0 declare -i MIN=0 for I in {1..10}; do MYRAND=$RANDOM [ $I -eq 1 ] && MIN=$MYRAND if [ $I -le 9 ]; then echo -n “$MYRAND,” else echo “$MYRAND” fi [ $MYRAND -gt $MAX ] && MAX=$MYRAND [ $MYRAND -lt $MIN ] && MIN=$MYRAND done echo $MAX, $MIN |