On 10 Feb 2023, at 17:06, Vladislav Odintsov wrote:
> Thanks Eelco,
>
> requested changes addressed here:
>
> https://patchwork.ozlabs.org/project/openvswitch/patch/20230210160229.3689298-1-odiv...@gmail.com/
>
Thanks for the heads up. I will try to take a loot at it next week.
//Eelco
>> On 10 Feb 2023, at 11:21, Eelco Chaudron <echau...@redhat.com> wrote:
>>
>>
>>
>> On 8 Feb 2023, at 16:22, Vladislav Odintsov wrote:
>>
>>> This patch adds new ovs-ctl options to pass umask configuration to allow
>>> OVS daemons set requested socket permissions on group. Previous
>>> behaviour (if using with systemd service unit) created sockets with 0750
>>> permissions mask (group has no write permission).
>>>
>>> Write permission for group is reasonable in usecase, where ovs-vswitchd
>>> or ovsdb-server runs as a non-privileged user:group (say,
>>> openvswitch:openvswitch) and it is needed to access unix socket from
>>> process running as another non-privileged user. In this case
>>> administrator has to add that user to openvswitch group and can connect
>>> to OVS sockets from a process running under that user.
>>>
>>> Two new ovs-ctl options --ovsdb-server-umask and --ovs-vswitchd-umask
>>> were added to manage umask values for appropriate daemons. This is
>>> useful for systemd users: both ovs-vswitchd and ovsdb-server systemd
>>> units read options from single /etc/sysconfig/openvswitch configuration
>>> file. So, with separate options it is possible to set umask only for
>>> specific daemon.
>>>
>>> OPTIONS="--ovsdb-server-umask=0002"
>>>
>>> in /etc/openvswitch/sysconfig file will set umask to 0002 value before
>>> starting only ovsdb-server, while
>>>
>>> OPTIONS="--ovs-vswitchd-umask=0002"
>>>
>>> will set umask to ovs-vswitchd daemon.
>>>
>>> Previous behaviour (not setting umask) is left as default.
>>
>> Thanks for reworking the patch, small none technical nit below, the rest
>> looks good.
>>
>> //Eelco
>>
>>
>>> Reported-at:
>>> https://mail.openvswitch.org/pipermail/ovs-dev/2023-January/401501.html
>>> Signed-off-by: Vladislav Odintsov <odiv...@gmail.com>
>>>
>>> ---
>>> v1 -> v2:
>>> - added item in NEWS file as Ilya's suggestion;
>>> - addressed Eelco's review comments;
>>> - moved umask call from ovs-ctl to ovs-lib;
>>> - added restoration of umask to effective value before the umask change;
>>> - previous version --ovs-umask option was split into two:
>>> --ovs-vswitchd-umask and --ovsdb-server-umask in order to make
>>> possible umask configuration for specific daemon when running with
>>> systemd.
>>>
>>> Signed-off-by: Vladislav Odintsov <odiv...@gmail.com>
>>> ---
>>> NEWS | 7 +++++++
>>> utilities/ovs-ctl.in | 16 ++++++++++++----
>>> utilities/ovs-lib.in | 17 ++++++++++++++---
>>> 3 files changed, 33 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/NEWS b/NEWS
>>> index fe6055a27..f7df598bd 100644
>>> --- a/NEWS
>>> +++ b/NEWS
>>> @@ -4,6 +4,13 @@ Post-v3.1.0
>>> * OVS now collects per-interface upcall statistics that can be obtained
>>> via 'ovs-appctl dpctl/show -s' or the interface's statistics column
>>> in OVSDB. Available with upstream kernel 6.2+.
>>> + - ovs-ctl:
>>> + * Added support to set umask value when starting OVS daemons. New
>>> options
>>> + --ovsdb-server-umask=MODE and --ovs-vswitchd-umask=MODE were added
>>> for
>>> + that. For instance, when write access on befalf of OVS group is
>>> needed
>>> + for ovsdb-server, pass --ovsdb-umask=0002. Use --vswitchd-umask to
>>> set
>>> + umask ovs-vswitchd daemon umask. This will allow ovsdb-server or
>>> + ovs-vswitchd to create sockets with access mode of 0770.
>>>
>>>
>>> v3.1.0 - xx xxx xxxx
>>> diff --git a/utilities/ovs-ctl.in b/utilities/ovs-ctl.in
>>> index d91552588..0b2820c36 100644
>>> --- a/utilities/ovs-ctl.in
>>> +++ b/utilities/ovs-ctl.in
>>> @@ -156,8 +156,8 @@ do_start_ovsdb () {
>>> [ "$OVS_USER" != "" ] && set "$@" --user "$OVS_USER"
>>> [ "$OVSDB_SERVER_OPTIONS" != "" ] && set "$@" $OVSDB_SERVER_OPTIONS
>>>
>>> - start_daemon "$OVSDB_SERVER_PRIORITY" "$OVSDB_SERVER_WRAPPER" "$@"
>>> \
>>> - || return 1
>>> + start_daemon "$OVSDB_SERVER_PRIORITY" "$OVSDB_SERVER_WRAPPER" \
>>> + "$OVSDB_SERVER_UMASK" "$@" || return 1
>>>
>>> # Initialize database settings.
>>> ovs_vsctl -- init -- set Open_vSwitch . db-version="$schemaver" \
>>> @@ -226,8 +226,8 @@ do_start_forwarding () {
>>> [ "$OVS_USER" != "" ] && set "$@" --user "$OVS_USER"
>>> [ "$OVS_VSWITCHD_OPTIONS" != "" ] &&set "$@" $OVS_VSWITCHD_OPTIONS
>>>
>>> - start_daemon "$OVS_VSWITCHD_PRIORITY" "$OVS_VSWITCHD_WRAPPER" "$@"
>>> ||
>>> - return 1
>>> + start_daemon "$OVS_VSWITCHD_PRIORITY" "$OVS_VSWITCHD_WRAPPER" \
>>> + "$OVS_VSWITCHD_UMASK" "$@" || return 1
>>> fi
>>> }
>>>
>>> @@ -348,6 +348,8 @@ set_defaults () {
>>> OVS_VSWITCHD_WRAPPER=
>>> OVSDB_SERVER_OPTIONS=
>>> OVS_VSWITCHD_OPTIONS=
>>> + OVSDB_SERVER_UMASK=
>>> + OVS_VSWITCHD_UMASK=
>>>
>>> DB_FILE=$dbdir/conf.db
>>> DB_SOCK=$rundir/db.sock
>>> @@ -421,6 +423,12 @@ Other important options for "start", "restart" and
>>> "force-reload-kmod":
>>> add given key-value pair to Open_vSwitch external-ids
>>> --delete-bridges delete all bridges just before starting ovs-vswitchd
>>> --ovs-user="user[:group]" pass the --user flag to ovs daemons
>>> + --ovsdb-server-umask=MODE Set umask prior to run ovsdb-server daemon.
>>> + This is useful to manage daemon's sockets
>>> permissions.
>>> + Default is not to change umask (inherited
>>> from shell).
>>> + --ovs-vswitchd-umask=MODE Set umask prior to run ovs-vswitchd daemon.
>>> + This is useful to manage daemon's sockets
>>> permissions.
>>> + Default is not to change umask (inherited
>>> from shell).
>>>
>>> Less important options for "start", "restart" and "force-reload-kmod":
>>> --daemon-cwd=DIR set working dir for OVS daemons (default:
>>> $DAEMON_CWD)
>>> diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in
>>> index 13477a6a9..004de631c 100644
>>> --- a/utilities/ovs-lib.in
>>> +++ b/utilities/ovs-lib.in
>>> @@ -165,9 +165,9 @@ install_dir () {
>>> }
>>>
>>> start_daemon () {
>>> - priority=$1
>>> - wrapper=$2
>>> - shift; shift
>>> + priority=$1 && shift
>>> + wrapper=$1 && shift
>>> + umask=$1 && shift
>>> daemon=$1
>>> strace=""
>>>
>>> @@ -223,8 +223,19 @@ start_daemon () {
>>> set nice -n "$priority" "$@"
>>> fi
>>>
>>> + # set requested umask if any and turn previous value back
>>
>> Please use a capital S for Set and end with a dot.
>>
>>> + if [ -n "$umask" ]; then
>>> + previuos_umask_value=$(umask)
>>> + umask "$umask"
>>> + fi
>>> +
>>> action "Starting $daemon" "$@" || return 1
>>>
>>> + # if umask was set, turn umask value to previous value
>>
>> Please use a capital I for If and end with a dot.
>>
>>> + if [ -n "$umask" ]; then
>>> + umask "$previuos_umask_value"
>>> + fi
>>> +
>>> if test X"$strace" != X; then
>>> # Strace doesn't have the -D option so we attach after the fact.
>>> setsid $strace -o "$logdir/$daemon.strace.log" \
>>> --
>>> 2.36.1
>>>
>>> _______________________________________________
>>> dev mailing list
>>> d...@openvswitch.org <mailto:d...@openvswitch.org>
>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>
>> _______________________________________________
>> dev mailing list
>> d...@openvswitch.org <mailto:d...@openvswitch.org>
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
> Regards,
> Vladislav Odintsov
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev