mirror of https://github.com/jumpserver/jumpserver
61 lines
1.8 KiB
Django/Jinja
61 lines
1.8 KiB
Django/Jinja
#!/bin/bash
|
|
|
|
|
|
real_file=/etc/sudoers
|
|
tmp_file=$(mktemp /tmp/XXXXXXX)
|
|
|
|
# fixed sudoers file path in bsd
|
|
isbsd=$(uname -a | grep -i 'freebsd' &> /dev/null && echo "yes" || echo "no")
|
|
if [ $isbsd == "yes" ]; then
|
|
real_file=/usr/local/etc/sudoers
|
|
fi
|
|
|
|
|
|
# Backup sudoers file
|
|
cp ${real_file} ${tmp_file}
|
|
|
|
# Add Command Aliases
|
|
add_cmd_alias() {
|
|
sudo_file=$1
|
|
{% for sudo_name, sudo_cmd in sudo_alias.items %}
|
|
{% if sudo_name != 'ALL' %}
|
|
if $(grep '^Cmnd_Alias \<{{ sudo_name }}\>' ${sudo_file} &> /dev/null); then
|
|
if [ $isbsd == "yes" ]; then
|
|
sed -i .bk 's@^Cmnd_Alias \<{{ sudo_name }}\>.*@Cmnd_Alias {{ sudo_name }} = {{ sudo_cmd }}@g' ${sudo_file}
|
|
else
|
|
sed -i 's@^Cmnd_Alias \<{{ sudo_name }}\>.*@Cmnd_Alias {{ sudo_name }} = {{ sudo_cmd }}@g' ${sudo_file}
|
|
fi
|
|
else
|
|
echo "Cmnd_Alias {{ sudo_name }} = {{ sudo_cmd }}" >> ${sudo_file}
|
|
fi
|
|
{% endif %}
|
|
{% endfor %}
|
|
}
|
|
|
|
|
|
# Add Command Aliases to role
|
|
add_role_chosen() {
|
|
sudo_file=$1
|
|
{% for user, alias in sudo_user.items %}
|
|
if $(grep '^{{ user }}\>' ${sudo_file} &> /dev/null); then
|
|
if [ $isbsd == "yes" ]; then
|
|
sed -i .bk 's@^{{ user }}\>.*@{{ user }} ALL = (root) NOPASSWD: {{ alias }}@g' ${sudo_file}
|
|
else
|
|
sed -i 's@^{{ user }}\>.*@{{ user }} ALL = (root) NOPASSWD: {{ alias }}@g' ${sudo_file}
|
|
fi
|
|
else
|
|
echo "{{ user }} ALL = (root) NOPASSWD: {{ alias }}" >> ${sudo_file}
|
|
fi
|
|
{% endfor %}
|
|
}
|
|
|
|
|
|
check_syntax(){
|
|
/usr/sbin/visudo -c -f $1
|
|
}
|
|
|
|
cp $real_file $tmp_file && add_cmd_alias $tmp_file && add_role_chosen $tmp_file || exit 1
|
|
check_syntax $tmp_file && add_cmd_alias $real_file && add_role_chosen $real_file && rm -f $tmp_file || exit 2
|
|
check_syntax $real_file
|
|
|