BASH 스크립트에서 명령 실행 문제

BASH 스크립트에서 명령 실행 문제

오랫동안 BASH 스크립트를 작성하지 않아서 연습이 좀 부족해서 구조가 부실한 점 양해 부탁드립니다 :-)

SFTP 사용자 계정을 추가/제거하기 위한 기본 "프롬프트" 스크립트를 작성했습니다. 이 스크립트는 계정을 추가/제거할 때 사용자에게 정보를 묻는 메시지를 표시합니다. 추가되면 "CHROOT" 감옥에 계정을 생성하고 이미지 파일이 포함된 루트 설치 RO 폴더를 추가합니다.

그룹에는 3가지 유형이 있습니다.

'staff' = 이 사용자는 기본적으로 "관리자"이며 서버에 대한 액세스가 허용됩니다.

이들은 서버에 대한 물리적 액세스와 서버 변경, 사용자 생성, 로그 검사, SCP/SFTP 실행 허용 등의 권한을 갖습니다. (홈 폴더: /home/chroot/home/$uid) (폴더 권한: $uid:$gid) (셸: /bin/bash)

'users' = 로그인이 허용된 사용자이지만 'CHROOT' 홈 페이지를 통해서는 로그인할 수 없습니다. (즉, 기술)

"SFTP"를 실행할 수 있습니다.오직자신의 홈 디렉토리로/에서. 홈 디렉터리 외부의 파일에는 액세스할 수 없습니다. (홈 폴더: /home/chroot/home/$uid) (폴더 권한: root:root) (셸: /bin/bash)

'sftpusers' = 사용자오직SFTP가 사용됩니다.

그들은 서버에 전혀 접근할 수 없습니다. SFTP만 허용하고 홈 디렉터리에서만 허용합니다. (홈 폴더: /home/chroot/home/$uid) (폴더 권한: root:root) (셸: /bin/nologin)

이 스크립트를 실행하면 두 가지 문제가 발생합니다.

  1. 사용자를 추가하면 모든 것이 제대로 작동하는 것 같습니다. 계정은 올바른 디렉터리에 생성됩니다. 기본 폴더가 생성되고 설치 디렉터리는 사용자의 홈 디렉터리에 RO를 설치합니다. 사용자는 올바른 그룹에 추가됩니다.

질문"chown root:root /home/chroot/home/$uid": 그룹에 대해 "users" 또는 "sftpusers"를 선택하면 명령이 실행되지 않은 것처럼 홈 폴더에 올바른 권한이 없습니다 .

  1. 사용자를 삭제하면 모든 것이 제대로 작동하는 것 같습니다. 계정이 삭제되었습니다. 사용자의 "sftp" 폴더가 삭제되었습니다.

질문: 마운트된 RO 폴더는 마치 "umount -f"명령이 실행되지 않는 것처럼 마운트 해제되지 않으며, 사용자의 홈 디렉터리도 삭제되지 않습니다.

누구든지 내가 어디로 잘못 가고 있는지 지적 할 수 있습니까? (부드럽게 댓글을 달아주세요, 하하)

코드는 다음과 같습니다.

