TAC_PLUS AAA 平台及web展示

打印 上一主题 下一主题

主题 866|帖子 866|积分 2598

1 介绍

AAA是认证(Authentication)、授权(Authorization)和计费(Accounting)的简称,是网络安全中举行访问控制的一种安全管理机制,提供认证、授权和计费三种安全服务。
TACACS & TACACS+:Terminal Access Controller Access Control,System终端访问控制器访问控制系统。通过一个或多个中央服务器为路由器、网络访问控制器以及其它网络处置惩罚设备提供了访问控制服务。TACACS支持独立的认证(Authentication)、授权(Authorization)和计费(Accounting)功能。
2 安装

2.1 Ubuntu 安装

Ubuntu 20.04 之后不再支持tacacs,最好是使用Ubuntu18.04
1、安装

  1. # 下载并安装 TACACS+  
  2. ### 不能使用apt来安装,Ubuntu 20.04 之后不再支持
  3. ### 可以在Ubuntu 18.04 或者同样版本的镜像上安装
  4. apt-get update
  5. apt-get install tacacs+
  6. ## 配置文件
  7. vim tac_plus.conf
  8. ---------------------------------------------------
  9. key = "tacacs123" #tacacs?key
  10. accounting syslog;
  11. accounting file = /var/log/tacacs_accounting.log   #tail -f /var/log/tacacs_accounting.log
  12. default authentication = file /etc/passwd
  13. acl = network_admin {
  14.         # allow access from all sources
  15.         #permit = ^10\.
  16.         permit =  ^115\.
  17.         permit = [0-9]{1,3}\.
  18.         # implicit deny (ie: anything else)
  19. }
  20. group = admin {
  21.     default service = permit
  22.     acl = network_admin
  23.     service = exec {
  24.          priv-lvl = 15
  25.     }
  26.     cmd = display {
  27.         permit .*
  28.     }
  29. }
  30. group = operator {
  31.     acl = network_admin
  32.     service = exec {
  33.          priv-lvl = 1
  34.     }
  35.     cmd = display {
  36.         permit .*
  37.     }
  38.     cmd = show {
  39.         permit .*
  40.     }
  41. }
  42. group = ro {
  43.     acl = network_admin
  44.     service = exec {
  45.          priv-lvl = 15
  46.     }
  47.     cmd = display {
  48.         permit .*
  49.     }
  50.     cmd = show {
  51.         permit .*
  52.     }
  53.     cmd = interface {
  54.         permit .*
  55.     }
  56.     cmd = undo {
  57.         permit shutdown
  58.     }
  59.     cmd = configure {
  60.         permit .*
  61.     }
  62.     cmd = no {
  63.         permit shutdown
  64.     }
  65.     cmd = exit {
  66.         permit .*
  67.     }
  68.     cmd = quit {
  69.         permit .*
  70.     }
  71.     cmd = screen-length {
  72.         permit .*
  73.     }
  74.     cmd = terminal {
  75.         permit .*
  76.     }
  77.     cmd = set {
  78.         permit cli.*
  79.     }
  80.     cmd = ping {
  81.         permit .*
  82.     }
  83.     cmd = tracert {
  84.         permit .*
  85.     }
  86.     cmd = admin {
  87.         permit show
  88.     }
  89.     cmd = shutdown {
  90.         permit .*
  91.     }
  92. }
  93. user = chen_admin {                 #chen_admin:账号
  94.     login = des aPzSgJMfBUGB2  #使用 tac_pwd,生成账号密码:7FLiiVJUDhin2
  95.     # expires = "Feb 20 2032"
  96.     member = admin                 #权限
  97. }
  98. user = chen_ro {
  99.     login = des temjCCsjBECmU
  100.     # expires = "Feb 20 2032"
  101.     member = ro                      #权限
  102. }
  103. ####### 生成密码
  104. tac_pwd
  105. Password to be encrypted: admin@123
  106. aPzSgJMfBUGB2
  107. tac_pwd
  108. Password to be encrypted: test123
  109. temjCCsjBECmU
  110. ## 启动守护进程
  111. /etc/init.d/tacacs_plus restart
  112. * Restarting TACACS+ authentication daemon tacacs+                                                                                                                                                                      [ OK ]
