ESC=$(printf '\033')
RED="${ESC}[0;31m"
NC="${ESC}[0m"
sed -e '
/./!b
/[^[:space:]]/!b
s/.*/\
&,/
:loop
h
s/\(\n\),/|\1/; # An empty field
s/\(\n\)\([+-]\{0,1\}[.][0-9]\{1,\}\),/\2|\1/; # +-.NNN
s/\(\n\)\([+-]\{0,1\}[0-9]\{1,\}\([.][0-9]*\)\{0,1\}\),/\2|\1/; # +-NNN.MMM +-NNN. +-NNN
s/\(\n\)~\([0-9][0-9]*\),/\2|\1/; # ~NNN
s/\(\n\)\([0-9][0-9]*\)~,/\2|\1/; # NNN~
s/\(\n\)~\([^~]*\)~,/\2|\1/; # ~...~
x;G
/^\(.*\)\n\1$/{
g;'"s/\n\([^,]*\)/${RED}\1${NC}/"'
i\
***'"${RED}ERROR${NC}"'*** Unable to process the field shown colored.\
\
Cause of error: What this means is that this particular field is not \
\
Fix: You should add to the sed code in the :loop label to \
digest the able to be processed by the sed code as it stands.\
\
The record with the offending field shown colored red:\
q
}
g; # all clear: recover and carry on...
/\n$/!bloop
s/..$//
' csv.data
\n
в начало строки. Этот маркер будет перемещаться слева направо, перескакивая через обрабатываемое поле за раз. do-while
, в теле которого мы обрабатываем поле за раз. Начало поля сигнализируется \n
, и мы обрабатываем различные разновидности полей, которые могут возникнуть. Каждый раз мы переносим обрабатываемое поле слева от \n
и заменяем ,
на |
. \n
достигает конца строки /\n$/
, после чего мы удаляем маркер и пустышку ,
мы разместили в начале. 364034|2015652205|26722|2015|4|C25753-4|TC25753,|2WD Double Cab 144.2" SLT,|Y|40506.16|43555.00|1095.00|043|005|006|007|003|008|016|041|012|029|068|027|028|033|3|2WD Double Cab 144.2"|SLT|6|4|N|S|N|S|N|N|N|| |Confirmed|w2015k65m22t5|Sierra 2500HD|Double Cab Standard Box 2-Wheel Drive SLT|Rear Wheel Drive|Extended Cab Pickup - Standard Bed
Наконец, заставьте его работать, так что bash -r
не работает, но я нашел rbash
установленный двоичный файл, который является ограниченной версией bash.
После добавления /bin/rbash
в качестве оболочки для пользователя с ограниченными правами он не может установить путь или выполнить с полным путем, и это то, что я хотел. Спасибо за помощь всем!
Вы можете использовать readonly
Bash, встроенный -, чтобы сделать переменную доступной только для чтения. Но это вряд ли удержит кого-то, кто хочет изменить свою среду, поскольку они могут просто запустить новую оболочку, не запуская файлы RC, и настроить свою собственную среду. Кроме того, это никоим образом не мешает запускать программы, не входящие в PATH
. Переменная PATH
— это просто функция удобства, позволяющая пользователям писать foo
, а не, например, /usr/bin/foo
. Вот и все. Это никак не связано с безопасностью.
Ключом к обеспечению безопасности среды является тщательное изучение вашей модели угроз -Ожидаете ли вы, что пользователи попытаются прочитать файлы других пользователей, нарушить установку, подслушать сообщения, рассылать спам, чтобы получить root-доступ или что-то еще? После того, как вы установили это, вы можете приступить к работе над тем, какие меры действительно помогут этого добиться.
Вам следует обратить внимание на «ограниченный» режим bash (, начинающийся с bash --restricted
или bash -r
), который предотвращает такие команды, как cd
, и блокирует запуск любого исполняемого файла по полному пути, поэтому он позволяет выполнять только то, что в $PATH
.
Кроме того, он предотвращает изменение переменных среды, таких как PATH
.
Вы можете найти обзор «ограниченного» режима bash здесь .