~]# vim create_readonly.sh #!/bin/bash # 打印腳本使用方法 echo -e "method of application\ncreate_readonly.sh username." # 將用戶輸入的第一個參數賦給username這個變量 username=$1 # 將用戶家目錄賦予home這個變量 home="/home/${username}" # 判斷用戶是否存在,若是存在,則退出腳本 id $username &> /dev/null if [ $? == 0 ];then echo User already exists exit 2 fi # 判斷用戶是否在腳本名後跟了用戶名 if [ "x"$username == x"" ] then echo -e "Please enter the user name you want to create.\nUsage:'create_readonly.sh username.'" exit 2 else # 建立用戶並指定shell環境,成功提示"建立成功"反之提示"建立失敗" useradd -s /bin/bash $username && echo "The ${username} creating a successful." || "Create a failure." # 免交互建立用戶密碼 echo Abcd1234 | passwd --stdin $username &> /dev/null # 建立readonly用戶可用命令存放目錄,給.bin目錄賦權,調整.bash_profile文件屬主爲root,將.bash_profile文件給予700權限且取消編輯功能 mkdir $home/.bin && chmod 755 $home/.bin && chown root. $home/.bash_profile && chmod 755 $home/.bash_profile && chattr -i $home/.bash_profile # 將本來.bash_profile中的PATH變量註釋,在註釋PATH下一行增長"PATH=$HOME/.bin" sed -i 's/^PATH/#PATH/' ${home}/.bash_profile sed -i '/^#PATH/a\PATH=$HOME/.bin' ${home}/.bash_profile # 後臺切換至readonly用戶且執行source命令使.bash_profile生效 su - $username -c "source '$home'/.bash_profile" # 將容許使用的命令連接至用戶家目錄中的存放命令位置 ln -s /usr/bin/tail $home/.bin/tail ln -s /usr/bin/cat $home/.bin/cat ln -s /usr/bin/top $home/.bin/top # 修改sshd_config容許readonly用戶直接登陸至服務器並重啓 sed -i 's/^AllowUsers*/AllowUsers '${username}'/' /etc/ssh/sshd_config systemctl restart sshd # 判斷chmod_log.sh文件是否存在 if [ ! -f "/root/crontab/chmod_log.sh" ] then ''' (註釋文檔) 若是不存在則建立存放目錄及將如下內容重定向至/root/crontab/chmod_log.sh,並賦予執行權限,隨及添加計劃任務 #!/bin/bash(內容根據實際狀況自行更改) chmod -R 755 /mnt/logs/iottest/*/iot* chmod -R 644 /mnt/logs/iottest/*/*.log chmod -R 644 /mnt/logs/iottest/*/*/*.log* 計劃任務: 每分鐘執行一次/root/crontab/chmod_log.sh腳本,保證readonly一直有訪問日誌的權限 ''' (註釋文檔) mkdir /root/crontab echo -e '#!/bin/bash\nchmod -R 755 /mnt/logs/iottest/*/iot*\nchmod -R 644 /mnt/logs/iottest/*/*.log\nchmod -R 644 /mnt/logs/iottest/*/*/*.log*' > /root/crontab/chmod_log.sh chmod +x /root/crontab/chmod_log.sh echo "*/1 * * * * sh /root/crontab/chmod_log.sh >> /root/crontab/logfile 2>&1" >> /var/spool/cron/root # 若是文件存在則直接賦予執行權限並添加計劃任務 else chmod +x /root/crontab/chmod_log.sh echo "*/1 * * * * sh /root/crontab/chmod_log.sh >> /root/crontab/logfile 2>&1" >> /var/spool/cron/root fi fi