复制代码
2、配置文件解释

  1. cat /etc/tacacs+/tac_plus.conf
  2. # Created by Henry-Nicolas Tourneur(henry.nicolas@tourneur.be)
  3. # See man(5) tac_plus.conf for more details
  4. # Define where to log accounting data, this is the default.
  5. ###  TACACS+ 账户的日志文件
  6. accounting file = /var/log/tac_plus.acct
  7. # This is the key that clients have to use to access Tacacs+
  8. ## TACACS+ 密钥
  9. key = testing123
  10. # Use /etc/passwd file to do authentication
  11.    
  12. #default authentication = file /etc/passwd
  13. # You can use feature like per host key with different enable passwords
  14. #host = 127.0.0.1 {
  15. #        key = test
  16. #        type = cisco
  17. #        enable = <des|cleartext> enablepass
  18. #        prompt = "Welcome XXX ISP Access Router \n\nUsername:"
  19. #}
  20. # We also can define local users and specify a file where data is stored.
  21. # That file may be filled using tac_pwd
  22. #user = test1 {
  23. #    name = "Test User"
  24. #    member = staff
  25. #    login = file /etc/tacacs/tacacs_passwords
  26. #}
  27. # We can also specify rules valid per group of users.
  28. #group = group1 {
  29. #       cmd = conf {
  30. #               deny
  31. #       }
  32. #}
  33. # Another example : forbid configure command for some hosts
  34. # for a define range of clients
  35. #group = group1 {
  36. #       login = PAM
  37. #       service = ppp
  38. #       protocol = ip {
  39. #               addr = 10.10.0.0/24
  40. #       }
  41. #       cmd = conf {
  42. #               deny .*
  43. #       }
  44. #}
  45. user = DEFAULT {
  46.         login = PAM
  47.         service = ppp protocol = ip {}
  48. }
  49. # Much more features are availables, like ACL, more service compatibilities,
  50. # commands authorization, scripting authorization.
  51. # See the man page for those features.
复制代码
2.2 Docker 安装 - 通过自己构建镜像安装

这里提供了打包tacacs镜像全部必要的资料,可下载:tacacs资料包
可以把web展示打包进镜像中也可以打包,根据自己的需求举行修改。
1、Dockerfile 文件

  1. mkdir /opt/tacacs
  2. cd /opt/tacacs
  3. # 1、Dockerfile 文件
  4. vim Dockerfile
  5. # Use Base Ubuntu image
  6. FROM ubuntu:18.04
  7. # Author of this Dockerfile
  8. MAINTAINER Andrew Roderos
  9. # Update & upgrades
  10. RUN apt-get update && apt-get upgrade -y
  11. # Install tacacs+ and Google Authenticator
  12. RUN apt-get install tacacs+ libpam-google-authenticator -y
  13. # Clear local repo
  14. RUN apt-get clean
  15. # Create a user with home directory
  16. RUN useradd -m -d /home/andrew -s /bin/bash andrew
  17. # Add password to andrew account
  18. RUN echo "andrew:test" | chpasswd
  19. # Copy Google secret key from host's volume to tacacs+ container
  20. COPY .google_authenticator /home/andrew
  21. # Change file owner
  22. RUN chown andrew:andrew /home/andrew/.google_authenticator
  23. # Copy tac_plus configuration file from host to the container
  24. COPY tac_plus.conf /etc/tacacs+/tac_plus.conf
  25. # Add tac_plus PAM
  26. RUN touch /etc/pam.d/tac_plus
  27. RUN echo auth requisite pam_google_authenticator.so forward_pass >> /etc/pam.d/tac_plus
  28. RUN echo auth required pam_unix.so use_first_pass >> /etc/pam.d/tac_plus
  29. # Run tac_plus as foreground process and use /etc/tacacas+/tac_plus.conf as the config file
  30. #CMD ["tac_plus", "-G", "-C", "/etc/tacacs+/tac_plus.conf"]
  31. # Install nginx, php-fpm
  32. COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
  33. ENV TZ=Asia/Shanghai
  34. #### 配置变量 DEBIAN_FRONTEND ,可以使以下安装不需要输入直接进行安装
  35. ENV DEBIAN_FRONTEND=noninteractive
  36. RUN apt-get -y install nginx php  php-fpm net-tools supervisor curl php-mysql php-common php-gd php-cli
  37. COPY nginx.conf /etc/nginx/nginx.conf
  38. ### webui是web页面的压缩包,需要环境:php、MySQL(默认是MySQL5.7)
  39. ADD webui_v1.7b1.tar /usr/local/nginx
  40. RUN mkdir /run/php ; chown www-data:www-data /run/php
  41. # Install mysql
  42. RUN apt-get update;apt-get install mysql-server -y
  43. COPY tac_plus.sql /usr/local/nginx/tac_plus.sql
  44. COPY start.sh /usr/local/nginx/start.sh
  45. CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
