読み取りおよび/または書き込みアクセス権を持つSMB共有の確認

読み取りおよび/または書き込みアクセス権を持つSMB共有の確認

さまざまな宛先(IP)に対して、自分のアカウントにアクセス権がなく、読み取りアクセスがあり、読み取り/書き込みアクセスを持つSMB共有を確認したいと思います。

私は現在smbclientを使用しています。私が最初に実行したコマンドは次のとおりです。

smbclient -L [targetIP] -U [user] -p 445

これは私に株式のリストを提供します。例えば。

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        print$          Disk      Printer Drivers
        MySecrets       Disk

その後、このコマンドを使用してファイル共有に接続できます。

smbclient //[target]/[name_of_share_from_list] -U [user] -p 445

これで SMB プロンプトが表示されます。入力したプロンプトに応じてlsファイルが表示された場合は、読み取り権限があることがわかります。書き込み権限があるかどうかを確認するには、ファイルをプッシュする必要があるようです。

それは退屈。特定の宛先リストに対してすべての共有リストとアカウントのアクセスレベルを取得できるように自動化するにはどうすればよいですか。

ベストアンサー1

あなたはほとんどの仕事を完了しました。マニュアルページを読むと、対話型ではなく直接1つ以上のコマンドを提供するために使用できるパラメータがsmbclient提供されます。-c <command>

#!/bin/bash
username="DOMAIN\\USER"    # Double backslash
password="PASSWORD"        # For demonstration purposes only
hostname="TARGET_HOST"     # SMB hostname of target

cd "${TMPDIR:-/tmp}"
touch tmp_$$.tmp           # Required locally to copy to target

smbclient -L "$hostname" -g -A <( echo "username=$username"; echo "password=$password" ) 2>/dev/null |
    awk -F'|' '$1 == "Disk" {print $2}' |
    while IFS= read -r share
    do
        echo "Checking root of share '$share'"

        if smbclient "//$hostname/$share/" "$password" -U "$username" -c "dir" >/dev/null 2>&1
        then
            status=READ

            # Try uprating to read/write
            if smbclient "//$hostname/$share/" "$password" -U "$username" -c "put tmp_$$.tmp ; rm tmp_$$.tmp" >/dev/null 2>&1
            then
                status=WRITE
            fi
        else
            status=NONE
        fi

        case "$status" in
            READ) echo "Well, $username has read access" ;;
            WRITE) echo "Yes, $username has write access" ;;
            *) echo "No, $username has no access" ;;
        esac
    done

rm -f tmp_$$.tmp

おすすめ記事