Реальное «неожиданное» поведение заключается в том, что установка флага делает исполняемый файл heap , а также стек. Флаг предназначен для использования с исполняемыми файлами, которые генерируют thunks на основе стека (например, gcc, когда вы берете адрес вложенной функции) и не должны влиять на кучу. Но Linux реализует это глобально, делая ВСЕ читаемые страницы исполняемыми.
Если вы хотите более тонкий элемент управления, вместо этого вы можете использовать системный вызов mprotect
для управления исполняемыми разрешениями для каждой страницы - Добавить код:
uintptr_t pagesize = sysconf(_SC_PAGE_SIZE);
#define PAGE_START(P) ((uintptr_t)(P) & ~(pagesize-1))
#define PAGE_END(P) (((uintptr_t)(P) + pagesize - 1) & ~(pagesize-1))
mprotect((void *)PAGE_START(shellcode), PAGE_END(shellcode+67) - PAGE_START(shellcode),
PROT_READ|PROT_WRITE|PROT_EXEC);
Руководство делает небольшую ошибку в зависимости от того, как вы следуете ей. [ClusterIP], определенный в постоянном томе, должен быть «nfs-server.default ...» вместо «nfs-service.default ...». «nfs-сервер» - это то, что используется в определении сервиса.
Ниже приведена очень минимальная настройка, которую я использовал для набора состояний. Я развернул первые 3 файла из учебника, чтобы создать PV & amp; PVC, а затем использовал нижеследующий yaml вместо бонусного yaml busybox, включенного автором. Это успешно развернуто. Дайте мне знать, если у вас есть проблемы.
apiVersion: v1
kind: Service
metadata:
name: stateful-service
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: thestate
---
apiVersion: apps/v1
metadata:
name: thestate
labels:
app: thestate
kind: StatefulSet
spec:
serviceName: stateful-service
replicas: 3
selector:
matchLabels:
app: thestate
template:
metadata:
labels:
app: thestate
spec:
containers:
- name: nginx
image: nginx:1.8
volumeMounts:
- name: my-pvc-nfs
mountPath: /mnt
ports:
- containerPort: 80
name: web
volumes:
- name: my-pvc-nfs
persistentVolumeClaim:
claimName: nfs