Skip to content

Commit 857f8b9

Browse files
LeeEircbaijiangjie
authored andcommitted
fix: 限制 nobody 的执行权限
fix: 限制命令执行权限 fix: 修复部分执行权限
1 parent 4a59ecd commit 857f8b9

File tree

6 files changed

+58
-4
lines changed

6 files changed

+58
-4
lines changed

entrypoint.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ do
66
echo "wait for jms_core $CORE_HOST ready"
77
sleep 2
88
done
9+
# 限制所有可执行目录的权限
10+
chmod -R 700 /usr/local/sbin/* && chmod -R 700 /usr/local/bin/*
11+
chmod -R 700 /usr/sbin/* && chmod -R 700 /sbin/* && chmod -R 700 /bin/*
12+
13+
14+
# 放开部分需要的可执行权限
15+
chmod 755 `which mysql` `which psql` `which mongosh` `which tsql` `which redis` `which clickhouse-client`
16+
chmod 755 `which kubectl` `which rawkubectl` `which helm` `which rawhelm`
917

1018
cd /opt/koko
1119
./koko

pkg/srvconn/conn_mongodb.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"strconv"
99
"time"
1010

11+
"github.com/jumpserver/koko/pkg/logger"
1112
"go.mongodb.org/mongo-driver/mongo"
1213
"go.mongodb.org/mongo-driver/mongo/options"
1314

@@ -92,7 +93,12 @@ func (conn *MongoDBConn) Close() error {
9293

9394
func startMongoDBCommand(opt *sqlOption) (lcmd *localcommand.LocalCommand, err error) {
9495
cmd := opt.MongoDBCommandArgs()
95-
lcmd, err = localcommand.New("mongosh", cmd, localcommand.WithPtyWin(opt.win.Width, opt.win.Height))
96+
opts, err := BuildNobodyWithOpts(localcommand.WithPtyWin(opt.win.Width, opt.win.Height))
97+
if err != nil {
98+
logger.Errorf("build nobody with opts error: %s", err)
99+
return nil, err
100+
}
101+
lcmd, err = localcommand.New("mongosh", cmd, opts...)
96102
if err != nil {
97103
return nil, err
98104
}

pkg/srvconn/conn_nobody.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package srvconn
2+
3+
import (
4+
"os/user"
5+
"strconv"
6+
"syscall"
7+
8+
"github.com/jumpserver/koko/pkg/localcommand"
9+
)
10+
11+
func BuildNobodyWithOpts(opts ...localcommand.Option) (nobodyOpts []localcommand.Option, err error) {
12+
nobody, err := user.Lookup("nobody")
13+
if err != nil {
14+
return nil, err
15+
}
16+
uid, _ := strconv.Atoi(nobody.Uid)
17+
gid, _ := strconv.Atoi(nobody.Gid)
18+
nobodyOpts = make([]localcommand.Option, 0, len(opts)+1)
19+
nobodyOpts = append(nobodyOpts, opts...)
20+
nobodyCredential := localcommand.WithCmdCredential(&syscall.Credential{Uid: uint32(uid), Gid: uint32(gid)})
21+
nobodyOpts = append(nobodyOpts, nobodyCredential)
22+
return nobodyOpts, nil
23+
}

pkg/srvconn/conn_postgresql.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"os"
66
"strconv"
77

8+
"github.com/jumpserver/koko/pkg/logger"
89
_ "github.com/lib/pq"
910

1011
"github.com/jumpserver/koko/pkg/localcommand"
@@ -61,7 +62,12 @@ func (conn *PostgreSQLConn) Close() error {
6162
func startPostgreSQLCommand(opt *sqlOption) (lcmd *localcommand.LocalCommand, err error) {
6263
argv := opt.PostgreSQLCommandArgs()
6364
//psql 是启动postgresql的客户端
64-
lcmd, err = localcommand.New("psql", argv, localcommand.WithPtyWin(opt.win.Width, opt.win.Height))
65+
opts, err := BuildNobodyWithOpts(localcommand.WithPtyWin(opt.win.Width, opt.win.Height))
66+
if err != nil {
67+
logger.Errorf("build nobody with opts error: %s", err)
68+
return nil, err
69+
}
70+
lcmd, err = localcommand.New("psql", argv, opts...)
6571
if err != nil {
6672
return nil, err
6773
}

pkg/srvconn/conn_redis.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"time"
1010

1111
"github.com/jumpserver/koko/pkg/localcommand"
12+
"github.com/jumpserver/koko/pkg/logger"
1213
"github.com/mediocregopher/radix/v3"
1314
)
1415

@@ -95,7 +96,12 @@ func (conn *RedisConn) Close() error {
9596

9697
func startRedisCommand(opt *sqlOption) (lcmd *localcommand.LocalCommand, err error) {
9798
cmd := opt.RedisCommandArgs()
98-
lcmd, err = localcommand.New("redis-cli", cmd, localcommand.WithPtyWin(opt.win.Width, opt.win.Height))
99+
opts, err := BuildNobodyWithOpts(localcommand.WithPtyWin(opt.win.Width, opt.win.Height))
100+
if err != nil {
101+
logger.Errorf("build nobody with opts error: %s", err)
102+
return nil, err
103+
}
104+
lcmd, err = localcommand.New("redis-cli", cmd, opts...)
99105
if err != nil {
100106
return nil, err
101107
}

pkg/srvconn/conn_sqlserver.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,12 @@ func startSQLServerCommand(opt *sqlOption) (lcmd *localcommand.LocalCommand, err
7272

7373
func startSQLServerNormalCommand(opt *sqlOption) (lcmd *localcommand.LocalCommand, err error) {
7474
//tsql 是启动sqlserver的客户端
75-
return localcommand.New("tsql", opt.SQLServerCommandArgs())
75+
opts, err := BuildNobodyWithOpts(localcommand.WithPtyWin(opt.win.Width, opt.win.Height))
76+
if err != nil {
77+
logger.Errorf("build nobody with opts error: %s", err)
78+
return nil, err
79+
}
80+
return localcommand.New("tsql", opt.SQLServerCommandArgs(), opts...)
7681
}
7782

7883
func tryManualLoginSQLServerServer(opt *sqlOption, lcmd *localcommand.LocalCommand) (*localcommand.LocalCommand, error) {

0 commit comments

Comments
 (0)