#!/bin/bash
# Notify user of incorrect selection
incorrect_selection() {
    echo "Option doesn't exist. Please try again."
}
menu_add_user() {
    clear;echo ""
    echo -e "\tADDING NEW USERS FOR SFTP"
    echo -e "\t========================="
    echo ""
    read -p " 1) What is the user's UID? " uid
    read -p " 2) What is the user's full name? " fname
    read -p " 3) What is the user's room number/cube? " room
    read -p " 4) What is the user's work phone #? " work_ph
    read -p " 5) What is the user's cell phone #? " cell_ph
    echo ""
    echo -e "\tPlease choose one of the following:"
    echo -e "\t==================================="
    echo -e "\t1) The user is a contractor"
    echo -e "\t2) The user will only be a SFTP user"
    echo -e "\t3) The user is local LAN MANAGEMENT"
    echo ""
    read -p "Enter your selection [1-3]: " member
    case $member in
        1 ) read -p "Enter the contractor's company name: " other
            other="(CONTRACTOR - ${other})"
            read -p "Will the user manage SFTP user access [y/n]? " mgr
            case $mgr in
                [Yy]* ) group='staff';;
                [Nn]* ) group='users';;
                * ) incorrect_selection;;
            esac;;
        2 ) group='sftpusers'
            other="(SFTP ONLY USER)";;
        3 ) read -p "Will the user manage SFTP user access [y/n]? " mgr
            other="(LAN MANAGEMENT)"
            case $mgr in
                [Yy]* ) group='staff';;
                [Nn]* ) group='users';;
                * ) incorrect_selection;;
            esac;;
        * ) group='sftpusers';;
    esac
    echo ""
    echo -e "\tPLEASE VERIFY"
    echo -e "\t============="
    echo -e "\tUser's UID: $uid"
    echo -e "\tUser's Name: $fname"
    echo -e "\tRoom / cubical location: $room"
    echo -e "\tUser's Work Ph: $work_ph"
    echo -e "\tUser's Work Cell Ph: $cell_ph"
    echo -e "\tUser will be placed into group: $group"
    echo -e "\tOther user information: $other"
    read -p "Is the above correct? " correct
    room=`echo "$room" | sed 's/,/|/g'`
    case $correct in
        [Yy]* ) echo -e "\tCREATING USER ACCOUNT..."
            if [[ $group -eq 'staff' ]] ; then
                echo ""
                echo -e "\tASSIGNING USER TO GROUP: [$group]"
                echo -e "\tCREATING USER ACCOUNT [$uid]..."
                sudo su -c "adduser --home /home/chroot/home/$uid --ingroup $group --disabled-password --gecos \"$fname,$room,$work_ph,$cell_ph,$other\" $uid"
                echo -e "\tCREATING USER DEFAULT DIRECTORIES - [sftp,Cisco]..."
                sudo su -c "mkdir /home/chroot/home/$uid/{sftp,Cisco}"
            elif [ $group -eq 'users' ] || [ $group -eq 'sftpusers' ] ; then
                echo ""
                echo -e "\tASSIGNING USER TO GROUP: [$group]"
                echo -e "\tCREATING USER ACCOUNT [$uid]..."
                # Create the user with the proper login shell based on group assignment.
                if [[ $group -eq 'sftpusers' ]]; then
                    sudo su -c "adduser --home /home/chroot/home/$uid --ingroup $group --disabled-password --gecos \"$fname,$room,$work_ph,$cell_ph,$other\" --shell /bin/nologin $uid"
                else
                    sudo su -c "adduser --home /home/chroot/home/$uid --ingroup $group --disabled-password --gecos \"$fname,$room,$work_ph,$cell_ph,$other\" $uid"
                fi
                echo -e "\tCREATING USER DEFAULT DIRECTORIES - [sftp,Cisco]..."
                sudo su -c "mkdir /home/chroot/home/$uid/{sftp,Cisco}"
                # THIS COMMAND IS NEEDED IN ORDER TO MAKE USER A SFTPUSER ONLY #
                sudo su -c "chown root:root /home/chroot/home/$uid"
            else
                echo ""
                echo -e "\tGROUP ($group) DOESN'T EXIST"
            fi
            echo -e "\tSETTING USER FOLDER PERMISSIONS..."
            sudo su -c "chown $uid:$group /home/chroot/home/$uid/sftp"
            sudo su -c "mount --bind /home/chroot/home/sftpuser/Cisco /home/chroot/home/$uid/Cisco"
            sudo su -c "mount -o remount,ro,bind /home/chroot/home/sftpuser/Cisco /home/chroot/home/$uid/Cisco"
            echo ""
            echo -e "\tCREATED USER ACCOUNT: [$uid]"
            sed "/END: $group/i $fname $other: $(printf '\t%.0s' {2})$uid <---- ACTIVE" SFTP_User_List.txt
            echo -e "\t============================";;
        [Nn]* ) echo "Re-enter the information..."
                menu_add_user;;
        * ) incorrect_selection;;
    esac
}
menu_delete_user() {
    clear;echo ""
    echo -e "\tDELETING USERS FROM SFTP ACCESS"
    echo -e "\t==============================="
    echo ""
    read -p " 1) What is the user's UID to be deleted? " uid
    read -p " 2) Do you want to save any files in the user's folder? " sfiles
    echo ""
    echo -e "\tPLEASE VERIFY"
    echo -e "\t============="
    echo -e "\tDelete user [UID]: $uid"
    echo -e "\tElected to save files: $sfiles"
    read -p "Is the above correct? " correct
    case $correct in
        [Yy]* ) case $sfiles in
            [Yy]* ) sudo su -c "umount -f /home/chroot/home/$uid/Cisco $uid"
                    sudo su -c "deluser --force --backup-to /home/chroot/home/sftpuser/$uid --remove-all-files $uid" 2>/dev/null ;;
            [Nn]* ) sudo su -c "deluser --quiet --force --remove-all-files $uid" 2>/dev/null ;;
                esac;;
        [Nn]* ) menu_delete_user;;
    esac
    # MARK USER REMOVED IN LIST FILE
    echo ""
    echo -e "\tDELETED USER ACCOUNT: [$uid]"
    sed -i "/$uid/ s/ACTIVE/REMOVED/" ./SFTP_User_List.txt
    echo -e "\t============================"
}
press_enter() {
    echo ""
    read -p "Press enter to continue..."
    clear
}
until [ "$selection" = '0' ]; do
    clear;
    echo ""
    echo -e "\tCREATE or DELETE SFTP USER MENU"
    echo -e "\t==============================="
    echo -e "\t 1 - Add a new user"
    echo -e "\t 2 - Delete an SFTP user"
    echo -e "\t 0 - Exit"
    echo ""
    read -p "Enter selection: " selection
    case $selection in
        1 ) clear; menu_add_user; press_enter;;
        2 ) clear; menu_delete_user; press_enter;;
        0 ) exit;;
        * ) clear; incorrect_selection; press_enter;;
    esac
done

관련 정보