复制代码
2、提供 Dockerfile相干配置文件

以下文件都在/opt/tacacs 目次下
.google_authenticator文件获取

  1. #  安装
  2. apt-get install libpam-google-authenticator -y
  3. # 生成 Google Authenticator 密钥
  4. google-authenticator
  5. ##### 以下是输出内容
  6. Do you want authentication tokens to be time-based (y/n) y
  7. Warning: pasting the following URL into your browser exposes the OTP secret to Google:
  8.   https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@template%3Fsecret%3DB4BFA57AJCLCZT2SIQLVBWJWFY%26issuer%3Dtemplate
  9. # 下面是一个二维码的图片                                                   
  10. Your new secret key is: B4BFA57AJCLCZT2SIQLVBWJWFY
  11. Enter code from app (-1 to skip): -1
  12. Code confirmation skipped
  13. Your emergency scratch codes are:
  14.   22392718
  15.   78251317
  16.   47207995
  17.   37394412
  18.   76581106
  19. Do you want me to update your "/root/.google_authenticator" file? (y/n) y
  20. Do you want to disallow multiple uses of the same authentication
  21. token? This restricts you to one login about every 30s, but it increases
  22. your chances to notice or even prevent man-in-the-middle attacks (y/n) y
  23. By default, a new token is generated every 30 seconds by the mobile app.
  24. In order to compensate for possible time-skew between the client and the server,
  25. we allow an extra token before and after the current time. This allows for a
  26. time skew of up to 30 seconds between authentication server and client. If you
  27. experience problems with poor time synchronization, you can increase the window
  28. from its default size of 3 permitted codes (one previous code, the current
  29. code, the next code) to 17 permitted codes (the 8 previous codes, the current
  30. code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
  31. between client and server.
  32. Do you want to do so? (y/n) y
  33. If the computer that you are logging into isn't hardened against brute-force
  34. login attempts, you can enable rate-limiting for the authentication module.
  35. By default, this limits attackers to no more than 3 login attempts every 30s.
  36. Do you want to enable rate-limiting? (y/n) y
  37. ## 把生成的配置文件拿过来
  38. mv /root/.google_authenticator .
复制代码
tac_plus.conf 文件

  1. cat tac_plus.conf
  2. key = "tacacs123" #tacacs?key
  3. accounting syslog;
  4. accounting file = /var/log/tacacs_accounting.log   #tail -f /var/log/tacacs_accounting.log
  5. default authentication = file /etc/passwd
  6. acl = network_admin {
  7.         # allow access from all sources
  8.         #permit = ^10\.
  9.         permit =  ^115\.
  10.         permit = [0-9]{1,3}\.
  11.         # implicit deny (ie: anything else)
  12. }
  13. group = admin {
  14.     default service = permit
  15.     acl = network_admin
  16.     service = exec {
  17.          priv-lvl = 15
  18.     }
  19.     cmd = display {
  20.         permit .*
  21.     }
  22. }
  23. group = operator {
  24.     acl = network_admin
  25.     service = exec {
  26.          priv-lvl = 1
  27.     }
  28.     cmd = display {
  29.         permit .*
  30.     }
  31.     cmd = show {
  32.         permit .*
  33.     }
  34. }
  35. group = ro {
  36.     acl = network_admin
  37.     service = exec {
  38.          priv-lvl = 15
  39.     }
  40.     cmd = display {
  41.         permit .*
  42.     }
  43.     cmd = show {
  44.         permit .*
  45.     }
  46.     cmd = interface {
  47.         permit .*
  48.     }
  49.     cmd = undo {
  50.         permit shutdown
  51.     }
  52.     cmd = configure {
  53.         permit .*
  54.     }
  55.     cmd = no {
  56.         permit shutdown
  57.     }
  58.     cmd = exit {
  59.         permit .*
  60.     }
  61.     cmd = quit {
  62.         permit .*
  63.     }
  64.     cmd = screen-length {
  65.         permit .*
  66.     }
  67.     cmd = terminal {
  68.         permit .*
  69.     }
  70.     cmd = set {
  71.         permit cli.*
  72.     }
  73.     cmd = ping {
  74.         permit .*
  75.     }
  76.     cmd = tracert {
  77.         permit .*
  78.     }
  79.     cmd = admin {
  80.         permit show
  81.     }
  82.     cmd = shutdown {
  83.         permit .*
  84.     }
  85. }
  86. user = chen_admin {                 #chen_admin:账号
  87.     login = des aPzSgJMfBUGB2  #使用 tac_pwd,生成账号密码:7FLiiVJUDhin2
  88.     # expires = "Feb 20 2032"
  89.     member = admin                 #权限
  90. }
  91. user = chen_ro {
  92.     login = des temjCCsjBECmU
  93.     # expires = "Feb 20 2032"
  94.     member = ro                      #权限
  95. }
复制代码
supervisord.conf 配置文件

  1. cat > supervisord.conf << EOF
  2. [supervisord]
  3. nodaemon=true
  4. [program:nginx]
  5. command=nginx
  6. autostart=true
  7. autorestart=true
  8. [program:php-fpm]
  9. command=/usr/sbin/php-fpm7.2 --nodaemonize --fpm-config /etc/php/7.2/fpm/php-fpm.conf
  10. autostart=true
  11. autorestart=true
  12. [program:tac_plus]
  13. command=tac_plus -G -C /etc/tacacs+/tac_plus.conf
  14. autostart=true
  15. autorestart=true
  16. [program:mysql]
  17. command=service mysql start
  18. autostart=true
  19. autorestart=true
  20. [program:mysql-import]
  21. command=/bin/bash /usr/local/nginx/start.sh
  22. autostart=true
  23. autorestart=true
  24. EOF
  25. #### 在webui解压之后需要把其中的 tac_plus.sql 导入到数据库中
  26. #### 执行的前提是:MySQL服务已经启动
  27. cat start.sh
  28. #!/bin/bash
  29. echo "Waiting for MySQL to be ready..."
  30. while ! mysqladmin ping -h localhost -u root --silent; do
  31.     sleep 1
  32. done
  33. echo "MySQL is ready, importing data..."
  34. mysql -uroot < /usr/local/nginx/tac_plus.sql
复制代码
tac_plus.sql

这里必要注意:webui压缩包中提供的tac_plus.sql必要修改,下面是已经修改好的内容
上传到 /opt/tacacs 即可
nginx.conf文件

  1. cat nginx.conf
  2. user www-data;
  3. worker_processes auto;
  4. pid /run/nginx.pid;
  5. include /etc/nginx/modules-enabled/*.conf;
  6. events {
  7.         worker_connections 768;
  8. }
  9. http {
  10.         sendfile on;
  11.         tcp_nopush on;
  12.         tcp_nodelay on;
  13.         keepalive_timeout 65;
  14.         types_hash_max_size 2048;
  15.         include /etc/nginx/mime.types;
  16.         default_type application/octet-stream;
  17.         ssl_prefer_server_ciphers on;
  18.         access_log /var/log/nginx/access.log;
  19.         error_log /var/log/nginx/error.log;
  20.         gzip on;
  21.         server {
  22.                 listen 81;
  23.                 server_name  localhost;
  24.         
  25.                 location / {
  26.                         root   /usr/local/nginx;
  27.                         index  index.php index.html index.htm;
  28.                 }
  29.         
  30.                 location ~ \.php$ {
  31.                         root           /usr/local/nginx;
  32.                         fastcgi_pass   unix:/var/run/php/php7.2-fpm.sock;
  33.                         fastcgi_index  index.php;
  34.                         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  35.                         include        fastcgi_params;
  36.                 }
  37.         
  38.                 error_page   500 502 503 504  /50x.html;
  39.                 location = /50x.html {
  40.                         root   html;
  41.                 }
  42.         }
  43.         include /etc/nginx/conf.d/*.conf;
  44.         #include /etc/nginx/sites-enabled/*;
  45. }
复制代码
3、构建镜像

  1. docker build -t tacacs:v1 .
  2. docker images
  3. REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
  4. tacacs       v1        9d57b17b34a1   19 seconds ago   572MB
复制代码
4、运行

  1. docker run -td --name tacplus -p 30080:81 -v /opt/tacacs/tac_plus.conf:/etc/tacacs+/tac_plus.conf  -v /opt/tacacs/nginx.conf:/etc/nginx/nginx.conf  tacacs:v1
复制代码
5、查看


默认用户名密码:admin/system 这个是由 tac_plus.sql 中语句指定的,可以自己修改
Client ACL:用于设置ip访问tac_plus server的权限

NAS ACL: 用于设置用户和组的权限
Attributes:用于设置不同厂商交换机的权限级别的属性

Commands: 用于设置命令分类

Nas:添加交换机路由器的管理ip
Nas Group:添加交换机分组(类似nas)
Users:添加用户
User Group:添加用户组(类似user)
Vendor:交换机厂商管理
Reports:可以查看aaa登录审计等日志信息
2.3 各文件阐明

1、Dockerfile文件阐明

  1. # 基础镜像
  2. FROM ubuntu:18.04
  3. # 作者
  4. MAINTAINER Alyssa
  5. # 更新
  6. RUN apt-get update && apt-get upgrade -y
  7. # 安装 tacacs+ and Google Authenticator
  8. RUN apt-get install tacacs+ libpam-google-authenticator -y
  9. # 清除本地repo
  10. RUN apt-get clean
  11. # 创建一个user
  12. RUN useradd -m -d /home/andrew -s /bin/bash andrew
  13. # 修改密码
  14. RUN echo "andrew:test" | chpasswd
  15. # 把密钥文件复制到镜像的指定目录下
  16. COPY .google_authenticator /home/andrew
  17. # Change file owner
  18. RUN chown andrew:andrew /home/andrew/.google_authenticator
  19. # Copy tac_plus configuration file from host to the container
  20. COPY tac_plus.conf /etc/tacacs+/tac_plus.conf
  21. # Add tac_plus PAM
  22. RUN touch /etc/pam.d/tac_plus
  23. RUN echo auth requisite pam_google_authenticator.so forward_pass >> /etc/pam.d/tac_plus
  24. RUN echo auth required pam_unix.so use_first_pass >> /etc/pam.d/tac_plus
  25. #### 在Dockerfile中,想要实现启动多个服务,可以使用 Supervisor,直接使用apt安装即可
  26. COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
  27. ENV TZ=Asia/Shanghai
  28. #### 配置变量 DEBIAN_FRONTEND ,可以使以下安装不需要输入直接进行安装
  29. ENV DEBIAN_FRONTEND=noninteractive
  30. ### 想要webui启动服务,需要安装nginx, php-fpm,MySQL
  31. RUN apt-get -y install nginx php  php-fpm net-tools supervisor curl php-mysql php-common php-gd php-cli
  32. COPY nginx.conf /etc/nginx/nginx.conf
  33. ### webui是web页面的压缩包,需要环境:php、MySQL(默认是MySQL5.7)
  34. ADD webui_v1.7b1.tar /usr/local/nginx
  35. RUN mkdir /run/php ; chown www-data:www-data /run/php
  36. # 安装 mysql 5.7
  37. RUN apt-get update;apt-get install mysql-server -y
  38. COPY tac_plus.sql /usr/local/nginx/tac_plus.sql
  39. COPY start.sh /usr/local/nginx/start.sh
  40. CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
复制代码
2、supervisord.conf

Supervisor简朴阐明:


  • Supervisor 是一个客户端/服务器系统,允许其用户监视和控制类似UNIX的操纵系统上的多个历程。
  • Supervisor 是用 Python 开发的一套通用的历程管理程序,能将一个普通的命令行历程变为后台daemon,并监控历程状态,异常退出时能自动重启。
  • 它是通过fork/exec的方式把这些被管理的历程当作supervisor的子历程来启动,如许只要在supervisor的配置文件中,把要管理的历程的可执行文件的路径写进去即可。也实现当子历程挂掉的时候,父历程可以准确获取子历程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子历程,设置一个非root的user,这个user就可以管理它对应的历程
在这里要阐明的是文件中的配置:
  1. [program:mysql-import]
  2. command=/bin/bash /usr/local/nginx/start.sh
  3. autostart=true
  4. autorestart=true
  5. ### 这部分的功能是在MySQL启动之后,把webui的sql导入到MySQL中,所以在shell脚本中,监控到服务启动执行再执行
复制代码
3、nginx.conf

webui的情况是nginx、PHP、MySQL,以是在 nginx.conf中举行配置
  1.         include /etc/nginx/conf.d/*.conf;
  2.         #include /etc/nginx/sites-enabled/*;
  3. # 在这里注意的是,需要注释下面这个 include,这个目录下定义了一个默认的server,端口是80,与我们安装的环境的Apache2冲突,导致报错。所以这里直接注销掉。
复制代码
2.4 扩展:Ubuntu18.4 上安装MySQL8.0

  1. # 1、安装必要的软件包
  2. sudo apt install dirmngr ca-certificates software-properties-common apt-transport-https curl lsb-release -y
  3. # 2、将 GPG 密钥和仓库导入到 Ubuntu 系统
  4. curl -fsSL http://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | sudo gpg --dearmor | sudo tee /usr/share/keyrings/mysql.gpg > /dev/null
  5. # 3、导入 MySQL 8.0 仓库
  6. echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu $(lsb_release -cs) mysql-8.0" | sudo tee -a /etc/apt/sources.list.d/mysql.list
  7. # 4、(可选)如果您是开发人员或具有特定需求,可以选择导入 MySQL 源代码仓库
  8. echo "deb-src [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu $(lsb_release -cs) mysql-8.0" | sudo tee -a /etc/apt/sources.list.d/mysql.list
  9. # 5、(可选)开发人员还可以使用以下命令导入 MySQL 工具仓库
  10. echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu $(lsb_release -cs) mysql-tools" | sudo tee -a /etc/apt/sources.list.d/mysql.list
  11. echo "deb-src [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu $(lsb_release -cs) mysql-tools" | sudo tee -a /etc/apt/sources.list.d/mysql.list
  12. # 6、更新。如果提示需要导入key,可添加参数:--allow-insecure-repositories 认为仓库是安全的,不需要提供key凭证
  13. sudo apt update
  14. # 7、安装 MySQL 8.0
  15. sudo apt install mysql-community-server
  16. #### 其他的配置和正常的安装MySQL8就一样了
复制代码
结论



  • tacacs++ 在Ubuntu20.04之后默认不支持,以是使用Ubuntu18.04举行安装,或者在Ubuntu22.04使用源码包安装(源码包暂时未找到,有知道所在的欢迎留言)
  • 在打包 tacacs++ 镜像时,可根据自己的必要举行修改
  • webui的情况是LNMP,MySQL版本最好是5.7
  • 在把webui中的sql文件导入数据库时,有内容必要修改,注意不能在打包镜像时直接执行。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表