From b8a8c3ebf3bec6ebbab19a02c92f8d5d775ad53e Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Tue, 23 Feb 2016 14:15:55 +0800 Subject: [PATCH 001/156] feat(juser/views.py;func:down_key): delete the private key when user download it issue:62 --- juser/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/juser/views.py b/juser/views.py index 41baa7536..1b85019be 100644 --- a/juser/views.py +++ b/juser/views.py @@ -466,6 +466,7 @@ def down_key(request): f.close() response = HttpResponse(data, content_type='application/octet-stream') response['Content-Disposition'] = 'attachment; filename=%s' % os.path.basename(private_key_file) + os.unlink(private_key_file) # delete it return response return HttpResponse('No Key File. Contact Admin.') From a037108cf373eb2195a92cb51ecfb87e017b873b Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Tue, 23 Feb 2016 14:23:07 +0800 Subject: [PATCH 002/156] refactor: double meaning --- juser/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/juser/views.py b/juser/views.py index 1b85019be..64535f3fe 100644 --- a/juser/views.py +++ b/juser/views.py @@ -466,7 +466,7 @@ def down_key(request): f.close() response = HttpResponse(data, content_type='application/octet-stream') response['Content-Disposition'] = 'attachment; filename=%s' % os.path.basename(private_key_file) - os.unlink(private_key_file) # delete it + os.unlink(private_key_file) return response return HttpResponse('No Key File. Contact Admin.') From 6be7003ac2e6102a21382cea420923cff5122c55 Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 23 Feb 2016 17:40:33 +0800 Subject: [PATCH 003/156] =?UTF-8?q?bugfix(=E7=99=BB=E5=BD=95=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96)=20=E9=81=BF=E5=85=8D=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=97=B6ctrl+c=E8=BF=9B=E5=85=A5=E7=B3=BB=E7=BB=9F=E5=86=85?= =?UTF-8?q?=E9=83=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 此bug信息见 #72 1. 修改思路 重命名zzjumpserver.sh,并移动到外层 2. 服务器添加用户时指定shell为 some_dir/jumpserver/init.sh 升级修复方案: 1. 删除/etc/profile.d/zzjumpserver.sh 2. git pull 更新 3. vim编辑 /etc/passwd,把之前建的用户的sh改为 some_dir/jumpserver/init.sh 终 Closes #72 closes #31 --- init.sh | 10 ++++++++++ install/zzjumpserver.sh | 13 ------------- juser/user_api.py | 4 ++-- 3 files changed, 12 insertions(+), 15 deletions(-) create mode 100755 init.sh delete mode 100644 install/zzjumpserver.sh diff --git a/init.sh b/init.sh new file mode 100755 index 000000000..f51e2f7d9 --- /dev/null +++ b/init.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# + +trap '' SIGINT +base_dir=$(dirname $0) + +export LANG='zh_CN.UTF-8' +python $base_dir/connect.py + +exit diff --git a/install/zzjumpserver.sh b/install/zzjumpserver.sh deleted file mode 100644 index 516b0466e..000000000 --- a/install/zzjumpserver.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -export LANG='zh_CN.UTF-8' - -if [ "$USER" != "admin" ] && [ "$USER" != "root" ];then - python /opt/jumpserver/connect.py - if [ $USER == 'guanghongwei' ];then - echo - else - exit 3 - echo - fi -fi diff --git a/juser/user_api.py b/juser/user_api.py index a6fc7648a..305a877fd 100644 --- a/juser/user_api.py +++ b/juser/user_api.py @@ -151,8 +151,8 @@ def server_add_user(username, password, ssh_key_pwd='', ssh_key_login_need=True) add a system user in jumpserver 在jumpserver服务器上添加一个用户 """ - bash("useradd '%s'; echo '%s'; echo '%s:%s' | chpasswd " % - (username, password, username, password)) + bash("useradd -s '%s' '%s'; echo '%s'; echo '%s:%s' | chpasswd " % + (os.path.join(BASE_DIR, 'init.sh'), username, password, username, password)) if ssh_key_login_need: gen_ssh_key(username, ssh_key_pwd) From dee1d31fc0718342e2c75ccc163f5ff12058592b Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 23 Feb 2016 18:29:23 +0800 Subject: [PATCH 004/156] =?UTF-8?q?change(with=206be7003)=20=E8=81=94?= =?UTF-8?q?=E5=8A=A8=E6=94=B9=E5=8F=98=E5=AE=89=E8=A3=85=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 为init.sh添加执行权限 2. 统一函数功能 修改其他需要改变权限的脚本或目录 --- install/next.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/install/next.py b/install/next.py index e3dc312fa..48a518b71 100755 --- a/install/next.py +++ b/install/next.py @@ -41,9 +41,6 @@ class Setup(object): version = urllib.urlopen('http://jumpserver.org/version/?id=%s' % mac) except: pass - os.chdir(jms_dir) - os.chmod('logs', 0777) - os.chmod('keys', 0777) def _input_admin(self): while True: @@ -81,16 +78,21 @@ class Setup(object): os.system('id %s &> /dev/null || useradd %s' % (self.admin_user, self.admin_user)) @staticmethod - def _cp_zzsh(): - os.chdir(os.path.join(jms_dir, 'install')) - shutil.copy('zzjumpserver.sh', '/etc/profile.d/') - bash("sed -i 's#/opt/jumpserver#%s#g' /etc/profile.d/zzjumpserver.sh" % jms_dir) + def _chmod_file(): + os.chdir(jms_dir) + os.chmod('init.sh', 0755) + os.chmod('connect.py', 0755) + os.chmod('manage.py', 0755) + os.chmod('run_websocket.py', 0755) + os.chmod('service.sh', 0755) + os.chmod('logs', 0777) + os.chmod('keys', 0777) @staticmethod def _run_service(): os.system('sh %s start' % os.path.join(jms_dir, 'service.sh')) print - color_print('安装成功,请访问web, 祝你使用愉快。\n请访问 https://github.com/ibuler/jumpserver 查看文档', 'green') + color_print('安装成功,请访问web, 祝你使用愉快。\n请访问 https://github.com/jumpserver/jumpserver 查看文档', 'green') def start(self): print "开始安装Jumpserver, 要求环境为 CentOS 6.5 x86_64" @@ -98,7 +100,7 @@ class Setup(object): self._sync_db() self._input_admin() self._create_admin() - self._cp_zzsh() + self._chmod_file() self._run_service() From d4b1bdef8e2859b638cd0f5c5c20e12ef9957973 Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 23 Feb 2016 18:46:00 +0800 Subject: [PATCH 005/156] =?UTF-8?q?modify(with=200e9a962506)=20=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E5=90=AF=E5=8A=A8=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 启动时添加 django crontab 2. 关闭时删除 django crontab --- service.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/service.sh b/service.sh index b2d9b34ae..3eca1bf05 100755 --- a/service.sh +++ b/service.sh @@ -26,6 +26,7 @@ start() { success "$jump_start" else daemon python $base_dir/manage.py runserver 0.0.0.0:80 &>> /tmp/jumpserver.log 2>&1 & + daemon python $base_dir/manage.py crontab add &>> /tmp/jumpserver.log 2>&1 daemon python $base_dir/run_websocket.py &> /dev/null 2>&1 & sleep 4 @@ -53,6 +54,7 @@ stop() { echo -n $"Stopping ${PROC_NAME} service:" + daemon python $base_dir/manage.py crontab remove &>> /tmp/jumpserver.log 2>&1 ps aux | grep -E 'manage.py|run_websocket.py' | grep -v grep | awk '{print $2}' | xargs kill -9 &> /dev/null ret=$? From f24b34758cb99abb040199496cb92e4a4682234c Mon Sep 17 00:00:00 2001 From: yumaojun <719118794@qq.com> Date: Tue, 23 Feb 2016 21:14:54 +0800 Subject: [PATCH 006/156] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsudo=20=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E3=80=80=E5=B0=8F=E5=86=99all=20=E5=BC=95=E8=B5=B7?= =?UTF-8?q?=E7=9A=84=E6=8E=A8=E9=80=81=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jperm/views.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/jperm/views.py b/jperm/views.py index a8a66128b..2f3e07762 100644 --- a/jperm/views.py +++ b/jperm/views.py @@ -619,7 +619,12 @@ def perm_sudo_add(request): raise ServerError(u"sudo name 和 commands是必填项!") pattern = re.compile(r'[\n,\r]') - commands = ', '.join(list_drop_str(pattern.split(commands), u'')) + deal_commands = list_drop_str(pattern.split(commands), u'') + for command in deal_commands: + if command.lower() == "all": + deal_commands.remove(command) + deal_commands.append(command.upper()) + commands = ', '.join(deal_commands) logger.debug(u'添加sudo %s: %s' % (name, commands)) if get_object(PermSudo, name=name): @@ -656,7 +661,12 @@ def perm_sudo_edit(request): raise ServerError(u"sudo name 和 commands是必填项!") pattern = re.compile(r'[\n,\r]') - commands = ', '.join(list_drop_str(pattern.split(commands), u'')).strip() + deal_commands = list_drop_str(pattern.split(commands), u'') + for command in deal_commands: + if command.lower() == "all": + deal_commands.remove(command) + deal_commands.append(command.upper()) + commands = ', '.join(deal_commands).strip() logger.debug(u'添加sudo %s: %s' % (name, commands)) sudo.name = name.strip() From 7bfb1d19fe1d7d4babf1ee2ddea26ad2c3b080fd Mon Sep 17 00:00:00 2001 From: yumaojun <719118794@qq.com> Date: Tue, 23 Feb 2016 23:04:46 +0800 Subject: [PATCH 007/156] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsudo=20=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E3=80=80=E5=B0=8F=E5=86=99all=20=E5=BC=95=E8=B5=B7?= =?UTF-8?q?=E7=9A=84=E6=8E=A8=E9=80=81=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jperm/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jperm/views.py b/jperm/views.py index 2f3e07762..444934901 100644 --- a/jperm/views.py +++ b/jperm/views.py @@ -621,7 +621,7 @@ def perm_sudo_add(request): pattern = re.compile(r'[\n,\r]') deal_commands = list_drop_str(pattern.split(commands), u'') for command in deal_commands: - if command.lower() == "all": + if command.strip().lower() == "all": deal_commands.remove(command) deal_commands.append(command.upper()) commands = ', '.join(deal_commands) @@ -663,7 +663,7 @@ def perm_sudo_edit(request): pattern = re.compile(r'[\n,\r]') deal_commands = list_drop_str(pattern.split(commands), u'') for command in deal_commands: - if command.lower() == "all": + if command.strip().lower() == "all": deal_commands.remove(command) deal_commands.append(command.upper()) commands = ', '.join(deal_commands).strip() From c6823be30269c15a40ec7f8bfb913ba7294a3d7f Mon Sep 17 00:00:00 2001 From: yumaojun <719118794@qq.com> Date: Tue, 23 Feb 2016 23:29:15 +0800 Subject: [PATCH 008/156] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsudo=20=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E3=80=80=E5=B0=8F=E5=86=99all=20=E5=BC=95=E8=B5=B7?= =?UTF-8?q?=E7=9A=84=E6=8E=A8=E9=80=81=E5=A4=B1=E8=B4=A5(map)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jperm/utils.py | 6 ++++++ jperm/views.py | 20 +++++++------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/jperm/utils.py b/jperm/utils.py index ecdac7f81..d011125c3 100644 --- a/jperm/utils.py +++ b/jperm/utils.py @@ -68,6 +68,12 @@ def gen_keys(key="", key_path_dir=""): return key_path_dir +def trans_all(str): + if str.strip().lower() == "all": + return str.upper() + else: + return str + if __name__ == "__main__": print gen_keys() diff --git a/jperm/views.py b/jperm/views.py index 444934901..d9d19da74 100644 --- a/jperm/views.py +++ b/jperm/views.py @@ -10,7 +10,7 @@ from jasset.models import Asset, AssetGroup from jperm.models import PermRole, PermRule, PermSudo, PermPush from jumpserver.models import Setting -from jperm.utils import gen_keys +from jperm.utils import gen_keys, trans_all from jperm.ansible_api import MyTask from jperm.perm_api import get_role_info, get_role_push_host from jumpserver.api import my_render, get_object, CRYPTOR @@ -619,12 +619,9 @@ def perm_sudo_add(request): raise ServerError(u"sudo name 和 commands是必填项!") pattern = re.compile(r'[\n,\r]') - deal_commands = list_drop_str(pattern.split(commands), u'') - for command in deal_commands: - if command.strip().lower() == "all": - deal_commands.remove(command) - deal_commands.append(command.upper()) - commands = ', '.join(deal_commands) + deal_space_commands = list_drop_str(pattern.split(commands), u'') + deal_all_commands = map(trans_all, deal_space_commands) + commands = ', '.join(deal_all_commands) logger.debug(u'添加sudo %s: %s' % (name, commands)) if get_object(PermSudo, name=name): @@ -661,12 +658,9 @@ def perm_sudo_edit(request): raise ServerError(u"sudo name 和 commands是必填项!") pattern = re.compile(r'[\n,\r]') - deal_commands = list_drop_str(pattern.split(commands), u'') - for command in deal_commands: - if command.strip().lower() == "all": - deal_commands.remove(command) - deal_commands.append(command.upper()) - commands = ', '.join(deal_commands).strip() + deal_space_commands = list_drop_str(pattern.split(commands), u'') + deal_all_commands = map(trans_all, deal_space_commands) + commands = ', '.join(deal_all_commands).strip() logger.debug(u'添加sudo %s: %s' % (name, commands)) sudo.name = name.strip() From caefbdc9175cf21b4f5f803edfba7e2b4dc88fb1 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 24 Feb 2016 11:34:33 +0800 Subject: [PATCH 009/156] =?UTF-8?q?fix(juser)=20=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E7=94=A8=E6=88=B7=EF=BC=8C=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=AF=86=E9=92=A5=E6=97=B6=E4=B8=8D=E4=B8=BA=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当推送系统用户时,选择系统用户使用密钥时没有必要为系统用户生成密码, 以免造成安全上的问题,在代码上也属于冗余. --- jperm/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jperm/views.py b/jperm/views.py index a8a66128b..eba0921c7 100644 --- a/jperm/views.py +++ b/jperm/views.py @@ -512,10 +512,10 @@ def perm_role_push(request): task = MyTask(push_resource) ret = {} - # 因为要先建立用户,所以password 是必选项,而push key是在 password也完成的情况下的 可选项 + # 因为要先建立用户,而push key是在 password也完成的情况下的 可选项 # 1. 以秘钥 方式推送角色 if key_push: - ret["pass_push"] = task.add_user(role.name, CRYPTOR.decrypt(role.password)) + ret["pass_push"] = task.add_user(role.name) ret["key_push"] = task.push_key(role.name, os.path.join(role.key_path, 'id_rsa.pub')) # 2. 推送账号密码 From b6fc8b777f20884f12ebe7d5d6714d42ebb88014 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 24 Feb 2016 12:29:47 +0800 Subject: [PATCH 010/156] =?UTF-8?q?change(juse)=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=B7=BB=E5=8A=A0=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 添加新用户,不在为该用户设置密码 2. 强制用户使用key登陆跳板机,为了安全性 3. 更改邮件文案和不发送邮件提示文案 --- juser/user_api.py | 36 ++++++++++++---------------------- juser/views.py | 9 ++++----- templates/juser/user_add.html | 9 ++------- templates/juser/user_edit.html | 2 +- 4 files changed, 19 insertions(+), 37 deletions(-) diff --git a/juser/user_api.py b/juser/user_api.py index 305a877fd..63bd4bd10 100644 --- a/juser/user_api.py +++ b/juser/user_api.py @@ -137,7 +137,7 @@ def gen_ssh_key(username, password='', if authorized_keys: auth_key_dir = os.path.join(home, username, '.ssh') - mkdir(auth_key_dir, username=username , mode=0700) + mkdir(auth_key_dir, username=username, mode=0700) authorized_key_file = os.path.join(auth_key_dir, 'authorized_keys') with open(private_key_file+'.pub') as pub_f: with open(authorized_key_file, 'w') as auth_f: @@ -146,15 +146,13 @@ def gen_ssh_key(username, password='', chown(authorized_key_file, username) -def server_add_user(username, password, ssh_key_pwd='', ssh_key_login_need=True): +def server_add_user(username, ssh_key_pwd=''): """ add a system user in jumpserver 在jumpserver服务器上添加一个用户 """ - bash("useradd -s '%s' '%s'; echo '%s'; echo '%s:%s' | chpasswd " % - (os.path.join(BASE_DIR, 'init.sh'), username, password, username, password)) - if ssh_key_login_need: - gen_ssh_key(username, ssh_key_pwd) + bash("useradd -s '%s' '%s'" % (os.path.join(BASE_DIR, 'init.sh'), username)) + gen_ssh_key(username, ssh_key_pwd) def user_add_mail(user, kwargs): @@ -171,7 +169,7 @@ def user_add_mail(user, kwargs): 您的web登录密码: %s 您的ssh密钥文件密码: %s 密钥下载地址: %s/juser/key/down/?uuid=%s - 说明: 请登陆后再下载密钥! + 说明: 请登陆跳板机后台下载密钥, 然后使用密钥登陆跳板机! """ % (user.name, user.username, user_role.get(user.role, u'普通用户'), kwargs.get('password'), kwargs.get('ssh_key_pwd'), URL, user.uuid) send_mail(mail_title, mail_msg, MAIL_FROM, [user.email], fail_silently=False) @@ -185,27 +183,17 @@ def server_del_user(username): bash('userdel -r %s' % username) -def get_display_msg(user, password, ssh_key_pwd, ssh_key_login_need, send_mail_need): +def get_display_msg(user, password, ssh_key_pwd, send_mail_need=False): if send_mail_need: msg = u'添加用户 %s 成功! 用户密码已发送到 %s 邮箱!' % (user.name, user.email) - return msg - - if ssh_key_login_need: - msg = u""" - 跳板机地址: %s - 用户名:%s - 密码:%s - 密钥密码:%s - 密钥下载url: %s/juser/key/down/?uuid=%s - 该账号密码可以登陆web和跳板机。 - """ % (URL, user.username, password, ssh_key_pwd, URL, user.uuid) else: msg = u""" - 跳板机地址: %s \n - 用户名:%s \n - 密码:%s \n + 跳板机地址: %s
+ 用户名:%s
+ 密码:%s
+ 密钥密码:%s
+ 密钥下载url: %s/juser/key/down/?uuid=%s
该账号密码可以登陆web和跳板机。 - """ % (URL, user.username, password) - + """ % (URL, user.username, password, ssh_key_pwd, URL, user.uuid) return msg diff --git a/juser/views.py b/juser/views.py index 41baa7536..d57b0fbde 100644 --- a/juser/views.py +++ b/juser/views.py @@ -153,8 +153,7 @@ def user_add(request): ssh_key_pwd = PyCrypt.gen_rand_pass(16) extra = request.POST.getlist('extra', []) is_active = False if '0' in extra else True - ssh_key_login_need = True - send_mail_need = True if '2' in extra else False + send_mail_need = True if '1' in extra else False try: if '' in [username, password, ssh_key_pwd, name, role]: @@ -176,7 +175,7 @@ def user_add(request): ssh_key_pwd=ssh_key_pwd, is_active=is_active, date_joined=datetime.datetime.now()) - server_add_user(username, password, ssh_key_pwd, ssh_key_login_need) + server_add_user(username, ssh_key_pwd) user = get_object(User, username=username) if groups: user_groups = [] @@ -193,7 +192,7 @@ def user_add(request): else: if MAIL_ENABLE and send_mail_need: user_add_mail(user, kwargs=locals()) - msg = get_display_msg(user, password, ssh_key_pwd, ssh_key_login_need, send_mail_need) + msg = get_display_msg(user, password, ssh_key_pwd, send_mail_need) return my_render('juser/user_add.html', locals(), request) @@ -361,7 +360,7 @@ def user_edit(request): admin_groups = request.POST.getlist('admin_groups', []) extra = request.POST.getlist('extra', []) is_active = True if '0' in extra else False - email_need = True if '2' in extra else False + email_need = True if '1' in extra else False user_role = {'SU': u'超级管理员', 'GA': u'部门管理员', 'CU': u'普通用户'} if user_id: diff --git a/templates/juser/user_add.html b/templates/juser/user_add.html index 621d18107..931f8d192 100644 --- a/templates/juser/user_add.html +++ b/templates/juser/user_add.html @@ -28,7 +28,7 @@
{{ error }}
{% endif %} {% if msg %} -
{{ msg }}
+
{{ msg | safe }}
{% endif %}
@@ -99,14 +99,9 @@
-{#
#} -{#
#} -{# #} -{#
#} -{#
#}
- +
diff --git a/templates/juser/user_edit.html b/templates/juser/user_edit.html index 3613e6458..96da0079c 100644 --- a/templates/juser/user_edit.html +++ b/templates/juser/user_edit.html @@ -116,7 +116,7 @@
- +
From f60a8969268ddcab0e029fb9821b990f90113846 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 24 Feb 2016 12:32:41 +0800 Subject: [PATCH 011/156] =?UTF-8?q?modify(jasset)=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=94=A8=E6=88=B7=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 所有用得到管理用户文案的地,都进行了统一 更改了 管理用户使用默认的对齐 去掉了分隔线 --- templates/jasset/asset_add.html | 11 +++++------ templates/jasset/asset_edit.html | 7 +++---- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/templates/jasset/asset_add.html b/templates/jasset/asset_add.html index ab8de9145..57c0c04d3 100644 --- a/templates/jasset/asset_add.html +++ b/templates/jasset/asset_add.html @@ -50,24 +50,23 @@
- +
-
-

Tips: 管理账号是服务器存在的root等高权限账号,用来推送新建系统用户

+

Tips: 管理用户是服务器存在的root或拥有sudo的用户,用来推送系统用户